三個白帽之招聘又開始了察纯,你怕了嗎 waf部分的writeup

背景:

這個題目是今年某一期三個白帽的題目,看過之后很感興趣针肥,于是便還原出來饼记,題目地址

https://ctf.f4ck0.com/ctf/index.php

分析:

上代碼:


 <?php
function waf($str) {   
   if(stripos(strtolower($str),"select")!==false)       
           die("Be a good person!");    
   if(stripos(strtolower($str),"union")!==false)        
            die("Be a good person!");
}
function wafArr($arr) { 
   foreach ($arr as $k => $v) {
        waf($k);
        waf($v);    
}}
wafArr($_GET);
wafArr($_POST);
wafArr($_COOKIE);
wafArr($_SESSION);
function stripStr($str) {
    if (get_magic_quotes_gpc())
        $str = stripslashes($str);
    $a=addslashes(htmlspecialchars($str, ENT_QUOTES, 'UTF-8'));
    return $a;
}
$uri = explode("?",$_SERVER['REQUEST_URI']);
if(isset($uri[1])) {
    $parameter = explode("&",$uri[1]);
    foreach ($parameter as $k => $v) {
        $v1 = explode("=",$v);
        if (isset($v1[1])) {
            $_REQUEST[$v1[0]] = stripStr($v1[1]); 
       }    
}}
var_dump($_REQUEST);
$con=mysqli_connect("localhost","root","123","demo");
$result = mysqli_query($con,"SELECT * FROM ctf where user=".$_REQUEST['id'].";");
echo "</br>";
var_dump($row = mysqli_fetch_array($result));
highlight_file('index.php');?>

數(shù)據庫結構

CREATE TABLE `ctf` ( 
 `user` int(11) DEFAULT NULL, 
 `pass` varchar(255) DEFAULT NULL)

CREATE TABLE `ctf2` (  
`user` int(11) DEFAULT NULL, 
 `flag is here` varchar(255) DEFAULT NULL)

下面分析一下waf的代碼。首先慰枕,檢查get,post,cookies,這些參數(shù)具则,在這里我只用了簡單的字符串匹配。當然了具帮,這塊不是重點博肋,這塊我只是想強調get,post這些參數(shù)被過濾。

隨后進入if 分支蜂厅,也就是重組request了匪凡。首先使用?去分割url。根據規(guī)定掘猿,?前面是地址病游,后面是用戶所提交的參數(shù)。并且將前面所得到的數(shù)組的第二個元素稠通,也即是里面是參數(shù)的那個衬衬,再使用=分割买猖,獲取健值,并且將值使用stripStr函數(shù)過濾滋尉。過濾完成后玉控,重組在系統(tǒng)的REQUEST數(shù)組中。

全部過濾好參數(shù)后狮惜,再執(zhí)行數(shù)據庫語句奸远。

這個題主要考查的是http參數(shù)污染。也就是說同時提交許多參數(shù)一樣的值讽挟,根據環(huán)境的不同懒叛,將會產生覆蓋等問題。例如在本題中耽梅,如果提交的參數(shù)是?id=1?&id=2的話薛窥,apache默認會使用后面的值去覆蓋前面的值。所以在php接收get參數(shù)的時候眼姐,將會接收到id=2诅迷,而不是id=1。

根據上面講的众旗,我們可以繞過第一個waf的檢測罢杉。

