PWN学习总结(不断完善中)(有道云笔记)

61 篇文章 1 订阅
1 篇文章 0 订阅

学习路线

pwn的核心还是操作系统的知识,建议去看CSAPP(深入理解计算机系统)这本书
下载链接
–百度网盘:提取码erpp
CSAPP课程视频
pwn一些概念理解
王爽汇编学习笔记
DOS-BOX及编译工具–百度网盘 提取码: ajba
linux知识学习(CTF主要考察linux环境下的漏洞利用)—菜鸟教程
nala包管理命令(个人感觉比apt好用)
python知识学习(写exp用)----菜鸟教程
gcc编译过程(了解一下)
vim用法(好难,正在学)
pacvim游戏
ctf-wiki-pwn漏洞利用总结图
刷题网站
BUUCTF
BUUCTF—libc源码
攻防世界

pwn环境搭建

借用另一个博主的pwn环境配置文章
再加上几个工具
patchelf修改不同libc下的程序加载
pwngdb(配合pwndbg使用)
glibc-all-in-one获取不同版本libc
一些工具简单用法(不断补充中)

做题基本流程

首先查保护(checksec 文件名)

linux保护机制

看链接类型(file 文件名)

动态链接简述
动态链接下的plt表与got表

赋予程序可执行权限(chmod +x 文件名)

linux文件属性

试运行(./文件名)

ida看伪代码

ida下载链接(有各种版本,最新为ida pro7.5)
提取码: nus4

理清程序执行流程
观察伪代码中的一些函数
注意一些常见(或危险)函数

写exp时注意64位与32位传参的区别
64位与32位传参的区别

注意点

1.一般libc函数或者栈什么的都在虚拟地址的最高的那块地方,注意泄露libc基地址时
32位程序一般函数真实地址以0xf7开头
64位程序一般函数真实地址以0x7f开头
2.linux里面命令可以用;或&分隔,
pwn的exp模板
3.程序关闭了标准输出和错误输入,
我们可以执行exec 1>&0将标准输出重定向到标准输入
4.有时候泄露处libc,system函数执行不成功,可考虑用execve(“/bin/sh”, rsp+0x30, environ)
泄露libc后,下载该libc,用one_gadget寻找该函数
5.泄露canary,canary最后一字节为\x00,可以通过覆盖canary最后一字节为其他值泄露canary
6.堆题泄露libc地址的思路,当只有一个unsorted bin时,该chunk的fd和bk均指向main_arena+0x58,而同一个libc中main_arena的偏移是固定的,因此可以计算获得libc地址
在这里插入图片描述
7.glibc 2.32之后版本,对fastbin 和 tcache bin 的fd指针进行了异或加密
当前chunk的fd指针 = (当前fd所在地址>>12) ^ fd所指向的上一个chunk的fd指针

tcachebins
0x20 [  2]: 0x560597a7c8f0 —▸ 0x560597a7c8d0 ◂— 0x0

pwndbg> x/4gx 0x560597a7c8d0 - 0x10
0x560597a7c8c0: 0x0000000000000400      0x0000000000000020
0x560597a7c8d0: 0x0000000560597a7c      0x0000560597a7c010

>>> print(hex(0x560597a7c^0))
0x560597a7c

pwndbg> x/4gx 0x560597a7c8f0 - 0x10
0x560597a7c8e0: 0x0000000000000000      0x0000000000000021
0x560597a7c8f0: 0x00005600f7feb2ac      0x0000560597a7c010

>>> print(hex(0x560597a7c^0x560597a7c8d0))
0x5600f7feb2ac

8.格式化字符串漏洞fmtstr_payload模块,将printf_got地址改为system_addr地址

payload = fmtstr_payload(6,{printf_got : system_addr}) 

9.realloc的特点
他的基础功能是改变mem_address所指内存区域的大小为newsize长度。这里就有几种不同的情况

1.当size为0,这时就相当于free()函数,同时返回值为null
2.当指针为0,size大于0,相当于malloc函数
3.size小于等于原来的size,则在原先的基础上缩小,多余的free掉
4.size大于原来的size,如果有空间就原基础扩充,空间不足则分配新的内存,将内容复制到新的内存中,然后再将原来的内存free掉。

10.calloc利用时注意
calloc不会从tcache bin里取空闲的chunk,而是从fastbin里取,取完后,和malloc一样,如果fastbin里还有剩余的chunk,则全部放到对应的tcache bin里取,采用头插法
11.注意dup(fd,666)
dup2 用来复制文件描述符:int dup2 (int oldfd,int newfd)
_fileno 是用来规定 fd 所指向的文件流的,init()将flag的fd改成了666,所以我们只要想办法把 stdin 的 _fileno 改成 666 即可,这样在之后 scanf 就会将 fd == 666 (flag)的内容输入到 & v0 中,然后我们就可以输出 flag 的内容了

几种漏洞利用方式(linux平台下)

1.栈溢出

2.整数溢出

3.格式化字符串漏洞

4.堆利用(不断学习补充中)

5.内核漏洞(还未学)

文章内容学习自
哔哩哔哩星盟安全团队pwn系列教程
ctf-wiki
王爽汇编
菜鸟教程
ctf竞赛权威指南pwn篇
CSDN博客
github
等等

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值