BUUCTF-PWN
记录写BUUCTF的过程
test_your_nc
一道简单的题目,直接nc连接并ls看有哪些文件,最后cat获得flag。(从给的二进制文件也可以看出,程序运行直接执行system(‘/bin/sh’),获取shell)
rip
本题是一道64位的elf,并没有开启什么保护
在IDA中发现存在明显的栈溢出以及后门函数,因此这就是一道简单的栈溢出,通过gets函数溢出修改返回地址到后面函数即可。
exp:
from pwn import* |
warmup_csaw_2016
本题是一道64位的elf,并没有开启什么保护
放入IDA中发现,会输出一个含有system(‘cat flag.txt’)的函数地址,并且在main函数最后会调用gets函数,因此存在明显的栈溢出。
exp:
from pwn import* |
ciscn_2019_n_1
本题是一道64位的题目,只开启了NX保护
通过IDA可以发现,先输入赋值给v1,接着判断v2的值,如果v2=11.28125,则执行system(“cat /flag”)。
因此有两站思路:1、算出v1至v2的距离,将v2的值覆盖为11.28125即可。2、直接理由gets函数进行栈溢出,并将返回地址改为system(“cat /flag”)即可。
方法1:
from pwn import * |
方法2:
from pwn import* |
pwn1_sctf_2016
本题是一位32的题目,且只开启了NX保护
通过在IDA中发现,是一个c++编写的程序,应该是静态编译的,分析程序代码发现,其会将I变为you,会增加两个字节,从而就会造成栈溢出,将返回地址改为后门函数即可。
exp:
from pwn import * |
jarvisoj_level0
简单的64位ret2text,且存在后门函数,直接上exp:
from pwn import* |
[第五空间2019 决赛]PWN5
这是一道32位的题目,开启了Canary保护以及NX保护
在IDA中发现,该程序不存在栈溢出,但已经给出了后门函数,只需要进行判断即可,本题的逻辑为:从/dev/urandom文件中读取一个随机数放到0x804c044地址处的变量中,然后用户输入用户名和密码,如果密码和变量相同则能够提权。
read(fd, &buf_, 4u); |
在这里存在一个格式化字符串漏洞,可以利用这个漏洞使用%n修改buf_的值,因此首先需要找到输入的参数在栈上的偏移量是多少,这里可以用fmtarg这个插件直接找到偏移
通过read(fd, &buf_, 4u)可知长度为4个字节,因此可以用%10$,%11$,%12$,%13$来定位地址,再用%n修改内容就可以了。
exp:
from pwn import* |
jarvisoj_level2
是一道简单的32位的题目
在IDA中发现关键函数,存在栈溢出,本程序给出了system函数以及/bin/sh字符串,但是并没有在一起,因此就将/bin/sh作为参数传入system函数即可。32位是后传参,而64位是先传参。
exp:
from pwn import* |