目录
WARNING:
-
授权渗透,备份数据后渗透;
-
在不确定危害的前提下,避免在update、insert、delete种类的注入点进行注入;
-
避免使用工具进行上述注入;
-
避免使用sqlmap的--dump功能;
SQL注入简介与成因:
SQL注入是OWASP Top 10位于榜首十分危险的漏洞,有时一个SQL注入漏洞可能会导致一家公司破产。
由于后端对前端提交的查询参数缺乏正确处理,导致攻击者从前端构造的SQL语句片段被拼接到后端代码的SQL语句片段中,进而发生预期外的数据库查询行为。
SQL注入的危害?
条件满足的情况下:
-
从技术上来说:未授权、非法增删改查数据库内容,包括窃取信息、删除数据库、读写系统文件、执行命令等等;
-
从影响上来说:客户数据丢失、系统交易数据被篡改、网站首页被篡改。
SQL注入的分类?
按照后台处理前端提交参数的类型来分,分两类:数字型注入和字符型注入。
按照请求方式分:GET、POST
按照其他分类方法,还有一些常见数据库注入类型:报错注入、盲注、延时注入、宽字节注入、二次注入、堆叠注入。
拿到一个动态站,如何找SQL注入点?
罗列潜在注入点
依次对潜在注入点尝试进行注入
首先给不同的正常参数,观察返回结果的变化
如果返回的是变化的结果,那么考虑联合查询注入、报错注入、外带数据注入、布尔盲注、延时盲注
再构造SQL语句片段尝试注入
- xxxxxxxxxxxxx - .....
如果说有报错(除非特别说明,默认指DBMS的报错,下同),但是不返回显示位的,就排除联合查询注入;
如果没有报错,就应该考虑后面三种;
如果不能联合查询注入、无报错、且返回页面无条件一致的,使用延时盲注。
如果上面都搞不定,那么换个模块(首选风格更旧或者新功能模块)的注入点。
SQLi类型的利用优先级?
报错注入>联合查询>外带数据盲注>布尔盲注>延时盲注>宽字节注入>二次注入(代码审计)
MySQL注释符
#(%23)、--+
URL编码
目标:了解get请求后到底是编码还是解码,要传送目标字符串到后端,到底该先编码还是解码然后输入到地址栏中。要求:向后端传送:1、空格;2、#;3、+;4、--空格
原理:URL请求会对URL编码的字符进行自动解码传送到后端
例子
%23:#
+:空格
%2B:+
MySQL基础函数
-
length():判断字符串长度
-
substr(var1, var2, var3)
功能:从字符串里截取其中一段字符(串),从1开始奇数
-
var1:被截取的字符串
-
var2:从哪一位开始截取
-
var3:截取长度
-
-
mid(),同substr()
-
left(str, n):截取前几个字符
-
ascii(var)
功能:取var字符的ascii码(十进制),支接收一个字符
-
if(var1, var2, var3)
var1:条件
var2:条件为真时返回的值
var3:条件为假时返回的值
-
sleep(var)
暂停执行var秒,var可以用小数