本文章来自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的更多相关文章

  1. 2020第十三届全国大学生信息安全竞赛创新实践能力赛rceme writerup

    审计代码 传入参数a,进入parserIfLabel函数 发现参数a的模板,a的格式要匹配pattern,如{if:payload}{end if} 可知ifstr是a中匹配的第一组的值,即paylo ...

  2. 20190815网络与信息安全领域专项赛线上赛misc WriteUp

    目录 签到题 题目内容 使用工具 解题步骤 七代目 题目下载地址 使用工具 解题步骤 亚萨西 题目下载链接 使用工具 解题步骤 24word 题目下载链接 使用工具 解题步骤 感想 几星期前报了名却完 ...

  3. 【逆向笔记】2017年全国大学生信息安全竞赛 Reverse 填数游戏

    2017年全国大学生信息安全竞赛 Reverse 填数游戏 起因是吾爱破解大手发的解题思路,觉得题挺有意思的,就找来学习学习 这是i春秋的下载链接 http://static2.ichunqiu.co ...

  4. 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 H题 Rock Paper Scissors Lizard Spock.(FFT字符串匹配)

    2018 ACM-ICPC 中国大学生程序设计竞赛线上赛:https://www.jisuanke.com/contest/1227 题目链接:https://nanti.jisuanke.com/t ...

  5. 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 F题 Clever King(最小割)

    2018 ACM-ICPC 中国大学生程序设计竞赛线上赛:https://www.jisuanke.com/contest/1227 题目链接:https://nanti.jisuanke.com/t ...

  6. 2019全国大学生信息安全与对抗技术竞赛全国线下总决赛 Writeup

    0x00 Begin 关于 ISCC 2019 北理工总决赛,这一次比赛体验感总体差不多,最后我们战队荣获全国一等奖第一名,在这里非常感谢我的团队以及我的队友. 0x01 Reverse 下载题目:e ...

  7. 第16届(2019)全国大学生信息安全与对抗技术竞赛全国线下总决赛 Writeup

    笔者<Qftm>原文发布<BitHack>:https://bithack.io/forum/469/answer/333 0x00 Begin 关于 ISCC 2019 北理 ...

  8. 2019全国大学生信息安全竞赛部分Web writeup

    JustSoso 0x01 审查元素发现了提示,伪协议拿源码 /index.php?file=php://filter/read=convert.base64-encode/resource=inde ...

  9. 2019全国大学生信息安全竞赛初赛pwn前四题writeup—栈部分

    ret to libc技巧:https://blog.csdn.net/zh_explorer/article/details/80306965 如何leak出libc地址:基地址+函数在libc中的 ...

随机推荐

  1. com.netflix.zuul.exception.ZuulException: Hystrix Readed time out

    通过API网关路由来访问用户服务,zuul默认路由规则 :http://zuul的Host地址:zuul端口/要调用的服务名/服务方法地址 浏览器中打开http://127.0.0.1:8000/wa ...

  2. linux的常用命令介绍

    1.ls  列出当前目录下的所有的文件和文件夹的名称. 参数如下:-a 显示隐藏文件 -l 显示方式为列表 -h 以可读性高的方式输出 eg: ls -lh /logs/tran  目录如果不指定(相 ...

  3. 【心得】Lattice和Xilinx工具关键特性对比(Diamond、ISE)

    [博客导航] [导航]FPGA相关 背景 由于项目需要,初次接触Diamond,发现跟之前的ISE有很多不同,记录下一些体会,供参考.按开发流程,将一些常用的特性进行对比,列举如下: IP Core管 ...

  4. ThreadLocal源码解读

    1. 背景 ThreadLocal源码解读,网上面早已经泛滥了,大多比较浅,甚至有的连基本原理都说的很有问题,包括百度搜索出来的第一篇高访问量博文,说ThreadLocal内部有个map,键为线程对象 ...

  5. DotNetCore 3.0 助力 WPF 开发

    DotNetCore Is AnyWhere. 前言 Visual Studio 2019 已经正式发布了,DotNetCore 3.0 的正式版也指日可待.在之前的版本中,作为一名基于微软生态的传统 ...

  6. 分享收集的WebGL 3D学习资源

    大家好,我在本文中分享了我收集的WebGL 3D相关的博客.书籍.教程.demo等内容,希望对大家学习WebGL和3D有所帮助,谢谢- 相关博客 Wonder技术 Wonder是我们的产品,包含Web ...

  7. facebook marketing(市场营销) API(3)

    如果你只想管理广告,而不想管理BM,那就需要市场营销API了. 相关文章 通过BM api管理完相互授权后,就可以让自己的运营参与进行投放了(市场营销API也支持非BM操作,即广告主自己操作). 市场 ...

  8. Spring Boot与分布式

    ---恢复内容开始--- 分布式.Dubbo/Zookeeper.Spring Boot/Cloud 一.分布式应用 在分布式系统中,国内常用zookeeper+dubbo组合, 而Spring Bo ...

  9. MySql插入点数据

    DROP PROCEDURE IF EXISTS pre;delimiter $$ CREATE PROCEDURE pre ()BEGIN DECLARE i INT DEFAULT 1 ;WHIL ...

  10. JavaScript的数据结构和算法

    所有JavaScript对象都有hasOwnProperty(value)的方法,用来返回一个表明对象是不是具有这个value Key值属性的布尔值. javaScript的方法 具有delete的方 ...