手工注入常规操作

  1. 判断是否存在注入,注入是字符型还是数字型
  2. 猜解SQL查询语句中的字段数
  3. 确定显示的字段顺序
  4. 获取当前数据库
  5. 获取数据库中的表
  6. 获取表中的字段名
  7. 查询到账户的数据

数字型注入和联合注入

1
2
3
4
5
6
<?php
$conn = mysqli_connect('127.0.0.1','root','root','test');
$res = mysqli_query($conn,"select username from user where id =".$_GET['id']);
$row = mysqli_fetch_array($res);
var_dump($row['username']);
?>

这段代码原本是用于根据用户输入的id,查询用户的信息。但是可以使用在语句中加入运算符的方法来测试这种注入是否存在

比如:测试id=1id=2-1的结果是否相等

​ 测试id=1时,查询到了admin用户

​ 当输入id=2-1时,同样查询到admin用户

​ 再测试id=3-1,结果为null,这样就可以验证这里存在一个sql注入

如何注入获得更多数据?这里需要使用一个sql关键字”union”,union可以将两个select语句的结果合并到一个结果集中,但是要求连个select语句具有相同的列数。

​ 比如这样的输入id=0 union select password from users,注意中空格用url编码为%20

字符型注入和布尔盲注

1
2
3
4
5
<?php
$conn = mysqli_connect('127.0.0.1','root','test');
$res = mysqli_query($conn,"select id from users where username='"$_GET['username']."'");
$row = mysqli_fetch_array($res)
php>

这次是通过username