01攻防世界ics-06
https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=1&id=4920&page=1
這題 表面特别吓人
實際上可以進入報表中心
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2YfNWawNCM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPB10drR0T3lEVOBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL1YDN4MzNykTMxITOwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
進入報表中心後 仔細觀察url發現有個參數
思考了半天查了題解(丢人)
這題的做法是 直接爆破url(非常靈異 沒啥技術可言)
用python代碼弄出1-1w的數字
然後粘到爆破子產品裡開始爆破
排序一下長度發現有一個不是1866的 那個id就是有問題的
直接向url輸入對應的id值即可拿到flag
02 種族歧視
分值: 300
小明同學今天通路了一個網站,竟然不允許中國人通路!太坑了,于是小明同學決心一定要進去一探究竟!
http://lab1.xseclab.com/base1_0ef337f3afbe42d5619d7a36c19c20ab/index.php
抓個包改一下語言(我直接改成啞巴(神秘)) 被當成外國人 就能拿到flag了
(其實我發現瞎填假裝自己是外星人也可
)
03 key究竟在哪裡呢?
分值: 200
上一次小明同學輕松找到了key,感覺這麼簡單的題目多無聊,于是有了找key的加強版,那麼key這次會藏在哪裡呢?
抓包 然後重發 在響應裡發現了key
http://lab1.xseclab.com/base7_eb68bd2f0d762faf70c89799b3c1cc52/index.php
04 key又找不到了
分值: 350
小明這次可真找不到key去哪裡了,你能幫他找到key嗎?
http://lab1.xseclab.com/base8_0abd63aa54bef0464289d6a42465f354/index.php
點選超連結跳轉到沒有key的界面抓包
重發後得到提示 根據提示修改url拿到key
05 冒充登陸使用者
分值: 200
小明來到一個網站,還是想要key,但是卻怎麼逗登陸不了,你能幫他登陸嗎?
http://lab1.xseclab.com/base9_ab629d778e3a29540dfd60f2e548a5eb/index.php
這題抓包 把cookie的login改成1發送即可
06 Bugku 網站被黑
http://123.206.87.240:8002/webshell/
先用禦劍掃描背景 發現可以進shell.php
進入後發現需要輸入密碼
然後用burp用預設字典爆破密碼 成功黑入√
實戰中常用 但其實沒技術含量
07 Bugku flag在index裡
http://123.206.87.240:8005/post/
點進去超連結
注意到url位址 http://120.24.86.145:8005/post/index.php?file=show.php
這是一個典型的檔案包含漏洞 file關鍵字是提示
ip+/post/index.php?file=php://filter/read=convert.base64-encode/resource=index.php
然後得到的字元base64解碼即可
下面解釋一下
php://是一種協定名稱
php://filter/是一種通路本地檔案的協定
/read=convert.base64-encode/表示讀取的方式是base64編碼
resource=index.php表示目标檔案為index.php
通過傳遞這個參數可以得到index.php的源碼
原理就是
源碼中有include函數
表示從外部引入php檔案并執行 如果執行不成功 就傳回檔案的源碼
而include的内容是由使用者控制的 是以通過我們傳遞的file參數 include()函數會引入了index.php的base64編碼格式
因為是base64編碼格式 函數看不懂base64亂七八糟的東西
是以執行不成功 傳回源碼
是以我們得到了源碼的base64格式 解碼即可
如果不進行base64編碼傳入 就會直接執行 得不到源碼
08 Bugku 頭等艙
http://123.206.87.240:9009/hd.php
乍一看确實啥也沒有
傳統藝能抓個包 重發 結果發現響應裡有flag(類似的題似乎做過)
水題
09 Bugku 管理者系統
http://123.206.31.85:1003/
這題 抓個包 發現本機ip不讓通路
輸入使用者名為admin
密碼輸入為源碼底部base64解碼的密碼
聯想到攻防世界說可以僞造XFF
我就直接僞造XFF為127.0.0.1 假裝是本地
發包拿到flag
010 Bugku WEB4
http://123.206.87.240:8002/web4/
先檢視源碼
<html>
<title>BKCTF-WEB4</title>
<body>
<div style="display:none;"></div>
<form action="index.php" method="post" >
看看源代碼?<br>
<br>
<script>
var p1 = '%66%75%6e%63%74%69%6f%6e%20%63%68%65%63%6b%53%75%62%6d%69%74%28%29%7b%76%61%72%20%61%3d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%70%61%73%73%77%6f%72%64%22%29%3b%69%66%28%22%75%6e%64%65%66%69%6e%65%64%22%21%3d%74%79%70%65%6f%66%20%61%29%7b%69%66%28%22%36%37%64%37%30%39%62%32%62';
var p2 = '%61%61%36%34%38%63%66%36%65%38%37%61%37%31%31%34%66%31%22%3d%3d%61%2e%76%61%6c%75%65%29%72%65%74%75%72%6e%21%30%3b%61%6c%65%72%74%28%22%45%72%72%6f%72%22%29%3b%61%2e%66%6f%63%75%73%28%29%3b%72%65%74%75%72%6e%21%31%7d%7d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%6c%65%76%65%6c%51%75%65%73%74%22%29%2e%6f%6e%73%75%62%6d%69%74%3d%63%68%65%63%6b%53%75%62%6d%69%74%3b';
eval(unescape(p1) + unescape('%35%34%61%61%32' + p2));
</script>
<input type="input" name="flag" id="flag" />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
我發現 這些都可以hex解碼
仔細觀察後發現
eval(unescape(p1) + unescape('%35%34%61%61%32' + p2));
這暗示字元串拼接 我可以用p1 中間那段 和p2拼接在一起
解碼得到
function checkSubmit()
{var a=document.getElementById("password");if("undefined"!=typeof a)
{if("67d709b2b54aa2aa648cf6e87a7114f1"==a.value)
return!0;alert("Error");a.focus();return!1}}
document.getElementById("levelQuest").onsubmit=checkSubmit;
送出67d709b2b54aa2aa648cf6e87a7114f1拿到flag
011 [HCTF 2018]WarmUp
<?php
highlight_file(__FILE__);
class emmm
{
public static function checkFile(&$page)
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
if (! isset($page) || !is_string($page)) {
echo "you can't see it";
return false;
}
if (in_array($page, $whitelist)) {
return true;
}
$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
$_page = urldecode($page);
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
}
if (! empty($_REQUEST['file'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])
) {
include $_REQUEST['file'];
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
}
?>
代碼審計
發現可以康康hint.php
進去康康發現提示
if (! empty($_REQUEST['file']) //$_REQUEST['file']值非空
&& is_string($_REQUEST['file']) //$_REQUEST['file']值為字元串
&& emmm::checkFile($_REQUEST['file']) //能夠通過checkFile函數校驗
) {
include $_REQUEST['file']; //包含$_REQUEST['file']檔案
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
//列印滑稽表情
}
要滿足三個條件
1.值為非空
2.值為字元串
3.能夠通過checkFile()函數校驗
再來看checkfile函數
public static function checkFile(&$page)//将傳入的參數賦給$page
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];//聲明$whitelist(白名單)數組
if (! isset($page) || !is_string($page)) {//若$page變量不存在或非字元串
echo "you can't see it";//列印"you can't see it"
return false;//傳回false
}
if (in_array($page, $whitelist)) {//若$page變量存在于$whitelist數組中
return true;//傳回true
}
$_page = mb_substr(//該代碼表示截取$page中'?'前部分,若無則截取整個$page
$page,
0,
mb_strpos($page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
$_page = urldecode($page);//url解碼$page
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
第四個if語句中
先進行url解碼再截取
是以我們可以将?經過兩次url編碼
在伺服器端提取參數時解碼一次
checkFile函數中解碼一次
(’?‘兩次編碼值為’%253f’)構造url:
經過各種審計(其實我沒整明白 我隻知道?會被解碼兩次 是以需要編碼兩次 變成%253以繞過判斷 最後通過神奇目錄穿透拿到答案)
source.php?file=source.php%253f…/…/…/…/…/ffffllllaaaagggg
012 [極客大挑戰 2019]Havefun
我以為答案在注釋裡(想多了)
實際上 如果把dog傳值給cat送出上去
會出現另一個答案()
這題 沒啥說的
013 [極客大挑戰 2019]Secret File
開幕雷擊
檢視源碼發現提示 通路了一下那個archive的檔案
點一下
啥也沒有
點一下再抓包
發現了這個
直接通路不行
拿僞協定繞過 base64解碼後 得到flag 并發現他想要女友(啧)
014 [ACTF2020 新生賽]Include
我DNA直接起反應了
當場一套僞協定操作 base64編碼flag檔案丢過去base64解碼拿flag
015 [護網杯 2018]easy_tornado
這題我真的不會
查了也了解了半天
md5線上編碼各種翻車 最後隻好用py腳本跑了一遍
三個檔案分别點開
目的很清晰
我們需要知道cookie那個檔案還有filename 然後進行加密操作
現在filename已經知道了
cookie的話 就要搞模闆注入了
msg={{handler.settings}}
dalao直接這樣做了
這個叫ssti攻擊 老實說我完全不懂 反正可以靠這個辦法拿到cooke那個檔案
加密後
給filehash傳值 檔案名寫flllll那個名字
千萬千萬别在檔案名後加.txt
我就是這樣被卡到吐血
然後操作完就拿到flag了