2019第十二届全国大学生信息安全实践创新赛线上赛Writeup
本文章来自https://www.cnblogs.com/iAmSoScArEd/p/10780242.html 未经允许不得转载!
1.MISC-签到
下载附件后,看到readme.txt打开后提示会有摄像头,一开始丢winhex,ida里啥也没发现,于是就选择直接打开qiandao.exe,当自己出现在镜头里时,会有个绿框,等了很久什么也没发现,于是回到题目是发现三人行必有flag,搜索了一下这个软件的xml文件的文件名,发现是人脸识别,结合想到,于是找了个三人照片,发现flag。

2.Crypto-puzzles
下载附件是一个html,打开后发现flag格式和题目。
a 1、2、3、4直接计算器计算:

得到a1=4006,a2=3053,a3=2503,a4=2560
Part1看了半天,常规找规律等差等比都不是,用二进制将三个已知的表示出来也没发现东西,去查询数字性质


因为前两个有一个未知,直接查后两个,发现都是质数,应该不会那么巧,应该是质数的等差数列,且相差37,于是前推37个质数,得到26365399,然后利用第一个质数查询
发现刚好4个数都是相差37个。

Part2

可以看到有四部分组成,分别求解:

4*lim(x->2) (x^2-3x+2)/(x^2-4)
=4*lim(x->2) (x-1)(x-2)/[(x-2)(x+2)]
=4*lim(x->2) (x-1)/(x+2)
=1

3*∫(0->ln2) e^x.(4+e^x)^2 dx
=3*∫(0->ln2) (4+e^x)^2 d(4+e^x)
=3*(1/3)[(4+e^x)^3]|(0->ln2)
=3*(1/3)( 6^3 - 5^3)
=91

2*∫(1->e) (1+5lnx)/x dx
=2*∫(1->e) (1/x) dx +5∫(1->e) (lnx/x) dx
=2*[lnx]|(1->e)+5∫(1->e)*lnx dlnx
=(1 +(5/2)[(lnx)^2]|(1->e))*2
=7

∫(0->π/2) xsinx dx
=-∫(0->π/2) xdcosx
=-[xcosx]|(0->π/2) +∫(0->π/2) cosx dx
=0 +[sinx]|(0->π/2)
=1
求解出来后相加*77,(91+1+7+1)*77=7700,就是part2
Part3
题目如下:

看到题目,网上找到相关公式如下:


代入

代入数值解方程 得到Part3为18640
Part4

504*2π/3=p*π/120
120*504*2π=3pπ
P=40*504*2
Part4=40320
最后合并

3.Web-JustSoso
下发后第一时间打开F12审查元素

发现提示,然后访问file=index.php 访问hint.php都无法显示内容,然后想到了PHP协议
index.php?file=php://filter/read=convert.base64-encode/resource=./index.php
发现成功读取了源码的base64,

然后接着读hint.php的并分别进行解密,得到index.php

Hint.php

看见Class就知道应该是考察反序列话,发现无法直接new Flag使用,还得把他加到handle中去执行,于是开始构造如下序列,

然后审查index.php发现有个payload会被反序列,而且必须file=hint.php才行直接放到payload一起提交

但是提交上面生成的序列化会被拦截,页面显示stop hacking,被正则检测到了。
后来根据匹配中使用的$_SERVER[‘REQUEST_URI’],通过网上查找相关资料,才知道这个的返回值,但是还是不知道如何绕过,根据这个语句在网上找到某大佬博客写到,可以使用///来进行绕过,于是成功,但是没有返回flag。
这时候发现有个随机数的问题
但是没有想到办法绕过,之前没有遇到过,接着搜索相关,知道可以使用序列化引用,让这两个值相等。

于是构造

返回如下序列化去提交

依旧没有返回flag。。。这时候有些泄气,后来在查php反序列话的时候,突然看到代码中的wakeup,之前一直没注意,但是在那篇文章讲了当序列化字符串中,如果表示对象属性个数的值大于真实的属性个数时就会跳过__wakeup的执行。于是把上图中的payload的handle改成了2,为什么构造的字符串为“%00Handle%00handle”呢?在那个大佬博客中看到序列化时生成的序列化字符串中类名前后本来就会有0×00,url编码下为%00,所以要添加。使用///可以绕过uri的过滤,于是构造
///index.php?file=hint.php&payload=O:6:"Handle":2:{s:14:"%00Handle%00handle";O:4:"Flag":3:{s:4:"file";s:8:"flag.php";s:5:"token";N;s:10:"token_flag";R:4;}}
然后使用上面的payload得到

本文章来自https://www.cnblogs.com/iAmSoScArEd/p/10780242.html 未经允许不得转载!
1.saleae
首先看到题目名saleae,搜索得知是一个逻辑分析工具,下载安装并学习如何使用。然后下载logicdata文件,用saleae打开,发现有4个频道。
根据题目提示,搜索AoiSystem,发现这个网页标题中提到SPI。SPI协议正好使用了芯片上的4个引脚,猜测logicdata文件应该用SPI协议进行分析。

