CTF-PWN
文章平均质量分 54
燕麦葡萄干
这个作者很懒,什么都没留下…
展开
-
【BUUCTF-PWN】13-jarvisoj_level2_x64
ret指令的地址,再接着是’/bin/sh’字符串的地址,最后是system()函数的地址。ret处,该指令会将当前栈顶的元素(‘/bin/sh’字符串的地址)出栈并存入rdi中,并返回到下一条指令处。此时栈中就只有system()函数的地址了,所以下一条指令正是system(),而它需要的参数正好就在rdi寄存器中,这样就执行了system(’/bin/sh’)现在只需要让函数返回到system,并传入参数“/bin/sh”就可以了。32位的比较简单,只需要返回地址+下一次的返回地址+参数1+参数2+…原创 2024-07-05 00:58:41 · 486 阅读 · 0 评论 -
【BUUCTF-PWN】12-get_started_3dsctf_2016
垃圾数据–>mprotect函数地址–>三个连续的pop地址–>.got.plt表起始地址–>内存长度–>内存权限–>read函数–>三个连续的pop地址–>read函数的三个参数–> .got.plt表的起始位置。其中gets()函数存在栈溢出,溢出距离为0x38,这里是使用的esp寻址,属于外平栈,不需要覆盖ebp的四个字节。第二种是直接在IDA中查找,crtl+s调出程序的段表,这里还不太清楚怎么去选择可用的程序段,看很多博客都是直接用的.got.plt的起始位置。原创 2024-07-05 00:40:26 · 1182 阅读 · 0 评论 -
【BUUCTF-PWN】11-ciscn_2019_c_1
再利用pop_rdi;ret语句进行将下一层值推入寄存器rdi中作为参数,本次payload构建目的在于利用puts函数泄露本身的真实地址,从而获取Libc基址,所以将puts_got作为参数,运行函数地址为puts_plt,即用puts来打印出Puts_got的地址,最后再返回start函数重新运行,在后续中再次利用libc的基址找出system以及“bin/sh”的地址,从而构建第二次payload,要注意的是由于靶机是Ubuntu,所以要构建栈平衡,第二次payload需要加入ret。原创 2024-07-05 00:28:02 · 914 阅读 · 0 评论 -
【BUUCTF-PWN】10-bjdctf_2020_babystack
因为读入的字符长度可以由用户输入的第一个参数值决定,因此read函数存在栈溢出。这里做不做堆栈平衡都可以,试了一下加不加1都可以打通。简单的栈溢出,ret2text。后门函数地址0x4006E6。64位,开启了NX保护。覆盖距离为0x10+8。原创 2024-07-05 00:20:44 · 149 阅读 · 0 评论 -
【BUUCTF-PWN】9-ciscn_2019_n_8
4 + p32(17) #qword/IDA在32位里面是4个字节,在64位是/8个字节。不属于栈溢出,应该是比较简单的pwn,看懂代码逻辑+使用pwntools。32位,开启了Stack、NX、PIE保护。即当var数组的第十四个元素是17就可以。原创 2024-07-05 00:19:02 · 349 阅读 · 0 评论 -
【BUUCTF-PWN】8-jarvisoj_level2
32位的分布是:返回地址+下一次的返回地址+参数1+参数2+…这里没有可以直接利用的后门函数,所以需要构造 system(/bin/sh)去执行。system的地址还不是0x0804A038,而是0x08048320。查看vulnerable_function()函数。需要找不是extern的system函数。/bin/sh的地址0x0804A024。read()函数存在缓冲区溢出漏洞。32位,开启了NX保护。原创 2024-07-05 00:16:38 · 312 阅读 · 0 评论 -
【BUUCTF-PWN】7-[第五空间2019 决赛]PWN5
因此将正常的printf语句转为无参数的printf,即将参数放到格式化字符串前面构造payload,从而利用%n将前面的字符数写入到指定地址中,passwd的每个字节即写入地址中的值是p32(0x804c047)+p32(0x804c046)+p32(0x804c045)+p32(0x804c044)的长度,也就是4x4=16,二进制为0x10,所以passwd就是4个0x10拼接起来后的计算结果str(0x10101010)=269488144。32位小端排序,有栈溢出保护。存在格式化字符串漏洞。原创 2024-07-05 00:13:46 · 550 阅读 · 0 评论 -
【BUUCTF-PWN】6-jarvisoj_level0
buf变量长度为128,但是read可以读入0x200长度的字符,存在栈溢出,需要覆盖的长度为0x80+8。vulnerable_function()函数。64位,开启了NX保护。原创 2024-07-05 00:08:58 · 238 阅读 · 0 评论 -
【BUUCTF-PWN】5-pwn1_sctf_2016
变量s在栈中的位置位0x3c,想要溢出到Rbp需要60+4(因为是32位)=64。fgets()函数只允许输入32位长度,但是I可以变为you,因此可以输入20个I加三个a。这里中间处理的代码还看不太懂,只能看到you、i还有replace字符替换函数。试着运行效果如下,可知代码会把输入的I替换为you。找一下后门函数,函数的位置是0x8048F0D。strcpy()函数存在缓冲区溢出。32位,开启了NX保护。原创 2024-07-04 23:59:54 · 193 阅读 · 0 评论 -
【BUUCTF-PWN】4-ciscn_2019_n_1
这里为了堆栈平衡+1反而没办法打通,不+1反而可以成功,因此后面做题的时候加不加1都试一下。需要v1变量溢出到v2,然后给v2 11.28125的值。查看变量在栈中的位置:v1 0x30 v2 0x04。11.28125的十六进制值是0x41348000。checksec检查是64位,开启了NX保护。这里再试验第二种思路,溢出到变量2。后门函数的地址是0x4006BE。原创 2024-07-04 23:57:36 · 408 阅读 · 0 评论 -
【BUUCTF-PWN】3-warmup_csaw_2016
checksec检查是64位,未开启任何保护。直接字符串查找system或者flag。后门函数的地址是0x40060D。gets()函数存在栈溢出。原创 2024-07-04 23:51:12 · 215 阅读 · 0 评论 -
【BUUCTF-PWN】2-rip
64位rbp是8位,32位rbp是4位,堆栈平衡需要在后门函数地址+1。查看main函数,gets()存在栈溢出。64位,未开启任何保护。定位到后门函数的地址。原创 2024-07-04 23:47:50 · 157 阅读 · 0 评论