本文章来自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. Linux新手随手笔记1.1

    ifconfig   查询网卡信息 分别是网卡名称,物理IP地址,MAC地址,RX收到数据包大小,TX发送数据包大小 # uname # uname -a 查看内核版本号 # hostname 查看主 ...

  2. [LeetCode] 22. 括号生成

    题目链接:https://leetcode-cn.com/problems/generate-parentheses/ 题目描述: 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能 ...

  3. 使用try-with-resources优雅的关闭IO流

    Java类库中包括许多必须通过调用close方法来手工关闭的资源.例如InputStream.OutputStream和java.sql.Connection.客户端经常会忽略资源的关闭,造成严重的性 ...

  4. Linux SHELL中sh和bash的区别

    什么是SHELL? shell的中文意思就是贝壳,其实比较类似于我们内核的壳.简而言之就是只要能够操作应用程序的接口都能够称为SHELL.狭义的shell指的是命令行方面的软件,广义的SHELL则包括 ...

  5. springboot 与任务

    异步任务.定时任务.邮件任务 一.异步任务 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在 处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用 多线程来 ...

  6. 菜鸟学IT之python3关于列表,元组,字典,集合浅认识!

    作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2753 一.列表,元组,字典,集合分别如何增删改查及遍历. 列表 # 列表的 ...

  7. pm2 常用命令解析

    https://blog.csdn.net/chengxuyuanyonghu/article/details/74910875 (以上基本命令解析,一下补充) pm2 ecosystem  #在当前 ...

  8. JS confirm或alert对话框中的换行

    如题. alert.confirm对话框的换行可以使用回车符或换行符:\n,\r 也可以使用回车符或换行符对应的unicode编码:\u000a,\u000d,这是等效的. //确认信息 var co ...

  9. 《转载》最新鲜最详细的Android SDK下载安装及配置教程

    Android开发环境搭建可以分: 第一步.安装JDK: 第二步.安装Eclipse: 第三步.下载并安装AndroidSDK:   下面详细介绍. 第一步.安装JDK Android开发工具要求必须 ...

  10. nodejs搭建web服务器

    一.代码结构 //1.引入相关模块 var http=require("http") var url=require("url") var fs=require ...