CTFHub部分记录
技能树-web-00截断
这一题考察00
截断,但是不是单纯地在文件名后缀处截断,那种方法只能绕过前端,但是本题后端还会有检测,因此需要构造绕过后端检测的截断。
看到群里有些师傅问一些爆破文件名之类问题…感觉还是写一下题解吧,希望能有帮助,自己也记录一下。(为了写题解,又花30金币…LinE师傅求报销啊)
题目分析
拿到题目先看看源码:
if (!empty($_POST['submit'])) { |
通过审计可知,代码的逻辑如下:
- 1、首先取到上传文件的扩展名
$ext
- 2、将扩展名与白名单进行匹配,为
jpg
、png
或gif
才能通过第一次过滤 - 3、扩展名匹配之后,为上传的文件构造了一个新的存储路径
$des
,这个地方用了rand()
函数,就看到有些师傅问是不是要爆破…看到后面的$ext
怎么能想着爆破呢?这是正常上传图片的存储路径,人家后缀都是通过匹配的$ext
,自己的小马肯定是php
啊…
这题是考察00截断
的,突破点也很明显了:构造$des
的时候,首先取的是road
参数的内容/var/www/html/upload/
,想到看到的绕过后端检测的一篇文章,需要在存储路径的地方构造截断:/var/www/html/upload/shell.php%00
。
这里注意一下:存储路径后面要加一个php
后缀的文件名,然后利用%00
进行截断,这样上传文件的内容就存到了shell.php
里,还要注意要用%00
截断,由于内容在请求头中,直接在hex
中改00
会报bad request。
解题
抓包改包如下:
成功上传,蚁剑连接url/var/www/html/upload/shell.php
即可。
命令注入-综合
一个考察点比较全面,但是也是比较入门的题目。主要考察了对连接符、特殊文件名、读取文件命令等过滤的绕过。
这个题解题的时候走了一大圈弯路,并且还撞到了墙上,后来用正常姿势解了出来…
题目分析
既然比较综合,先看看源码:
|
可以看到对ip
传参内容中的连接符
、空格
、cat
命令、flag
字段进行了过滤,对空格过滤很简单,${IFS}
就行,之前的一篇博客也写过,对cat
和flag
的过滤也很简单,用\
即可绕过:ca\t f\lag
,关键就在于对|、&、;
三个连接符的过滤,最初没有考虑是GET
传参,忘记了用%0a
代替;
,而是选择用8/16进制
进行绕过,从而跳进了大坑…
这种方法构造思路就是:利用字符的ascii
码对应的8/16进制
表示字符,结合printf
命令输出字符串,然后利用$
将字符串当作命令执行,比如:
ls:$(printf${IFS}"\154\163") |
但是构造的payload一直没打通,于是本地测了一下:
原来是输出的内容被当作ip的一部分了… 但是没搞懂为啥这样构造出来的字符会被当做前面命令的一部分…
解题
由于是GET
传参,利用连接符的url编码就能绕过,比如;
对应%0a
,构造payload如下:
ip=127.0.0.1%0acd${IFS}fl\ag_is_here%0aca\t${IFS}fl\ag_64331483515023.php |
即可拿到flag:
这里的cat
其实还可以用more
、less
、tail
、sort
命令替换,具体可以查一下几个命令的区别。
对文件名的过滤也可以通过利用变量的形式来绕过,网上有很多例子可以参考,这里不再写了。
关于更多命令注入的绕过姿势可以参考这里。
- Post Title: CTFHub部分记录
- Post Author: ggb0n
- Post Link: http://ggb0n.cool/2020/03/03/CTFHub部分记录/
- Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
1.TCTF2020部分题解
2.第五空间pwn题练习
3.堆溢出-Tcache_Attack
4.堆溢出-Housese_Of_XXX
5.堆溢出基础
6.入坑二进制