观察波形,发现channel0是具有周期性的方波,应为时钟信号。

channel1没有信号,应为主机输入线。
channel2的波形不具有规律性,应为承载主机输出数据的MISO线。

channel3在channel0和channel2有信号时是低电平,其余时间为高电平,应为使能信号。

使用saleae进行SPI分析。

分析数据处出现flag。

导出数据并用文本编辑器处理,得到flag。
2.24c
依题意,本题同样使用saleae进行分析。搜索题名24c得知是基于IIC协议的EEPROM。

使用saleae进行I2C分析。

得到flag。

导出,得到以下文本:
|
Time [s],Packet ID,Address,Data,Read/Write,ACK/NAK 0.843872000000000,0,'160' (0xA0),' ' (0x20),Write,ACK 0.844038500000000,0,'160' (0xA0),f (0x66),Write,ACK 0.844205000000000,0,'160' (0xA0),1 (0x31),Write,ACK 0.844371000000000,0,'160' (0xA0),6 (0x36),Write,ACK 0.844537500000000,0,'160' (0xA0),3 (0x33),Write,ACK 0.844704000000000,0,'160' (0xA0),b (0x62),Write,ACK 0.844870500000000,0,'160' (0xA0),d (0x64),Write,ACK 0.845036500000000,0,'160' (0xA0),f (0x66),Write,ACK 0.845203000000000,0,'160' (0xA0),4 (0x34),Write,ACK 0.845369500000000,0,'160' (0xA0),e (0x65),Write,ACK 0.845536000000000,0,'160' (0xA0),} (0x7D),Write,ACK 0.845702500000000,0,'160' (0xA0),'0' (0x00),Write,ACK 0.945962500000000,1,'160' (0xA0),'0' (0x00),Write,ACK 0.946318000000000,2,'160' (0xA0),f (0x66),Read,ACK 0.946481500000000,2,'160' (0xA0),l (0x6C),Read,ACK 0.946645000000000,2,'160' (0xA0),a (0x61),Read,ACK 0.946808500000000,2,'160' (0xA0),g (0x67),Read,ACK 0.946972000000000,2,'160' (0xA0),{ (0x7B),Read,ACK 0.947135500000000,2,'160' (0xA0),c (0x63),Read,ACK 0.947299500000000,2,'160' (0xA0),4 (0x34),Read,ACK 0.947463000000000,2,'160' (0xA0),6 (0x36),Read,ACK 0.947626500000000,2,'160' (0xA0),d (0x64),Read,ACK 0.947790000000000,2,'160' (0xA0),9 (0x39),Read,ACK 0.947953500000000,2,'160' (0xA0),e (0x65),Read,ACK 0.948117500000000,2,'160' (0xA0),1 (0x31),Read,ACK 0.948281000000000,2,'160' (0xA0),0 (0x30),Read,ACK 0.948444500000000,2,'160' (0xA0),- (0x2D),Read,ACK 0.948608000000000,2,'160' (0xA0),e (0x65),Read,ACK 0.948771500000000,2,'160' (0xA0),9 (0x39),Read,ACK 0.948935500000000,2,'160' (0xA0),b (0x62),Read,ACK 0.949099000000000,2,'160' (0xA0),5 (0x35),Read,ACK 0.949262500000000,2,'160' (0xA0),- (0x2D),Read,ACK 0.949426000000000,2,'160' (0xA0),4 (0x34),Read,ACK 0.949589500000000,2,'160' (0xA0),d (0x64),Read,ACK 0.949753000000000,2,'160' (0xA0),9 (0x39),Read,ACK 0.949917000000000,2,'160' (0xA0),0 (0x30),Read,ACK 0.950080500000000,2,'160' (0xA0),- (0x2D),Read,ACK 0.950244000000000,2,'160' (0xA0),a (0x61),Read,ACK 0.950407500000000,2,'160' (0xA0),8 (0x38),Read,ACK 0.950571000000000,2,'160' (0xA0),8 (0x38),Read,ACK 0.950734500000000,2,'160' (0xA0),3 (0x33),Read,ACK 0.950898000000000,2,'160' (0xA0),- (0x2D),Read,ACK 0.951061500000000,2,'160' (0xA0),4 (0x34),Read,ACK 0.951225000000000,2,'160' (0xA0),1 (0x31),Read,ACK 0.951388500000000,2,'160' (0xA0),c (0x63),Read,NAK 5.946647000000000,3,'160' (0xA0),\t (0x09),Write,ACK 5.946813500000000,3,'160' (0xA0),a (0x61),Write,ACK 5.946980000000000,3,'160' (0xA0),c (0x63),Write,ACK |
分析可知,通过I2C总线执行了三轮操作:
|
写' 'f163bdf4e} 读flag{c46d9e10-e9b5-4d90-a883-41c 写\t ac |
根据I2C操作的相关知识,读操作读到的内容应为芯片上第160页处原本已有的内容,而写入操作则是在第160页处若干偏移量的位置覆盖写入。第一次写的偏移量显示字符为空格,转为十进制ASCII码即为32,注意到读部分读取到c后为NAK且这部分正好有32个字符,因此第一次写是正好接在读到这部分的后面。于是得到flag{c46d9e10-e9b5-4d90-a883-41cf163bdf4e}。再看第三次写,制表符对应的十进制ASCII码为9,即在字符串下标9处用ac覆盖,得到flag。
本文章来自https://www.cnblogs.com/iAmSoScArEd/p/10780242.html 未经允许不得转载!
3.usbasp
根据题意,这题应该和第一天的《saleae》一样使用saleae软件进行分析,且仍然为AoiSystem设备,仍应用SPI协议分析。
打开logicdata文件后首先观察波形,显然channel3应为使能信号。

注意到题干中有“一键暴打出题人”,猜测MOSI、MISO、时钟、使能4条线可能直接按0、1、2、3顺序即可,按默认设置很符合“一键”的说法。

直接按默认设置运行,未能得到结果。

再读题目,又注意到“升级固件”,猜测协议设置要修改。翻出第一天的saleae.logicdata进行对比,使能信号最可疑。


改它丫的!

运行看到flag。

导出,得到flag。
1.easyGo:
此题拿到手,拖进ida发现是内联编译的,函数名称都没了,遂从程序找入口,运行程序
出现字符串Try again,在ida中搜索,根据交叉引用来到如下图处,大概可以看出输入和输出的地方

尝试点了函数附近的变量,,,,flag竟然以明文在内存中存放,用脚本提取即得到flag

2.Bbvvmm:
比赛一开始就看这道题,杠了整整一天,经验少,走了很多弯路,下面讲思路:
拖入ida,动态调试各个流程跟进弄清函数作用,刚开始没注意提示,盲目的在加密函数里花了大量时间,当看到提示后,立即搜索国密加密算法,找到SM4算法,下载源码,发现和题目的流程一模一样,那就好办了,下图为分析出来的一些函数:
可以看到这个函数把username的ascii拆开再用ascii保存

加密的结果经过base64编码,

解开base64:EF468DBAF985B2509C9E200CF3525AB6
用网上代码解密(密钥就在题目主函数里),然后合成ascii:

得到:6 2 6 1 6 4 7 2 6 5 7 2 3 1 3 2
即badrer12
我以为这就完了,想着password随便输
噩梦才刚刚开始:
另一个条件根据题目名看出和vm相关,对这一块了解不多,只能慢慢分析,分析出刚开是初始化函数的结构,



分析函数跳转过程,尝试分析op对应函数的用途,然后就在挣扎中分析了一下午,难度太大,很绝望。
然后就放弃分析流程,开始打算找规律,将ida栈视图调整为虚拟指令的sp(很容易找),把断点下在call上,初始输入的password为123456
随着程序运行,在栈视图可以跟踪到这几个数的ascii,发现

31->49,32->4B,33->49,34->4F,35->49,36->4B,判断点的值则是对应值相加的结果
规律并不明显,尝试把输入和对应的数字异或,发现其在栈上出现了,而且每个都出现了;
31xor49 = 78, 32xor4B = 79,即找到的对应的数字是有78和31异或得到的,其余同理,为了让判断点的值为0,可输入78,79等,这样和栈中的数异或依然为0,即78,79等代表的字符就为正确密码。即xyz{|}

所有信息都在栈中,可以很容易看出规律
拿到密码本地测试成功,但nc却不行,排除题目原因,只能是疏忽了什么,看了下代码,username是用scanf以%9s读入的,而输入username只有8个字符,估计是第9个字符没读上,遂用pwntools连接,在username后添\x00,成功得到flag

本文章来自https://www.cnblogs.com/iAmSoScArEd/p/10780242.html 未经允许不得转载!
2019第十二届全国大学生信息安全实践创新赛线上赛Writeup的更多相关文章
- 2020第十三届全国大学生信息安全竞赛创新实践能力赛rceme writerup
审计代码 传入参数a,进入parserIfLabel函数 发现参数a的模板,a的格式要匹配pattern,如{if:payload}{end if} 可知ifstr是a中匹配的第一组的值,即paylo ...
- 20190815网络与信息安全领域专项赛线上赛misc WriteUp
目录 签到题 题目内容 使用工具 解题步骤 七代目 题目下载地址 使用工具 解题步骤 亚萨西 题目下载链接 使用工具 解题步骤 24word 题目下载链接 使用工具 解题步骤 感想 几星期前报了名却完 ...
- 【逆向笔记】2017年全国大学生信息安全竞赛 Reverse 填数游戏
2017年全国大学生信息安全竞赛 Reverse 填数游戏 起因是吾爱破解大手发的解题思路,觉得题挺有意思的,就找来学习学习 这是i春秋的下载链接 http://static2.ichunqiu.co ...
- 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 H题 Rock Paper Scissors Lizard Spock.(FFT字符串匹配)
2018 ACM-ICPC 中国大学生程序设计竞赛线上赛:https://www.jisuanke.com/contest/1227 题目链接:https://nanti.jisuanke.com/t ...
- 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 F题 Clever King(最小割)
2018 ACM-ICPC 中国大学生程序设计竞赛线上赛:https://www.jisuanke.com/contest/1227 题目链接:https://nanti.jisuanke.com/t ...
- 2019全国大学生信息安全与对抗技术竞赛全国线下总决赛 Writeup
0x00 Begin 关于 ISCC 2019 北理工总决赛,这一次比赛体验感总体差不多,最后我们战队荣获全国一等奖第一名,在这里非常感谢我的团队以及我的队友. 0x01 Reverse 下载题目:e ...
- 第16届(2019)全国大学生信息安全与对抗技术竞赛全国线下总决赛 Writeup
笔者<Qftm>原文发布<BitHack>:https://bithack.io/forum/469/answer/333 0x00 Begin 关于 ISCC 2019 北理 ...
- 2019全国大学生信息安全竞赛部分Web writeup
JustSoso 0x01 审查元素发现了提示,伪协议拿源码 /index.php?file=php://filter/read=convert.base64-encode/resource=inde ...
- 2019全国大学生信息安全竞赛初赛pwn前四题writeup—栈部分
ret to libc技巧:https://blog.csdn.net/zh_explorer/article/details/80306965 如何leak出libc地址:基地址+函数在libc中的 ...
随机推荐
- qt5.11.2+vs2017环境下配置pcl1.8.1以及第三方依赖库vtk的编译
1.准备工作 我所用的开发环境是win10下的qt5.11.2配置了vs2017的编译器,根据自己所用的VS的版本去官网下载对应版本的pcl库,如下 PCL-1.8.1-AllInOne-msvc20 ...
- 解决RSA加密中,System.Security.Cryptography.CryptographicException: 系统找不到指定的文件
首先说下环境,win2008R2,iis7.5 遇到这个问题,困扰了我一天,在外国的网站上找到答案,还好有点英文基础.最后算是解决了,不过其中的原理还是没有搞的十分清楚. 先说下解决办法, 打开IIS ...
- 【夯实shell基础】shell基础面面观
本文地址 点击关注微信公众号 wenyuqinghuai 分享提纲: 1. shell中的函数 2. shell中的数组 3. shell中的变量 4. shell中的运算符 5. Linux的一些命 ...
- pyspider 初次使用
一 安装 pip install pyspider 请安装PhantomJS:http://phantomjs.org/build.html 二 检验是否启动成功 cmd中输入: pyspider 安 ...
- 简介---linux内核态和用户态
内核态:进程运行在内核空间:管理系统的所有资源,比如读写磁盘文件,分配回收内存,从网络接口读写数据等等 用户态:进程运行在用户空间.比如一些应用程序 内核如何调用硬件资源的:内核空间中的代码控制了硬件 ...
- e2e测试框架之Cypress
谈起web自动化测试,大家首先想到的是Selenium!随着近几年前端技术的发展,出现了不少前端测试框架,这些测试框架大多并不依赖于Selenium,这一点跟后端测试框架有很大不同,如Robot Fr ...
- 关于使用nodejs的mysql查询时碰到的坑
今天在编写登录模块时,碰到一个隐蔽的坑,故记录一番 在使用Node.js的mysql模块的query方法时,查询语句使用了 `select password from login where name ...
- 03-三层交换机的OSPF实验
三层交换机的OSPF实验 1.OSPF介绍 开放式最短路径优先(英语:Open Shortest Path First,缩写为 OSPF)是对链路状态路由协议的一种实现,隶属内部网关协议(IGP),故 ...
- CSS如何把一张横向的长图变成竖向的?
前言: 有时候做项目过程中,设计的是一张横向的长图,但是我们需要在手机端观看的时候,也想把手机横着观看,这样视野更宽阔,如何解决这个问题呢? html <div class="imgB ...
- 核主成分分析方法(KPCA)怎么理解?
先回顾下主成分分析方法.PCA的最大方差推导的结论是,把数据投影到特征向量的方向后,方差具有极大值的.假如先把数据映射到一个新的特征空间,再做PCA会怎样?对于一些数据,方差会更好地保留下来.而核方法 ...