先验知识 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
配置文件目录为:/usr/local/nginx/conf/nginx.conf
简单粗暴的源码审计:

@app.route('/getUrl', methods=['GET', 'POST'])
def getUrl():url = request.args.get("url")host = parse.urlparse(url).hostnameif host == 'suctf.cc':return "我扌 your problem? 111"parts = 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"

一个比较常见的思路是unicode编码逃逸
首先我们要搞清楚这个idna编码是个什么东西,简单来说就是​ IDNA是一种以标准方式处理ASCII以外字符的一种机制,
它从unicode中提取字符,并允许非ASCII码字符以允许使用的ASCII字符表示。而编码问题很可能导致去向域名服务器查询的域名不是你本身想要的域名
说白了就是因为编码不统一而导致的一系列的问题
看这个,https://xz.aliyun.com/t/6070
https://i.blackhat.com/USA-19/Thursday/us-19-Birch-HostSplit-Exploitable-Antipatterns-In-Unicode-Normalization.pdf
就比如这个payload:?url=file://suctf.c℆sr/local/nginx/conf/nginx.conf,
他在经过urlparse和urlsplit的时候都是℆,但是经过了h.encode(‘idna’).decode(‘utf-8’)之后他就神奇的变成了c/u
然后再次进行parse的时候,就是suctf.cc/usr
至于这个字符是怎么找出来的,可以参考https://en.wiktionary.org/wiki/Appendix:Unicode/Letterlike_Symbols
当然你直接搜索idna和utf-8编码漏洞,绝大多数文章都会拿这个字符做例子
当然这题可以进行脚本爆破,unicode编码数值范围在1-65535之间,每个字符都可以通过chr转换成ascii码值,事实上查看idna编码原则的时候
也是这么说的,爆破出来的就是我们需要的payload,得到的结果最好url编码一下,否则可能会出错,当然,这题靶场时不时的会自己出毛病,得多试几次
脚本原文地址:https://blog.csdn.net/rfrder/article/details/109743728

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:passdef getUrl(url):url = urlhost = parse.urlparse(url).hostnameif host == 'suctf.cc':return Falseparts = list(urlsplit(url))host = parts[1]if host == 'suctf.cc':return Falsenewhost = []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).hostnameif host == 'suctf.cc':return Trueelse:return Falseif __name__=="__main__":get_unicode()

至于第三种方法,我也是偷的,不得不说大佬思路就是广,?url=file:suctf.cc/etc/passwd,主要是我们在最后一轮验证的时候会先进行urlunsplit再进行urlsplit
这样就出现了一个问题,由于URLSPLIT函数不处理非标准url,所以再urlsplit的时候导致被截取成了//,hostname此时是空的
但是我们在urlunsplit的时候被拼接成了file://suctf.cc/etc/passwd,这就是一个标准的,所以再次urlsplit的时候hostname就成了suctf.cc
双写绕过的思想有木有????
hint在/usr/local/nginx/conf/nginx.conf里,在这里可以找到flag的路径/usr/fffffflag
参考视频链接:https://www.bilibili.com/video/BV1Jr4y1m7zw/

BUUCTF WEB PYTHONGINX1相关推荐

  1. BUUCTF WEB [BJDCTF2020]ZJCTF,不过如此

    BUUCTF WEB [BJDCTF2020]ZJCTF,不过如此 进入环境后得到源码 <?phperror_reporting(0); $text = $_GET["text&quo ...

  2. BUUCTF Web 极客大挑战 2019 EasySQL

    BUUCTF Web 极客大挑战 2019 EasySQL 文章目录 BUUCTF Web 极客大挑战 2019 EasySQL 1,输入万能密码: 2,输入万能账号 首先有点常识: 正常SQL语句这 ...

  3. BUUCTF WEB [BSidesCF 2020]Had a bad day

    BUUCTF WEB [BSidesCF 2020]Had a bad day index.php?category=woofers' 报错 Warning: include(woofers'.php ...

  4. Buuctf -web wp汇总(一)

    Buuctf -web wp汇总(一):链接 Buuctf -web wp汇总(二):链接 持续更新ing~ BuuCTF平台 文章目录 BuuCTF平台 [极客大挑战 2019]EasySQL [极 ...

  5. Buuctf -web wp汇总(三)

    Buuctf -web wp汇总(一):链接 Buuctf -web wp汇总(二):链接 Buuctf -web wp汇总(三):链接 文章目录 [WUSTCTF2020]朴实无华 [WUSTCTF ...

  6. BUUCTF WEB [BJDCTF2020]The mystery of ip

    BUUCTF WEB [BJDCTF2020]The mystery of ip 在hint.php中找到一句注释 <!-- Do you know why i know your ip? -- ...

  7. BUUCTF WEB [极客大挑战 2019]LoveSQL

    BUUCTF WEB [极客大挑战 2019]LoveSQL 进入靶机后尝试万能密码登录 admin 123' or '1'='1 获得flag Login Success! Hello admin! ...

  8. BUUCTF Web 第二页全部Write ups

    更多笔记,可以关注yym68686.top 目录 [强网杯 2019]高明的黑客 [BUUCTF 2018]Online Tool [RoarCTF 2019]Easy Java [GXYCTF201 ...

  9. BUUCTF web(一)

    前言:最近参加了一场CTF比赛,菜的一批,接下来多练习web题.MISC.密码学,多思考,提高一下自己做题的思路,以及代码审计.编写脚本的能力. [HCTF 2018]WarmUp 查看源码,发现&l ...

最新文章

  1. usaco Factorials
  2. 计算机专业可以用台式机吗,Win10X电脑操作系统可以装在台式机吗?
  3. Linux软件安装的几种方法 (三)—— 源码安装
  4. 拓端tecdat|R语言Bass模型进行销售预测
  5. python初级工程师面试题_Python工程师面试题
  6. UML教程5:协作图
  7. 触控笔和pencil笔一样吗?ipad可用的触控笔
  8. 微信群控的服务器怎么用,微信群控开发SDK使用教程--手机客户端返回聊天消息的原始内容给服务端...
  9. SSL证书的加密算法有哪些?
  10. PLC的面向对象编程
  11. 第六章贪心(三):排序不等式、绝对值不等式
  12. --k和k--的区别
  13. javascript之活灵活现的Array
  14. 微型计算机控制系统设计方法,第3章 机电一体化中微型计算机控制系统及接口设计...
  15. QT QTabWidget 使用
  16. 操作系统精选习题——第六章
  17. error: unterminated #ifndef
  18. OPT(奥普特)荣摘高工锂电“2022年度创新技术奖”
  19. python crawler
  20. OFDM子载波频率 知乎_5G新在哪儿(14)-NSA模式下测量机制与系统间互操作

热门文章

  1. win10没有android驱动安装,win10系统电脑没有手机驱动的解决方法介绍
  2. SQL进阶之路03:三值逻辑和NULL
  3. android 反编译.9报错,反编译AndroidManifest.xml文件失败
  4. 赢在微点答案专区英语_英语u校园读写2答案unit3,u校园新标准大学英语视听说3单元测试答案搜题公众号...
  5. 医药信息与计算机作业,西安交通大学19年3月课程考试《药物信息学》作业考核试题【标准答案】...
  6. URP——着色器和材质——复杂光照Complex Lit
  7. Water Sensor水位传感器学习笔记
  8. Linux管线命令 - cut,grep,sort,uniq,wc,tee,tr,col,join,paste,expand,split,xargs
  9. python随机数产生100个整数(0-100),统计出现次数最多的数字.
  10. 读书发现一个勘误,提交了,这里是地址