有一说一,一周的比赛真的好长啊2333
WEB题多但是啥也不会233tcl
REVERSE
unctf_babyre2
虽然是个300分的题,但是由于看不出来第二个加密是啥加密,得手撸。。。还是有那么一点麻烦orz
ida打开可以看到,输入除了判断了UNCTF{
和}
,整个输入被-
分成两个部分。
前半部分输入可以直接通过动态调试得到pre_part
的内容,然后把异或后的input的idx弄清楚以后,就得到了。
后半部分应该是一个常用的加密,但是不知道名字,之前某次见到过,然而脚本也没留orz直接把ida代码dump下来,然后修改一下运算逻辑,跑就是了。
1 |
|
奇怪的数组
分析程序发现是个简单的对比题。
char2hex函数将0-9a-f转换为十六进制的值,由两个字节组成一个字节,然后跟checkbox作比较。相等就行。打开checkbox直接抄就行。。。
easyvm
Orz,是麻烦的虚拟机题。。。没啥说的,静态分析就有点麻烦,结合动态调试找到主要逻辑就行。
程序是单字节判断的,(应该可以用pintools来单字节爆破2333),就是先减去自己的序号,然后跟0xCD异或,在跟一个中间量异或,最后中间量跟一个数据表中的数字异或,要求结果为0。实际上中间量就是上一次的数据表。调试拿到数据表以后反写逻辑就行。
1 | a = [0xf4,0x0a,0xf7,0x64,0x99,0x78,0x9e,0x7d, |
unctf_easy_Maze
拖进ida分析发现,这个迷宫在输入路径之前就初始化好了,而且根据v9的长度以及7来看,是个7x7的迷宫。
然后就通过动态调试的到迷宫就行。
然后看图发现应该是左上和右下是两端,试试就行。。。
1 | 1001111 |
Easy_Android
反汇编打开jar文件以后,可以比较明显的看到判断流程。
首先输入的长度为32,然后将输入与flag{this_is_a_fake_flag_ahhhhh}
逐字节异或,然后4个一组计算md5值,与给定的md5进行比较。最开始用的全可打印字符爆破,后边发现只有0123456789abcdef
,换了以后试了一下,飞速出结果orz
1 | #!/usr/bin/python |
666
分析是一个简单的异或,反着运算就行。
1 | enc = 'izwhroz""w"v.K".Ni' |
BabyXor
ida打开发现程序加了壳,在手动脱壳的过程中发现flag跟输入是明文比较的。
继续运行,就能把整个flag得到
PWN
babyheap
很基础的堆题,新建修改查看删除功能都有,主要漏洞就是修改的时候有堆溢出。
在新建堆的时候在堆块上写入了puts函数的地址,然后查看的时候直接调用这个地址。
这样通过修改这个地址为system,堆块内容改为’/bin/sh’就能getshell
1 | #!/usr/bin/python |
babyrop
有一说一,一血两分钟之内也太强了orz
程序有两个判断要绕过,第二个返回地址的绕过可以通过ret的gadget来绕过。
1 | #!/usr/bin/python |
EasyShellcode
一开始还以为跟HackerGame一样的,然后发现要求全字母数字orz。好在找到了Veritas501师傅博客上的一个编码脚本。
1 | #!/usr/bin/python |
EasyStack
这个题泄露Canary的方式有点像查找,不断缩小区间就行,然后就是常规的ROP题了。
1 | #!/usr/bin/python |
Box
这个堆题,不知道是不是出题人有疏忽,因为可以直接通过输入负数的idx,来获取libc addr和修改bss的值,这样就把bss上指针指向free_hook再修改成system就行。。。
1 | #!/usr/bin/python |
Soso_easy_pwn
通过观察栈帧的分布,可以再第一次的输入的时候布置好返回地址,然后再第二次输入的时候输入3来避免对返回地址的修改。
然后功能上有一点bug,就算输出1或者2也没有执行对应的函数。。。这样第二次随便输入就行。。。
1 | #!/usr/bin/python |
MISC
快乐游戏题
题如其名,快乐玩耍就行。
Hidden secret
下载压缩包是三个文件,使用HxD打开查看额,发现0304、0102、0506字节开头,各加上’PK’后连接起来,得到一个压缩包。打开后是一张图片。其中藏着一个压缩包,打开后发现一个txt文件,用base92解码就能得到。
1 | "K<jslc7b5'gBA&]_5MF!h5+E.@IQ&A%EExEzp\\X#9YhiSHV#" |
EasyBox
这个数独稍微有那么一点点坑2333竟然只要行列满足关系就行,只好自己手写深搜解数独。解完就有flag。
1 | #!/usr/bin/python |
信号不好我先挂了
首先是一张图片,丢进Stegsolve,发现是LSB,提取出来后跟原图看起来差不多,Stegsolve查看发现是盲水印,去github里找了个工具,解出来就是flag。
查看红色、绿色、蓝色的0通道,可以发现是LSB。
盲水印
flag
puzzle
题目给了提示png和拼图,那应该就是按照png的格式把数据块连接起来。在网上找了下png的结构,题目还给了图片大小400x400和RGB颜色。直接QQ截图得到一张400x400的图,这样头部就不用怎么改了,但是要改颜色,把06改成02,因为原本不是RGB。
然后就是写脚本连接了,如果顺序是对的就会多一块。一块一块连上就行了。
1 | head = b'\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x01\x90\x00\x00\x01\x90\x08\x02\x00\x00\x00\x00\x00\x00\x00' |
Think
代码中有个check(checknum)
,应该是检测,把checknum换成1,再次运行就行。
亲爱的
题目给了给MP3文件,先用binwalk查看,发现有zip文件,提取出来后,解压需要密码。
使用HxD打开,发现最后有一条信息,去qq音乐(打钱)找到对应时间的评论是“真的上头”,作为解压密码。得到一张图片。
再次使用binwalk,发现还有隐藏的东西,提取出来之后在/word/media
文件夹下找到flag
无限迷宫
这个题真的魔鬼吧。。。
首先去网上找了个走迷宫的python脚本,然后通过把黑线加粗至跟白色区域的宽度,这样就能简单的转换成01矩阵。由于题目给的迷宫还挺方正的,通过对角线就能计算出白色区域的宽度。通过小范围内的颜色来确定起点和终点。然后就是使用linux下的unzip命令来完成解压,再加上网上找的改文件名和删除文件的python代码,最后写个while 循环来调用这个脚本来完成自动化跑迷宫233333
1 | from PIL import Image |
CRYPTO
ECC和AES基础
首先通过解ECC得到AES的密钥。
通过爆破得到ECC的私钥,然后解密得到AES的密钥。
1 | # filename: solver.sage |
然后将结果带到AES解密脚本中
1 | #!/usr/bin/python |
然后按照提示上的POST到指定网站,得到回复,提交即可。
不仅仅是RSA
也是魔鬼吧,两分钟的摩斯电码。。。
然后通过openssl得到n和e,再就是通过最大公因数计算得到q,然后就计算得到p。这样就能解出来了。
1 | #!/usr/bin/python |
一句话加密
在给的图片最后有一个16进制数,通过分解的得到p和q
发现这个跟之前一道题的p、q一样,在Veritas501的博客中找到了相关脚本,将c1、c2分别解一次就行。然后将两次的结果中的一半flag连起来。
1 | import gmpy2 |
WEB
帮赵总征婚
爆破真的快乐.jpg
尝试爆破admin的密码,使用bp爆破
简单的备忘录
在输入框随便输入几个字符,会有提示。。。就按着点。。。
然后慢慢试,就在admin的content里有flag
checkin
是一个nodejs命令注入,可以通过fs模块读取文件。