当前位置:网站首页>AWD学习
AWD学习
2022-07-02 06:21:00 【zb0567】
基本流程
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"
边栏推荐
- Sentinel规则持久化到Nacos
- 最新CUDA环境配置(Win10 + CUDA 11.6 + VS2019)
- 数据科学【八】:SVD(一)
- Contest3145 - the 37th game of 2021 freshman individual training match_ H: Eat fish
- 10 erreurs classiques de MySQL
- Learn about various joins in SQL and their differences
- 计算属性普通函数写法 和 set get 写法
- Hydration failed because the initial UI does not match what was rendered on the server. One of the reasons for the problem
- Don't use the new WP collection. Don't use WordPress collection without update
- I/o multiplexing & event driven yyds dry inventory
猜你喜欢
Log (common log framework)
Monitoring uplink of VRRP
一口气说出 6 种实现延时消息的方案
Pbootcms collection and warehousing tutorial quick collection release
Amazon AWS data Lake Work Pit 1
实现strStr() II
BGP报文详细解释
From design delivery to development, easy and efficient!
深入学习JVM底层(二):HotSpot虚拟机对象
Contest3147 - game 38 of 2021 Freshmen's personal training match_ A: chicken
随机推荐
Cglib代理-代码增强测试
介绍两款代码自动生成器,帮助提升工作效率
代码技巧——Controller参数注解@RequestParam
MySql索引
实现strStr() II
BGP中的状态机
深入学习JVM底层(二):HotSpot虚拟机对象
BGP报文详细解释
BGP 路由优选规则和通告原则
ShardingSphere-JDBC篇
【张三学C语言之】—深入理解数据存储
Zhuanzhuanben - LAN construction - Notes
Detailed explanation of BGP message
Classic literature reading -- deformable Detr
深入学习JVM底层(三):垃圾回收器与内存分配策略
eslint配置代码自动格式化
WLAN相关知识点总结
LeetCode 283. 移动零
VRRP之监视上行链路
Three suggestions for all students who have graduated and will graduate