month 2 for cnas writeup
01 50
题目链接
http://47.100.121.220:28001/01.php
解答
题目又是大写又是小写的,格式乱乱的,强迫症患了。
整理下代码如下:
1 | <?php |
这里的highlight_file在这里的作用就是读取文件代码的,下面是about.php的源码
看about的源码这里可以看出m的值为assert
最后的就相当于执行\$assert(\$m),assert()执行代码。
传入system()函数来读取文件即可。
02 50
题目链接
http://47.100.121.220:28002/02.php
解答
1 | <?php |
这个题目也有highlight_file函数也是用来读about的源码
这里我们可以直接测试输出这三个变量
1 | <?php |
代码运行得到
\$YT=assert
\$TH^\$TUeval($_POST[0x41]);
0x41是十六进制数,表示的字符是大写字符A,A的ASCII码为65
这里我用A传参是穿不进去的,用0x41也不行。但是用65可以成功传参
同样传入system函数执行命令
gift 100
题目链接
解答
右键查看源码可以发现备份文件gift.php.bak
1 | <?php |
代码如上,这里考到一个变量覆盖的问题。
题目使用了extract(\$_GET)接收了GET请求中的数据,并将键名和键值转换为变量名和变量的值,然后再进行两个if 的条件判断,所以可以使用GET提交参数和值,利用extract()对变量进行覆盖,从而满足各个条件。
GET请求 ?flag=\&gift=,extract()会将\$flag和\$gift的值覆盖了,将变量的值设置为空或者不存在的文件就满足\$gift == \$content。
payload
1 | http://47.100.121.220:28003/gift.php?flag=&gift= |
variable 100
题目链接
解答
1 | <?php |
看代码可以看出我们需要去读flag.php里的变量flag,
这里变量可以用\$\$这种方式来传入我们的变量a通过var_dump函数来读取
传入flag是行不通的,flag.php中的存有flag的变量名并不是flag。
但是我们可以传入GLOBALS
\$GLOBALS是PHP中的全局变量,用来储存全局作用域中的变量
所以payload如下,得到flag
1 | http://47.100.121.220:28004/04.php?a=GLOBALS |
price 100
题目链接
解答
这个题目纠结了很久,对order by 注入是不熟悉的,这里我找到了一篇关于order by注入的文章
但是这里看的还是有些不懂的,不知道具体怎么去读取数据库的flag。
从文章里看出order by 注入是可以直接用sqlmap来跑的
但是测试可以发现,题目过滤空格和加号的,但是我还是不想手注,
想用sqlmap只能直接写个tamper了,tamper原来里面是有把空格变换成加号的脚本的。
但是这里加号也是过滤了的,我们只需要把tamper里的space2plus.py修改一下即可。
这里我们可以用%09来绕过
tamper 代码具体如下:
1 | #!/usr/bin/env python |
这里我们用这个脚本就能跑sqlmap了
hello 100
题目链接
解答
这个题拿到手是没有什么思路的,
但是做题之前之前习惯用burpsuit抓个包,利用scan扫一下的。
发现提示存在xpath注入
这里的payload还爆出了三个类似用户名的信息
这个是HCTF 2015的一个原题,题目的把用户名改了
但是burpsuit已经帮我爆出了用户名。
修改下writeup的payload就可以得到flag了
具体的等考完试,看看xpath注入的内容结合题目源码去理解原理。
payload
1 | http://47.100.121.220:28006/06.php?name=nari%27]|//*|user[user=%27ctfer |