XCTF(攻防世界)—进阶web题Write Up(二)
前言:繼續(xù)總結(jié)學(xué)到的新知識
mfw
在about頁面發(fā)現(xiàn),搭建網(wǎng)站時(shí)用了git,嘗試一下是否為git源碼泄露
輸入:
果然是源碼泄露,那就查看一下文件,發(fā)現(xiàn)并沒有找到flag,在Github上下載git源碼泄露工具,可以得到其源碼。
輸入相應(yīng)的命令:
python2 GitHack.py http://111.198.29.45:36544/.git/得到源碼,發(fā)現(xiàn)并沒有flag
查看index.php發(fā)現(xiàn)
并沒有對GET進(jìn)去的參數(shù)進(jìn)行過濾,assert函數(shù)中參數(shù)為表達(dá)式可以當(dāng)作PHP文件來執(zhí)行,再了解一下以下這兩個(gè)函數(shù):
有了assert函數(shù),又沒有過濾,可以用system()函數(shù)進(jìn)行查看文件等
?page=flag '.system("ls").'
查看templates
最后查看flag.php
在源碼中即可發(fā)現(xiàn)flag
注意:
system("") 中命令使用雙引號NaNNaNNaNNaN-Batman
下載附件,打開文件發(fā)現(xiàn)亂碼
不過還是能看到<script>等標(biāo)簽的,后綴名改為html
觀察了還是沒有什么頭緒,繼續(xù)看文件源代碼
發(fā)現(xiàn)在文件最后有一個(gè)eval()函數(shù),改成可以彈窗的alert()函數(shù)將腳本文件通過彈窗顯示出來
整理好
觀察源碼,只要滿足代碼中的正則表達(dá)式即可
又限制了e的長度,^和$必須匹配到,所以可以構(gòu)造
e=be0f23233ace98aa還有一種方法利用控制臺直接執(zhí)行下面的代碼
即可得出flag
PHP2
什么也沒有,抓包,御劍掃
發(fā)現(xiàn)index.php,但是打開還是這個(gè)頁面,那就試一下index.phps,發(fā)現(xiàn)有源碼泄露
這里解釋一下.phps文件
phps文件就是php的源代碼文件,通常用于提供給用戶(訪問者)查看php代碼,因?yàn)橛脩魺o法直接通過Web瀏覽器看到php文件的內(nèi)容,所以需要用phps文件代替。
接下來分析源代碼
===是恒等計(jì)算符 同時(shí)檢查表達(dá)式的值與類型 ==是比較運(yùn)算符號 不會檢查條件式的表達(dá)式的類型第一步需要使這行代碼不成立
if("admin"===$_GET[id])第二步需滿足這行代碼成立
$_GET[id] = urldecode($_GET[id]);if($_GET[id] == "admin")
由于網(wǎng)站在解析輸入的參數(shù)時(shí)會對非ASCII碼的字符進(jìn)行一次urlencode
所以構(gòu)造payload時(shí)將其中一個(gè)字符urlencode兩次即可
payload:
即可得出flag
unserialize3
這個(gè)格式再加上題目,很容易就可以想到是考察反序列化的
PHP魔法函數(shù)中存在__wakeup()方法,unserialize()會檢查是否存在一個(gè)__wakeup()方法。如果存在,則先會調(diào)用__wakeup()方法。
下面就來構(gòu)造payload:
O:4:"xctf":1:{s:4:"flag";s:3:"111";} #xctf后面的1即代表屬性個(gè)數(shù)發(fā)現(xiàn)回顯結(jié)果為:
bad requests
這里是因?yàn)開_wakeup()的影響,所以要繞過__wakeup,
當(dāng)成員屬性數(shù)目大于實(shí)際數(shù)目時(shí)可繞過wakeup方法(CVE-2016-7124)故構(gòu)造payload:
?code=O:4:"xctf":3:{s:4:"flag";s:3:"111";}即可得出flag
補(bǔ)充:屬性
類的變量成員叫做“屬性”,或者叫“字段”、“特征”,在本文檔統(tǒng)一稱為“屬性”。屬性聲明是由關(guān)鍵字 public,protected 或者 private 開頭,然后跟一個(gè)普通的變量聲明來組成。
// 正確的屬性聲明public $var6 = myConstant;ics-05
御劍、源碼都沒有什么線索,點(diǎn)擊一下云平臺設(shè)備維護(hù)中心,發(fā)現(xiàn)URL有變化
所以猜測是應(yīng)該是文件包含讀源碼,利用php://filter協(xié)議即可
?page=php://filter/read=convert.base64-encode/resource=index.php
base64解碼得到index.php源碼,在源碼中發(fā)現(xiàn)關(guān)鍵的代碼
這串代碼存在一個(gè)漏洞,preg_replace函數(shù)存在命令執(zhí)行漏洞
preg_replace()函數(shù)使用 /e模式,導(dǎo)致代碼執(zhí)行的問題
/e 修正符使 preg_replace() 將 replacement 參數(shù)當(dāng)作 PHP 代碼(在適當(dāng)?shù)哪嫦蛞锰鎿Q完之后)。提示:要確保 replacement 構(gòu)成一個(gè)合法的 PHP 代碼字符串,否則 PHP 會在報(bào)告在包含 preg_replace() 的行中出現(xiàn)語法解析錯(cuò)誤。
所以利用這個(gè)漏洞可以執(zhí)行一些命令
抓包,首先設(shè)置IP地址為127.0.01,再傳入三個(gè)參數(shù)的值
?pat=/1234/e&rep=system("ls")&sub=1234
發(fā)現(xiàn)一個(gè)特別的文件夾s3chahahaDir,進(jìn)行查看
在這里用空格會沒有變化,用%20或者+代替,%26%26為&&
A&&B A執(zhí)行成功,然后才會執(zhí)行B
發(fā)現(xiàn)flag文件,進(jìn)行查看
使用cat命令查看flag.php
即可得出flag
總結(jié):這次就先總結(jié)到這里,下次繼續(xù)總結(jié)!
總結(jié)
以上是生活随笔為你收集整理的XCTF(攻防世界)—进阶web题Write Up(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python学习(函数)
- 下一篇: I春秋——web Write up(二)