本文章来自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. Python之Scripy框架

    为什么要用到cmd界面 --- 在这里操作的是Scripy框架的指令,不是Python代码 Parse --- Scripy的回调函数 fiddler --- 用于爬取JS存储数据的页面 项目: 1. ...

  2. python不能调试的原因

    最近有一个python项目,打开项目不能登录,想调试一下看看为什么,发现不能调试了,郁闷了,搞了半天,发现是进程里有多个python.exe,结束掉就好了.

  3. JVM内存结构简单认知

    关于JVM的面试传送门:https://blog.csdn.net/shengmingqijiquan/article/details/77508471 JVM内存结构主要划分为:堆,jvm栈,本地方 ...

  4. Codeforces #541 (Div2) - E. String Multiplication(动态规划)

    Problem   Codeforces #541 (Div2) - E. String Multiplication Time Limit: 2000 mSec Problem Descriptio ...

  5. rank() partition by 排名次

    rank()排名 partition by分组与group by相比各有优势,在这里就省略100字.... 以下为案例: create table student -- 学生表(sid integer ...

  6. Java第二次作业程序设计作业

    本次作业包含两个部分:一是以下4个题目的程序源码和运行结果截图:二是本次作业的小结(谈谈你在做作业的过程中遇到了哪些问题,如何解决,有哪些收获). 1.编写"人"类及其测试类. 1 ...

  7. Python-异常处理-66

    异常和错误 # 1/0 # name # 2+'3' # [][3] #{}['k'] try: ') # 1/0 ') # name # 2+'3' # [][3] # {}['k'] ret = ...

  8. iOS 关于监听手机截图,UIView生成UIImage, UIImage裁剪与压缩的总结

    一.  关于监听手机截图 1. 背景: 发现商品的售价页总是被人转发截图,为了方便用户添加截图分享的小功能 首先要注册用户截屏操作的通知 - (void)viewDidLoad { [super vi ...

  9. mysql 新建用户并赋予远程访问权限

    不多说直接上代码 [root@demo /]# mysql -u root -p #登录服务器数据库 Enter password:123xxx #1.创建一个新用户 testuser 密码为 tes ...

  10. 宝塔控制面板创建ftp后链接不上的解决方法

    很多的新手在安装宝塔面板并且创建完ftp管理后链接ftp居然链接不上?有许多朋友都不知道本站q302博客也是基于宝塔控制面板管理的,本站在安装网站完成后也和你们一样ftp链接不上,后面经过多次测试之后 ...