WEB
0x01 ezweb2
訪問主頁抓包發(fā)現(xiàn)存在cookie值,其中uesr為base64加密解密后發(fā)現(xiàn)值同為user。
將其值修改為admin的base64加密后的值進行訪問,發(fā)現(xiàn)頁面重定向到了admin.php頁面。
通過訪問并抓包發(fā)現(xiàn)可以直接輸入CMD命令
輸入ls發(fā)現(xiàn)返回當前目錄中的文件松邪,但輸入ls /確出現(xiàn)錯誤。
無法使用空格哨查,通過cat<config.php命令查看config.php文件逗抑,發(fā)現(xiàn)該文件將cmd傳入的部分字符都替換成了空。
在linux中空格可以使用$IFS代替空格。利用ls$IFS/查看/目錄下文件發(fā)現(xiàn)flag文件邮府。
通過cat$IFS/ffLAG_404獲得flag荧关。
0x02 easy
<?php
@error_reporting(1);
include ‘flag.php‘;
class baby
{
public $file;
function __toString()
{
if(isset($this->file))
{
$filename = "./{$this->file}";
if (file_get_contents($filename))
{
return file_get_contents($filename);
}
}
}
}
if (isset($_GET[‘data‘]))
{
$data = $_GET[‘data‘];
preg_match(‘/[oc]:\d+:/i‘,$data,$matches);
if(count($matches))
{
die(‘Hacker!‘);
}
else
{
$good = unserialize($data);
echo $good;
}
}
else
{
highlight_file("./index.php");
}
?>
代碼審計的題目:
第一部分,分定義了一個baby的類褂傀,$file可以傳入一個文件名,將該文件讀入一個字符串并返回打印出來忍啤。(其中提示了flag位于flag.php文件中)
第二部分,可以利用get的方式傳入data參數(shù)仙辟,對參數(shù)進行正則匹配同波,符合正則顯示hacker!歉井,不符合正則可以對baby類進行反序列化偷遗。
解題部分:
第一步,對baby類將需要的$file變量參數(shù)flag.php傳入進行序列化酣倾。得到序列化后的字符串O:4:"baby":1:{s:4:"file";s:8:"flag.php";}煎饼。
<?php
@error_reporting(1);
include ‘flag.php‘;
class baby
{
public $file="flag.php";
function __toString()
{
if(isset($this->file))
{
$filename = "./{$this->file}";
if (file_get_contents($filename))
{
return file_get_contents($filename);
}
}
}
$a = new baby();
print_r(serialize($a));
>
第二步讹挎,繞過正則表達式preg_match(‘/[oc]:\d+:/i‘,$data,$matches);正則中寫到不能以大小的O/C字符開頭后面接:再接正整數(shù)。現(xiàn)在我們序列化字符串O:4:"baby":1:{s:4:"file";s:8:"flag.php";}正好符合大寫O開頭后面為:再后面為正整數(shù)4吆玖。
在PHP源碼var_unserializer.c筒溃,對反序列化字符串進行處理,在代碼568行對字符進行判斷沾乘,并調用相應的函數(shù)進行處理怜奖,當字符為'O'時,調用 yy13 函數(shù)翅阵,在 yy13 函數(shù)中歪玲,對‘O‘字符的下一個字符進行判斷,如果是':',則調用 yy17 函數(shù),如果不是則調用 yy3 函數(shù),直接return 0掷匠,結束反序列化滥崩。接著看 yy17 函數(shù)。通過觀察yybm[]數(shù)組可知讹语,第一個if判斷是否為數(shù)字钙皮,如果為數(shù)字則跳轉到 yy20 函數(shù),第二個判斷如果是'+'號則跳轉到 yy19 顽决,在 yy19 中短条,繼續(xù)對 +號 后面的字符進行判斷,如果為數(shù)字則跳轉到 yy20 ,如果不是則跳轉到 yy18 才菠, y18 最終跳轉到 yy3 茸时,退出反序列化流程。由此赋访,在'O:',后面可以增加'+'可都,用來繞過正則判斷缓待。(摘自紅日攻防實驗室http://sec-redclub.com/archives/962/)
通過將序列化的字符串修改為O:+4:"baby":1:{s:4:"file";s:8:"flag.php";},并使用get方式以data作為參數(shù)上傳后得到flag汹粤。
MISC
0x01變換的指紋
0x02 簽到
關注公眾號命斧,發(fā)送flag,回答問題田晚,世界上什么牛不會跑嘱兼,回答蝸牛獲得flag。
0x03學習資料
下載后得到壓縮包5c19f90d2677e贤徒,通過解壓獲得加密壓縮包“只要學不死就往死里學”及“備忘錄”,通過rar打開兩個壓縮包比較發(fā)現(xiàn)兩個壓縮包都包含同一文件備忘錄芹壕,并且他們的CRC32校驗都同為AB42C601。
可以對解壓出來的備忘錄進行重新壓縮接奈,并使用ARCHPR對加密壓縮包“只要學不死就往死里學”進行明文破解踢涌。
4個半小時后,終于解密到第十位獲得密碼1qazmko098序宦。
輸入密碼解壓后得到學習資料睁壁。
通過把修改后綴為zip用rar打開后通過查找到world下的document.xml獲得flag。
0x04 JUJU
題目提示說女朋友問我這11只JUJU哪只好看互捌?(flag中的字符串md5后提交)
下載圖片發(fā)現(xiàn)圖片中只有幾個豬潘明,哪有11只。
通過winhex打開秕噪,通過修改圖片的高度及寬度還原圖片的真實尺寸钳降。修改寬度發(fā)現(xiàn)圖片變花,可以修改高度還原圖片腌巾,最后發(fā)現(xiàn)高度為00000438為真實圖片高度遂填。
還原的圖片獲得字符串MZWGCZ33GQZTQMTEM5SGMMTEPU====
該字符串末尾為=屬于base加密,密文只包括大寫字母及數(shù)字澈蝙,屬于base32加密吓坚,通過解密獲得flag{4382dgdf2d}。
題目提示需要對flag進行md5加密灯荧,加密后得到a213072327f762855e475779eb081ca3