简要其他的绕过方法
第一种方式 ip白名单
在waf里面有设置,白名单就是允许通过的,白名单这些东西就不会进行拦截,如果有这个白名单,你还知道对方白名单的ip地址,根据他的IP地址,去伪造自己是白名单的IP地址,waf就不会拦截,
有前提条件第一个知道对方的白名单IP地址,怎么知道呢,可以通过对网站IP地址的伪造,就是你知道对方的网站IP地址,你就默认为本地请求本地地址是白名单,对方服务器IP地址可能针对自己访问主自己的话就不会拦截
第二种方法我们是说这个IP地址是通过上面形式获取,在数据包里面,
从网络层获取的 ip,这种一般伪造不来,如果是获取客户端的 IP,这样就可能存在伪造 IP 绕过的情
况。
测试方法:修改 http 的 header 来 bypass waf
X-forwarded-for
X-remote-IP
X-originating-IP
x-remote-addr
X-Real-ip
第二种方法我们是说这个IP地址是通过上面形式获取,在数据包里面,但是要看数据包里面waf的接受方式,因为在这个实战情况下面,他有可能接受你的IP地址是从网络层(tcp/ip)层面接受,如果这个层次数据库修改是不会接受的,意义不大,条件实在是太多,
从请求来的数据包里面添加上面这五类。
第二种方式 静态资源
现在一些waf对这个有干扰,但不排除一些新的waf或者在比赛的时候自己创建的waf可能存在这样的绕过方式
这个意思是他接受php后面的参数id,这个静态资源什么意思,这个waf很有可能过滤的是基于脚本类型的参数,也就是针对这种脚本类型的文件在进行过滤,针对某一些其他格式就不会过滤,比如图片格式文本格式,因为图片和文本格式一般不会带参数,造成不了危害,只有脚本里面有代码,或者是图片的代码没有危害,waf设计的时候就针对脚本格式和后缀里面的参数进行拦截,
这里对这个文本就不会有拦截,还会正常显示,现在在后面加上and 1=1去注入的时候,通过waf这个角度的话,可能会认定为这个参数是建立x.txt上面的,那么他有可能会方行这个注入,因为他接受到的是and1=1,后面这个参数是给了x.txt,他会觉得是txt格式不会有危害,给放行,但实际上还是在php上的注入。现在呢他已经不行了,开始会拦截了但我们还是要知道
第三种url白名单
有一些waf软件搭建上去之后可能一些正常文件访问也会被拦截,比如文件里面有一些敏感操作,他就被拦截了,为了让文件正常访问,管理者会对文件进行一个白名单设置,对这个文件就不再拦截,这个文件会有一个文件名,比如叫cd.php,假如这个里面有脚本代码,
说明现在这个也不行了,开始会对里面的内容进行检测。
第四种 爬虫白名单
他是扫描的绕过的时候我们经常会用到,比如你自己创建了一个网站,像百度,谷歌这种搜索网站会对你的网站进行一个收入,在搜索相关资料的时候会请求到你网站上来,现在爬虫白名单就是伪造这种搜索引擎,我们部署waf之后,有时候访问过快,请求过多会进行一个拦截,但是搜索引擎也会对网站爬虫,收入就是一个爬虫技术,他的速度也是很快的,符合这种拦截规则,因为waf能检查到他是用户访问还是搜索引擎访问,这个时候就可以通过数据包的构造为造出搜索引擎,这个waf就会放行,waf会认为这是官方的收入型,不是用户的攻击性。
演示一下这个扫描
用正常的扫描软件,去扫描/sqli-labs-master/Less-2,第二关靶场,不光扫描结果是错的,还会互相因为访问频率过快waf拦截的情况,但是如果是自己写的脚本去伪造百度搜索引擎的爬虫,为造出官方搜索引擎去扫描,就不会被拦截,因为他是白名单,
用这样去伪造官方扫描,不仅网站不会显示访问过于频繁拦截,结果还都是正确的。
这里说一下mysql数据库的特性,只限于MySQL数据库,
/*!50001 select * from users*/
这句sql语句的意思是,如果数据库的版本大于5.00.1,就执行这一段sql语句,如果不大于就不执行这段sql语句,50001是可变的。 演示一下
也是一种绕过方式,不过是mysql特有的。对sql语句的编译有很多,下面这些都是在第二关可执行的语句
这种最好写个脚本跑。
重点开始
阿里云盾防sql注入简要分析
我们不可能在实际应用的时候全部都是手工,所以用到一款注入工具sqlmap,打开waf防护因为云盾不知道出了什么问题,所以还用安全狗代替一下,开始用sqlmap注入工具,注入
跑不出来注入点,就是因为waf,这时候我们就可以用上sqlmap的waf绕过插件,也可以自己写一个插件引用,这里老师就自己了一个rdog.py 的插件,然后引用插件去跑, 这里直接说一下结果是不可以的因为,waf的拦截里面有sqlmap的工具拦截,但是它是通过什么判断出来是sqlmap工具在注入而拦截的呢,我们抓一下sqlmap攻击时的数据包看看,
发现那个地方是一个一个试出来的没有技巧,只要那个被检测到的地方随便修改一下,哪怕改成个1都可以访问网站
所以在注入的时候只要在把那个地方参数修改一下,就好了,但是要怎么改。他有这个参数,那如果没有这个参数又该怎么办。
就随机出现了一个浏览器信息,结果是有注入点有注入点就开始获取表名试试
获取到了。
如果打开安全狗的流量防护还是会拦截的,这个是检测流量跟注入没关系了。出现这种情况该怎么办,有三种方法
第一种就是刚刚说的 爬虫白名单
首先直接去网上搜百度的http指纹头,其他正规浏览器的也可以,然后sqlmap也支持自定义的,除了自带随机的还可以自定义,在网上搜一下可以更改user-agent
是百度的搜索引擎,网站也不会拦截,也不会出现不能访问的情况,就可以继续注入。
第二种方法,延迟
搜一下sqlmap的延迟参数,为什么说我们要去学习用sqlmap,不管是注入的知识面,还是参数,都能丰富你的注入功能,想改的参数他都有,这就是为什么他称呼为注入神器。
写好延迟时间,他就会按你的时间,隔一段时间注入一次,也是一种绕过思路,
如果间隔一秒不行,就间隔多一点。
第三种方法 代理池
但是代理池,他比较复杂,现在讲。。。。代理池就是随机输入ip,就类似于我们,扶墙的时候在外面看一些带颜色的片子,然后使用的代理,比如现在是1.1ip在注入,把1.1的ip拦截了,我在用代理池换1.2ip去注入,拦截一个换一个来使用绕过,调用很多服务器IP资源去绕过。这个还需要我们用python去写一个代理池的抓取,然后去实现这个注入,这才是完整但现在还没有学到。
网上可以用网上批量的抓代理的工具脚本,抓过来用,在sqlmap里面加一下,实现代理扫描。
也是经常的绕过waf方法,只要涉及到流量监测都会用到。
另一种情况,sqlmap没有这些参数。
而sqlmap功能方面是不支持修改这个地方的参数,安全狗又以那个地方为判定条件,sqlmap有修改不了,这时候就要写一个脚本,这就是为什么要学python和开发,因为脚本很简单不用手动那么麻烦,你可以直接拿别人的工具二次开发,也可以直接用python二次开发。如果不懂真的不行。
第一个方法写一个txt的文件,用burp去抓数据包,把数据包拦截的数据放在里面,然后修改那个sqlmap修改不了的数据参数,然后在sqlmap里面,再去引用txt的文件,以文件里面的数据包形式去访问,
这样子就可以继续访问了,这是一种方法。
用burp验证一下数据包。
还有一种是自己去写中专脚本,就类似前面说的中专注入,
file_get_contents() 把整个文件读入一个字符串中
先写一个脚本网站,把目标网站能在脚本网站里面显示,比如我们在本地写一个1.php的文件,里面的源码就是访问目标网站然后显现出来的,访问1.php就能显现出来目标网站。
用本地去搭建一个脚本地址,而这个脚本地址会去访问目标网站,我们就可以用sqlmap引用脚本去访问目标网站,而搭建的脚本里面的访问数据包我们是可以自定义的,就修改sqlmap修改不了的地方,实现一个绕过。
这里需要去搜索一下php自定义数据包的知识,用python也可以写,
就更改要更改的东西就行。