第二個是重點,題目把所接收到的url(http://11.com/index.php?id=1)使用?分割贡歧,并且使用分割后數(shù)組的第二個元素去執(zhí)行waf過濾滩租。那么問題來了,如果我提交的字符串里面還有一個?呢利朵?(http://11.com/index.php?id=1?&id=2)很簡單律想,會分割成含有三個元素的數(shù)組,第一部分含有url地址绍弟,第二部分含有id=1,第三部分含有 &id=2技即,并且第三部分的數(shù)據并不會參與任何運算,而且還可以被識別成get所提交的參數(shù)樟遣。

所以我們可以提交url中參數(shù)為id=xxxxxx?id=1這樣的參數(shù)去繞過waf檢測而叼,在if分支中,會使用url中的id=xxx這段代碼去重組豹悬,并放入request數(shù)組中葵陵。看一下下面的數(shù)據庫執(zhí)行語句屿衅,使用的request數(shù)組埃难。所以呢,我們只需要繼續(xù)分析if分支的過濾代碼即可。

分支中涡尘,值將會被addslashes , htmlspecialchars這兩個函數(shù)過濾忍弛。第二個函數(shù)是轉義html實體編碼的,針對于空格考抄,我們使用mysql的注釋符號即可繞過/**/细疚。再看第一個函數(shù)。第一個函數(shù)會將單引號川梅,雙引號疯兼,反斜杠注釋掉,去防止sql注入贫途。那么是否意味著就沒有sql注入了呢吧彪?再分析一下數(shù)據庫和所執(zhí)行的數(shù)據庫語句,"SELECT * FROM ctf where user=".$_REQUEST['id'].";"丢早,而且ctf表的user字段類型是int,題目也恰好不需要單引號和雙引號去閉合(參見繞過intval注入)姨裸。于是,直接注入即可怨酝,不需要考慮addslashes 函數(shù)傀缩。注意只要不出現(xiàn)單引號和雙引號即可注入成功。

參見payload

https://ctf.f4ck0.com/ctf/?id=0/**/union/**/select/**/*/**/from/**/ctf2?&id=1

當然了农猬,這個題要是想load_file怎么辦呢赡艰,文件的路徑名必須的用單引號啊。這里我們可以使用字符串轉16進制斤葱,即可突破限制慷垮。

參見payload
https://ctf.f4ck0.com/ctf/?id=-1/**/union/**/select/**/1,LOAD_FILE(0x2f6574632f706173737764)?&id=1

后記

我在第一次看參考的那兩位的wp時候并沒有直接看懂,因為有點問題苦掘,說的比較籠統(tǒng)换帜。尤其是這句話

當然waf不生效了,而在重組$_REQUEST
時鹤啡,覆蓋并沒有發(fā)生,所以注入語句順利的被執(zhí)行

所以根本不需要懟waf蹲嚣,uri被處理后递瑰,GET
_REQUEST的值可以不一樣,然后直接注入就好了

尤其困惑隙畜,而且看payload,也沒說出個所以然來抖部。于是根據博客中提供的代碼,還原部分環(huán)境去本地測試议惰。結果發(fā)現(xiàn)題目中好多巧合慎颗,才導致的addslashes的繞過。其實如果這道題稍微做一下改動,兩位表哥所分析的可能就不對了俯萎。所以我在這里寫下詳細的分析過程傲宜,幫助其他人學習。??

參考:

  1. http://0x48.pw/2016/06/17/0x1C/

  2. http://www.firesun.me/san-ge-bai-mao-zhi-zhao-pin-you-kai-shi-liao-ni-pa-liao-ma-writeup/

  3. http://huaidan.org/archives/3047.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末夫啊,一起剝皮案震驚了整個濱河市函卒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌撇眯,老刑警劉巖报嵌,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異熊榛,居然都是意外死亡锚国,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門玄坦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來血筑,“玉大人,你說我怎么就攤上這事营搅≡菩” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵转质,是天一觀的道長园欣。 經常有香客問我,道長休蟹,這世上最難降的妖魔是什么沸枯? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮赂弓,結果婚禮上绑榴,老公的妹妹穿的比我還像新娘。我一直安慰自己盈魁,他們只是感情好翔怎,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著杨耙,像睡著了一般赤套。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上珊膜,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天容握,我揣著相機與錄音,去河邊找鬼车柠。 笑死剔氏,一個胖子當著我的面吹牛塑猖,可吹牛的內容都是我干的。 我是一名探鬼主播谈跛,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼羊苟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了币旧?” 一聲冷哼從身側響起践险,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吹菱,沒想到半個月后巍虫,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡鳍刷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年占遥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片输瓜。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡瓦胎,死狀恐怖,靈堂內的尸體忽然破棺而出尤揣,到底是詐尸還是另有隱情搔啊,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布北戏,位于F島的核電站负芋,受9級特大地震影響,放射性物質發(fā)生泄漏嗜愈。R本人自食惡果不足惜旧蛾,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蠕嫁。 院中可真熱鬧锨天,春花似錦、人聲如沸剃毒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赘阀。三九已至陪拘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間纤壁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工捺信, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留酌媒,地道東北人欠痴。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像秒咨,于是被迫代替她去往敵國和親喇辽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理雨席,服務發(fā)現(xiàn)菩咨,斷路器,智...
    卡卡羅2017閱讀 134,638評論 18 139
  • http://192.168.136.131/sqlmap/mysql/get_int.php?id=1 當給sq...
    xuningbo閱讀 10,281評論 2 22
  • sqlmap用戶手冊 說明:本文為轉載陡厘,對原文中一些明顯的拼寫錯誤進行修正抽米,并標注對自己有用的信息。 ======...
    wind_飄閱讀 2,039評論 0 5
  • 近十年來,WAF 已經逐漸發(fā)展成熟谤饭,被軟件行業(yè)接受并成為無數(shù)企業(yè)保護應用的不二選擇标捺。很多大型企業(yè)甚至相繼親自設計或...
    OneAPM閱讀 985評論 0 1
  • 我和畫畫的故事很長亡容,一直喜歡,從未放棄冤今,話不多說闺兢,直接放圖。 喜歡請多支持辟汰。 希望可以得到同樣熱愛畫畫列敲,你們的支持...
    不二很不二閱讀 275評論 3 2