#知识点:
1、数据表现格式类型注入
2、字符转义绕过-宽字节注入
3、数字&字符&搜索&编码&加密等
#SQL注入课程体系:
1.数据库注入 - access mysql mssql oracle mongodb postgresql等
2.数据类型注入 - 数字型 字符型搜索型加密型(base64 json)等
3.提交方式注入 - get post cookie http头等
4.查询方式注入 - 查询 增加 删除 更新 堆叠等
5.复杂注入利用 - 二次注入 dnslog注入 绕过bypass等
之前我们讲过了第一个,现在讲一下第二个数据类型注入。
数字型就是正常的注入,因为数字型不需要加单引号或则双引号。因此不需要考虑符号的闭合。
接着是字符型,这个需要考虑符号的闭合。下图的--+就是个注释符,和#一样,使用注释符的时候两个都用一下,看哪个能用。下面第一行是源码,第二行是payload,第三行是把payload放到源码中的结果。
然后是搜索型,这个就好比两边加了通配符%。就是下面的%$s%。中间的s变量如果是字符的话,两边还需要加上单引号。因此在考虑符号的闭合时,不仅要考虑%也要考虑单引号。下面那个payload结尾使用的是and’%’=’。这个方式进行注释的,因为--+和#的方式都不可以使用。
然后就是编码型,这个应该挺好理解,就是编码解码的东西。
最后就是格式型,这个一般就是json类型。这个就是分为键名和键值,类似py的字典。
这个需要注意的就是单引号的闭合,双引号是不作为值传入到源码里面进行处理的,从源码里面我们也可以知道只需要闭合单引号即可,至于{}这个符号,是josn自带的,这个不用考虑。
案例:真实WEB-数据编码接受处理-base64注入
这里由于网站已经不能登录了,就不做了,说一下要点。
基本就是需要利用工具进行编码解码,这个工具除了我们之前给的一个,现在又给了一个在资源库,并且功能比之前强大,还可以ping以及扫描端口等等。名字叫CaptfEncoder-win-x64-3.1.2。然后手工注入就是加个编码,没什么特别的,用sqlmap去跑的时候是跑不出来的,因为工具没有这么智能,他分辨不出来是不是编码,你要自己判断,然后利用sqlmap自带的脚本去跑,不然跑不出来,就利用下面这个脚本去跑,在payload后面加上—tamper=脚本名称。
Sqlmap的脚本都在tamper目录下
https://www.cnblogs.com/bmjoker/p/9326258.html
扫描,利用工具等都不会自动判断数据类型,格式等,所以即使有漏洞也测不出来,具体还是需要人工的去观察,进行工具的修改或加载插件再次探针才可以。
墨者靶场-字符转义处理防护-宽字节注入
这个宽字节注入也是需要利用脚本的,不然sqlmap跑不出来
首先需要知道一个前置知识就是转义,/n代表换行,但为了让电脑知道是\n,需要进行转义就是在前面加个\,
在源码中就需要运用addcslashes() 函数来进行转义,以免特殊字符未经转义而在插入数据库时出现错误。而正是因为这个函数,导致我们在sql注入的时候对单引号的闭合进行了过滤,我们正常在注入的时候因为要考虑单引号的闭合,所以会在传入的值后面加上单引号,然后在payload后面加上--+或则#来把后面的单引号注释掉。但由于这个addcslashes() 函数,就会在单引号前面加上\,这样一来就不行了,所以我们就要用到这里的宽字节注入进行绕过,就是在单引号前面加上%df,他会生成一个占两个字节的乱码,\占一个字节。所以就会把\给屏蔽掉。
如果是用sqlmap去跑的话,同样的是需要用到脚本的,是一个unmagic开头的脚本。