1.flow
2.oreo
@TOC
b站原本有一个对堆基础讲的挺好的,好像叫pwn术进阶的堆溢出,但刚刚去看已经没了,好家伙,还好我刚看完,哈哈哈。
flow
1 | #!/usr/bin/env python2 |
oreo
1 | giantbranch@ubuntu:~/Desktop/ctfpwn/ctfwiki/2014_hack.lu_oreo$ file oreo |
结构体
1 | 00000000 rifle struc ; (sizeof=0x38, mappedto_5) |
add()
1 | malloc时 name大于27,造成堆溢出,可覆盖next指针 |
show_rifles()
1 | 打印出信息: name description |
order()
1 | delete:rifle_cnt不为零时递归删除,把next所连全删除 |
message()注意0x0804A2A8处为notice指针,输入一些信息fgets到notice指向位置,因此可以考虑将notice改为某got表地址,用message向该got表上写system_addr,从而调用system函数getshell
show_stats()
1 | 输出rifle_cnt order_num *notice |
此题有两种泄露libc的方法
1.show_rifles()
1 | 利用add时的堆溢出,将next指针指向一个函数的got表地址处, |
2.show_stats()
1 | 利用add堆溢出修改fd指针指向0x0804A29c |
脚本
1 | #!/usr/bin/env python2 |
分析程序以及leak部分调试过程
1 | ############## |
-------------本文结束感谢您的阅读-------------