虽然之前听说学校里的这个新人赛性质的ctf比赛,但是从来没参加过
今年xiaoyuyu提交了vidar的报名表,要在比赛中好好学习
在此写下week1的WP,写得不好别说我哈
Re
brainfxxker
拿来了学会了就是自己的,我百度了一下brainfuck,第一页就有关于brainfuck c++代码的一些解析,美滋滋
1 | O爷爷给的hint,说[+.]是关键 |
以此类推
HelloRe
直接ida搜索字符串
わかります
O爷爷的题目一开始不敢做,结果来了个wakalimasu……
主题就是一个check,如下
跟进
从下往上捋一遍
dword_602120,dword_6021c0是最终数据
sub_400892操作是一个二维数组赋值,直接当一维也行
另一个函数是三维的,666,当一维的也行,一个是乘法运算(怀疑矩阵乘法),一个是加法运算,当然这只是初步的思考
举证乘法如下(来自百度):
接下来我把三组数据全部在ida里用shift+e分离出来,发现三组数据长度相同,然后刚开头的>>4,和&0xf,算是对一个char单位的高四位和低四位的分离操作,然后对高四位和低四位分别做乘除运算
这里强烈推荐matlab,求矩阵乘除法的神器,也多亏了别人的推荐,还好信号与系统这门课要装matlab
脚本:
1 | x = [0x7A, 0xCF, 0x8C, 0x95, 0x8E, 0xA8, 0x5F, 0xC9, 0x7A, 0x91, |
r & xor
这题我被秀傻了,写脚本怎么看都奇怪,后来直接去gdb里面找判断语句,Gdb直接打断点,surprise!!!
然后错了……假flag……
目测ida里的数据的顺序是错的,或者有缺漏的可能性也很高
直接去gdb里面找
把数据拉出来跑一下就好
脚本如下
1 | s=[0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0,0x07,0x00,0x5c,0x12,0x26,0x0b, |
Pro的Python教室(一)
直接写脚本,异或运算,或者在线b64decode一下就好
Pwn
babysc
难点其实是不能f5,虽然直接看汇编大概可以看出来
把call rdx nop掉就可以f5了
就是把shellcode在运行前要进行xor(i+1)的操作
1 | #coding=utf8 |
aaaaaaaaaa
输入一大堆a就好了,偏移量大概就是(0x40-0x10),有点忘记了……
偏移量可以直接从ida里面看出来
exp:
1 | #coding=utf8 |
薯片拯救世界1
先a一下字符串翻译一下
a完之后,string里可以找到如下
Emmmmm……(看都不看,就觉得是aris出的题)
靠flag定位,如下
目的应该是读取这个flag文件,大概流程如下
但是感觉true不true也对读取flag关系,我们输入正确的flag就会true,这题不是提权,s1是我们fread flag中用于接收数据的内存地址
Canary开启了,要溢出的话要绕过了,或者说泄露canary,然后利用,有while的话利用泄露出来的canary不是不可能的
本地测试的时候要建一个flag.txt,不然程序运行不起来
感觉像是fork,试试看爆破canary,然后爆破失败,问出题人是不是这个思路,aris说第一周出这个他是魔鬼么?(虽然我觉得是,orz)
换思路换思路
现在想的是,有个while,不断往buf可以填入0x18字节,迟早会溢出的,很棒,算一下可利用空间,0x18+0x18-0x24=12,应该是够改eip了,试试看,gg read读的地址都是buf,会刷新,这可咋整啊
师傅给的hint最终是让我们爆破flag,秒懂
但是过程中遇到了一切困难,我nc过去输入一个h都是错的,然后我gdb调试发现,输入hgame,字符串长度竟然是13,而且只要答对一次,程序就结束了,理论上exp要跑很多遍才行,当然啦主要是我写的exp垃圾,不然一次就好
exp:
1 | #coding=utf8 |
坑特别的多,都是细节坑,感觉自己能踩得都踩了,学到了好多,要是不清楚的话,可以sl一下
Steins;Gate
这题canary和NX还是全部开启了,先分析一下这程序要干嘛
main函数里面结构是由一个函数套一个函数来运作的,不是很理解,运行一下看看
看见了我们函数400A91中的字符串,再结合一下别的函数,大概知道就是人类的本质是复读机的故事………………
最开头的那个AF1函数看不出个所以然,感觉就是弄个随机数的种子出来,有一点要注意到,read函数读取的地址在bss字段上,万一之后用的上呢,如下
然后看看函数8F6,如下
有溢出空间哦,但是有canary,不能跳转的情况下,而且我们只有两次利用这个溢出的机会,应该不会是爆破canary
继续看下一个函数958,有格式化字符串漏洞,nice,可以试着泄露canary了
继续看下一个函数A00,发现还是有格式化字符串漏洞,如下
这里很贴心的可以read五个字节,感觉很贴心的可以leak canary
最后再看看程序本身有什么可以利用的,我们发现了程序里有system函数,然后还想到了,我们的ID可以取为/bin/sh,直接写入bss字段方便以后用
这题目有挺多条件要绕过的,第一个就是v2,这个直接靠溢出就可以做:padding+p64(0x2333)
第二个要绕过的是v4-4660!=v0,这里有毒,刚开始已经说了v0=v4了,所以我们要靠格式化字符串漏洞泄露出v0或者v4,然后把v4同样覆盖成我们需要的,我们可以看到v0的偏移量,如下
在gdb里下断点看一下,我是在运行前记住了eax的值,然后运行后找这值去哪里了,找到了,就确定v0的偏移量:2+6-1=7
等绕过了这一段,我们再看一下如下,还需要一个0x6666
我们这里没有足够的空间覆盖,但在上一个函数可以提前覆盖好
老样子利用格式化字符串漏洞泄露出canary,然后之后最后一个函数有一个栈溢出,可以用函数中的system函数,以及我们之前准备的/bin/sh了,这里要注意一下64位与32位程序在linux环境下的传参顺序,rdi/rsi/rdx,如果bin的培训作业做了的话应该就了解了呢
rdi的地址我们可以通过RoPgadget泄露,如下
exp:
1 | #coding=utf8 |
Web(从0学起)
谁吃了我的flag
最后加上.index.html.swp,应该是vim编辑器备份文件,会得到一个txt,里面就有flag
换头大作战
这题是我第一次用burp,疯狂换东西
刚开始是问你要不要flag,说post会好一下
先改request method 然后在给input 段发一点东西 name是want
提示说only localhost can get flag,这里学到了一个操作叫x-forwarded-for,可以改来源ip
然后接下来需要改user_agent
网上找到了[Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:24.0) Gecko/20100101 Firefox/24.0 Waterfox/24.0](https://udger.com/resources/online-parser?Fuas=Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:24.0) Gecko/20100101 Firefox/24.0 Waterfox/24.0)
但是版本不是50.0,改一下就好
还需要改referer网站来源,改成b站
改完之后会说you are not admin,这是最后一次了
very easy web
题目介绍是代码审计初体验,源码如下
那我们构造一下id就好,本来是直接在后面加上?id=vidar,但并不可以,因为url会被url decode一次,然后源码内还有一次url decode,所以要将vidar进行两次url encode
?id=%25%37%36%25%36%39%25%36%34%25%36%31%25%37%32
can u find me?
先按照题目提示f12一下,找到f12.php
需要密码,我们burp拦截一下试试
可以看见我们要的密码,修该一下发送method,再添加password再发送一次
出现了click me to get flag的字眼,点击的时候还是需要burp,不然会说aoh,your speed is sososo fast,the flag must have been left in somewhere,答案如下
Misc
Hidden Image in LSB
用Stegsolve打开,观察各通道,有一个通道里就有答案哦
打字机
用眼睛看就完事了,感觉就是键盘码,有很多重复的字符,开头肯定是hgame,后面_这个字符键盘对应位置上没有的,所以就是_,最后那个单词,题目是打字机,眼拔flag,typewriter(正好英语黄皮书第三篇晨读后面有这个单词,看到就猜到了),但后把重复的字符改过来就好,注意大小写,和键盘长得一样的是大写,不然就是小写
Broken Chest
Zip的文件头被修改了,用Hex Editor改过来打开就OK,然后需要密码,目测加密位不是伪加密,用binwalk分解,可以看到有comment,comment的内容就是密码
Try
我先去百度了一下这文件格式是什么,然后发现貌似是流量分析,在wireshark里常有了一波后,发现了png和zip,后来我选择了zip分析一下,zip可以直接提取放进Hex Editor中分析
打开zip,发现有个password文件,打开,里面写着hgame********
flag应该就是压缩包的密码,有一种爆破的冲动,我先用mask掩码攻击爆破(hgame{??????}),工具采用azpr,跑出来结果是hgame25839421
打开之后有一张图片,应该就是图片隐写,binwalk一下,发现图片里有压缩包需要密码和一个1.docx,压缩包里还有一个1.docx,怀疑是明文攻击,伪加密也有可能
看了头部知道是伪加密(加密位是00,不是09),改最底下的加密标志位,成功打开,打开docx,还是空白的,rlgl
那最后一招了……百度了一下word隐写,谁百度谁知道
Crypto
Mix
这题初看题目,可以发现是摩斯密码,如果不清楚,百度一下类似的密文也可以知道的
解密之后可以看见{},但是不在我们需要的位置上,毕竟flag的格式我们是知道的,移位操作我们可以用栅栏解密
之后还是没有hgame,我们可以考虑用凯撒来解密
解密后有可能flag不对,因为用在线解密的时候,会自动大写转小写的,要改回去哦
Base全家
这题你真的让我还原一遍,难度是有点高,我是一个个眼睛边看边解迷的,快20轮了吧233
提几个要点吧,最后一轮是base58,在这题之前我还不知道有这个base方法,后来实在解不出了,百度后才知道的
然后如果直接复制黏贴的话比较硬核,可以选择用保存伪文件后,处理文件的方式来解决比较方便
本文链接: http://woaixiaoyuyu.github.io/2019/01/30/hgame2019-week1-wp/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!