SEC-T CTF2017-Naughty ads-writeup
sql注入
Task
|
|
Solution
扫描器扫到robots.txt ,访问:http://naughtyads.alieni.se/robots.txt
有一个admin,但访问需要输入账号和密码。
尝试访问: http://naughtyads.alieni.se/index.phps 。得到源代码如下:
对于 $_REQUEST[‘id’] ,进行了“严格”的正则匹配,不能正常的注出数据。接下来通过 $_GET[‘id’] 将其带入数据库中查询并返回结果给页面。
这里考察了一个知识。$_REQUEST变量默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组。在 php.ini 配置文件中,有一个参数variables_order
其中几个字母(EGPCS)对应如下: Environment, Get, Post, Cookie, Server。这些字母的出现顺序,表明了数据的加载顺序。从三种默认配置来看,相对顺序均是GP
,也就是说只要有POST参数进来,那么它就会覆盖同名的GET参数。如下图;
所以就本题而言,如果在GET参数id处注入数据(比如 union select),而同时我们又通过POST方法传入一个id参数,那么服务器检测的是无害的POST数据,而在进行查询时带入的是有害的GET数据。
将如下数据包保存为test.txt,用sqlmap跑:
命令:
得到账号密码,登陆 http://naughtyads.alieni.se/admin/ 在Phone number处填上555-31338,提交后得到flag:
其实那个正则,是有问题的。。。很容易绕过的啦。