[SUCTF 2019]Pythonginx1

看源码

        @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).read()
    else:
        return "我扌 your problem? 333"

总共有三个if,目的就是通过URL编码绕过,前两个if不能等于suctf.cc,但是第三个要等于suctf.cc,在第二个if后会对URL先进行idna再utf-8编码,利用点就是这里

℆这个字符,如果使用python3进行idna编码的话

print(‘℆’.encode(‘idna’))

结果

b’c/u’

如果再使用utf-8进行解码的话

print(b’c/u’.decode(‘utf-8’))

结果

c/u

通过这种方法可以绕过网站的一些过滤字符idna与utf-8编码漏洞_会飞的a1y2~的博客-CSDN博客_idna编码

另外用脚本也可以获得这类字符[SUCTF 2019]Pythonginx_旸哥哥的博客-CSDN博客

ℂ, ℭ,Ⅽ , ⅽ , Ⓒ,ⓒ,C,这几个字符在经过idna编码再经过utf-8编码后都是c

这样就能使前两个if时不是suctf.cc而后两个是另外又提示nginx

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

Nginx配置文件:/usr/local/nginx/conf/nginx.conf

通过file协议就能打开配置文件

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

可以看到flag在/usr/fffffflag里,打开一下

这个题的方法很多但是只理解了这一种。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值