AWD学习

基本流程

1、拉下题目文件

2、迅速分析题目漏洞

3、将漏洞打上补丁回传

4、解题、攻击

5、抓流量、防御

一、靶机信息收集

PWN靶机、通过XSHELL连接,下载LIBC文件和ELF文件,下载完请备份

一般 nc ip + 端口

libc 一般在 lib/x86_64-linux-gnu 的libc-2.23.so文件 这个是运行时,所以要下载

创建一个比赛文件副本,将pwn和so文件拷贝进去

需要自己寻找pwn题目的端口,每个队伍pwn挂载端口都是相同的

nmap工具扫描一遍pwn靶机,就可以获取题目的端口 例如nmap 127.0.0.1 nc连接即可

netstat -nultp 自助扫描 只知道自己靶机ip和端口是没有用的 一般来说靶机ip都是连续,有迹可循

ifconfig查看本机所在网络 nmap -sP 192.168.58.0/24

一般pwn题目比ctf简单,而且漏洞比较多 要第一时间写出EXP进行第一轮攻击

发现漏洞点之后不管会不会利用,打上补丁,重命名PWN文件,以防被别人利用

二、一般PWN题目常见漏洞及其补丁分析

一般常见漏洞

栈溢出漏洞

read(0,&buf ,0X40uLL);

read(0,&s,0x90uLL)

read(&format,24LL)这种不是漏洞

修补形式:

该类漏洞一般由于接受字符溢出,导致修改返回地址形成漏洞

read一般只能读取20个字符,但是,如果后面跟着0x20,那就相当于多读取了16个字符,导致漏洞

修补:

有限制数据输入 对read和copy是有效的

将数据输入地址改为BSS段等可读取段上 对应的是get函数

格式化字符串漏洞

print(&buf,&buf) 

print(&format)

堆溢出漏洞

越界写

malloc 分配

快速分析流程,找数字流

从输入流入手,跟随输入流寻找漏洞  污点分析

例子:

(1)在linux下运行程序,提示输入内容  ./change_rdx

在main函数中发现 read(0,&buf,0x60uLL)  栈溢出漏洞 对应上面rbp-30h 30位的

选中这一行,右键选择copy toassembly  选择yes 

在linux下面 gdb change_rdx 调试

b *0x00000000004006EE

r

如图

c10 - be0 肯定大于0x60

将60h 修改为0x30,第一步patch,第二部cancel,然后变成如图所示

返回main查看 read(0,&buf,0x30uLL)  

在edit的keypatch的patcher对文件进行patch

或者在patch program 的assemble也可以修改

打完补丁要用patch program 的apply pachthes to input files 打完补丁后的文件 针对ida7.0

命名为_patched

b *0x0000000000400704

r

只能读取0x30的数据 只要

(2)gets(&s,argv);

choose segement to jump 可以选取.bss模式查看

copy assembly

修改 1156 的assembly 改成 mov rdi,0x0000000000404040

然后返回main函数

0x404040的地址对应.bss的开始段位地址

同样的puts(&s) 也改为mov rdi,404040h的地址  此时将他应用

打完补丁要用patch program 的apply pachthes to input files

把文件上传,然后gdb change_buf_to_bss

加断点在call _gets,   401162

b *0x0000000000401162

r

输入 ni

aaaaaaaaaaaaaaaaaaa

将打好补丁的放进去

相比较而言,两者功能没有区别

输入参数 栈上改成bss堆上

(3)格式化字符串一般形式为print(&FMT)

常见修改方式  在数据前加上格式化字符串

修改printf函数为puts函数 ./fmt_change_pringf_to_puts

aaa command not found

sed -i s/alarm/isnan/g ./fmt_change_printf_to_puts 修改时钟

%p可以测试出基本漏洞

查看源码

format是漏洞点

找到puts的 plt表,而不是plt.got 也不是got表

把call printf改成call 0x000000000400670   text是他的输出函数

打完补丁要用patch program 的apply pachthes to input files

测试有什么不同

(4)堆溢出

主要有堆溢出 UAF

直接固定malloc的size 限制攻击数据流

不用管漏洞,找到malloc 固定size

找到添加的函数 

堆溢出利用的环境, 堆的申请和释放

躲过check,又要限流

 mov eax,dwprd ptr [rbp+size]

修改为 mov eax,0x80 

同时 read里面的size也修改为

mov eax,dwprd ptr [rbp+size]

修改为 mov eax,0x80      最终到  mov edx,0x80 

 补丁前后

 逆推 流量抓取

一般root权限 

pwn通防和抓流量

 tcpdump -s 0 -w flow.pcap port 端口号

 

会在目录下生成 flow.pacp文件

 

 payload="a"*40+"\x76\x06\x40\x00\x00\x00\x00\x00"

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值