CG-CTF
https://cgctf.nuptsast.com/challenges#Web
续上~
第三十一题:综合题2
查看本CMS说明;
分析:
①数据库表名为admin;字段名为username和userpass(这里直接告诉我们表名和字段名,猜测大概率存在SQL注入漏洞);
②下面列了一些文件名,如say.php、passencode.php等,用burp爬出了so.php等;
③在url处可以发现file可以直接读取文件;
思路:先用file参数读取这些文件,以获取更多信息;
分析:
①passencode.php文件里建立了一个加密函数,分析代码可知对输入的参数的每一个字符转成ASCII码后输出;
②about.php文件里暴露了后台目录:http://cms.nuptzj.cn/loginxlcteam;
③so.php里暴露了很多有用的信息:
- 检查了HTTP头部的User-Agent参数,必须为Xlcteam Browser才可以通过检验,用burp修改HTTP头部即可简单绕过;
- POST参数为'soid';此处可能存在SQL注入漏洞;
- 包含了两个文件antiinject.php和antixss.php,先简单分析代码即可知是对SQL注入和XSS跨站脚本的一些字符做了过滤;
- 可以看到查询数据库的命令为:
SELECT * FROM 'message' WHERE display=1 AND id=$id
④分析查询命令我们可以发现如果存在SQL注入漏洞,即为数字型注入漏洞,那么来仔细分析antiinject.php里的过滤规则,通过分析代码我们可以发现它对“select”、“union”、“and”、“from”等单词进行了黑名单过滤,对“+”、“=”、“空格”等字符也进行了黑名单过滤,而采用的过滤方法是用str_repalece()函数将黑名单替换掉,那么我们可以采用双写、大小写来绕过单词过滤,采用“/**/”注释绕过空格过滤,采用“like”或“>”、“<”来绕过“=”过滤,可以判断这里存在SQL注入漏洞;
思路:已知数据库表名为admin,字段名为username和userpass,并已知过滤规则,这里我们采用exists()函数来直接爆破字段的内容,工具使用burp自带的intruder模块,payload为:
soid=1/**/anandd/**/exists(selselectect/**/*/**/frfromom/**/admadminin/**/where/**/oorrd(substr(usernanameme,§1§,1))>§1§)
和
soid=1/**/anandd/**/exists(selselectect/**/*/**/frfromom/**/admadminin/**/where/**/oorrd(substr(userppassass,§1§,1))>§1§)
得到username的字段内容为admin,userpass的字段内容为102 117 99 107 114 117 110 116 117,根据之前分析的passencode.php,可知解密后应为fuckruntu;
用获得的账号密码登录后台;
得知了木马文件的文件名,再用之前的file参数读取木马文件的内容;
分析代码可知,这段代码的含义为用wtf参数里的内容替换到www里去执行,直接用Cknife连接;
打开“恭喜你获得flag2.txt”文件;
取得flag(干杯~);
完结撒花~