HGAME-2018
2018-03-21 13:25
141 查看
week1
【pwn】
0x1 guess_number下载二进制文件,扔到IDA中,F5反汇编一下:
可以看出,这里用了一个sacnf函数,明显存在一个溢出漏洞,那么这道题的关键就是去覆盖a1这个变量,让输入变量nptr==a1,这样就可以得到flag再去看看栈空间的变量位置分布,
可知,覆盖满0x10c大小的nptr后还需要再覆盖0x08大小的空间才能达到a1变量的空间因此覆盖量为0x10c+0x08,因此可得出shellcode:
然后就搞出flag了。。。。额。。时间过了,提交了也没分-_-!0x02 flag_server
按照老套路,扔到IDA里面去看看
通过看代码可以发现,首先是输入一个十进制的整数变量v5,并且整个整数不能大于63并且不能等于0,否则会进行重新输入,接着读取v5个字符串到s1变量里面去,然后在判断读进去的s1字符串是不是等于“admin”,如果是,那么搞出一个随机数v7,然后让你在输入一个v6变量去猜随机数v7,如果猜对了,那么就能使变量v9=1,从而得到flag通过上面的分析,我们基本上有两条路子去解决问题,第一,去猜随机数,猜对了就能拿到flag,如果是伪随机数,是可以猜出来的,但是有init函数,随机数是由/dev/urandom提供,那么就没办法去猜了
因此只能采用第二种方法,就是去通过溢出来去覆盖关键的变量,纵观整道题,最关键的变量实际上就是v9,只要让它不为0,那么就能执行cat flag命令,于是去找v9在栈中的位置
于是去找找溢出点,通过提示中的“负数溢出”,可以试试将-1赋值给v5,从而满足了小于等于63并且不为零的条件,通过 read_n函数,读取足够多的字符串s1的栈空间中,一直覆盖到v9的栈空间,就可以使得v9不为零,从而拿到flag于是我们找到s1在栈中的位置
可以算出,从s1覆盖到v9,需要0x50-0x10=0x40长度的字符串,也就是64个字符串于是shellcode就是这样的(懒得写脚本了,就直接瞎打):
相关文章推荐
- hgame-2018 CTFwp(杭电信安)week1
- hgame-2018 CTFwp(杭电信安)week2
- hgame-2018 CTFwp(杭电信安)week3
- K的倍数----2018美团校招内推
- 人脸识别(四):2018 ArcFace: Additive Angular Margin Loss for Deep Face Recognition
- 这里有一份完整版2018抖音研究报告!请查收
- 2017-2018-2 《网络对抗技术》 20155302 第二周 Exp1 PC平台逆向破解(5)M
- 网易2018校招内推--整数数列
- 2018百度关键词排名优化实用方法
- 华为2018校招
- phpstudy2018 访问路径服务权限问题
- 【京东2018秋招前端工程师】编程题-表格操作
- ZOJ Monthly, March 2018 H、Happy Sequence
- (网易2018校招笔试)[编程题] 魔法币
- 20165231 2017-2018-2 《Java程序设计》第2周学习总结
- xor - 滴滴出行2018校园招聘网申笔试-研发工程师
- VK Cup 2018 Round 1: C. Perfect Security(01字典树)
- 20lanmo162326 2017-2018-1 《程序设计与数据结构》第1周学习总结
- 直播实录 | 非自回归神经机器翻译 + ICLR 2018 论文解读
- 网易2018web前端开发编程题2