BUUCTF ciscn_2019_c_1(rop_x64,泄露libc)

本文详细介绍了在Ubuntu18环境下,针对一个64位ELF程序利用栈溢出漏洞进行ROP攻击的过程。由于系统机制变化,调用system需栈对齐。分析了程序流程和静态特性,指出加密函数中的漏洞,通过puts泄露libc版本并构造ROP链以获取shell。
摘要由CSDN通过智能技术生成

由于Ubuntu18运行机制与前面版本的不同,在调用system的时候需要进行栈对齐

0x1 检查文件

在这里插入图片描述

  • 64位elf
  • 无canary
  • 无PIE

0x02 流程分析

在这里插入图片描述
根据运行的流程,这个程序主要有两个功能,加密功能可以使用,但解密功能没办法使用,并且能够输入的地方就两个,一个选择程序,数字输入,第二个输入加密文本,字符串类型,之后的静态分析主要关注这两个地方。

0x02 静态分析

在这里插入图片描述
  经过分析,主要漏洞点在加密函数之中,可以看到输入s时没有经过边界检查,存在栈溢出漏洞,搜寻程序也没有可用的后门函数,需要自己泄露libc版本并构建ROP链。
  值得注意的是,函数里面有一个变量x,这个x代表这输入的数据是否需要加密,当我们输入字符串长度比原有x大的时候才会加密,加密函数很简单,只是一个异或操作,可以直接将语法改一下添加到exp里面。

0x04 思路分析

  由于程序没有可用的后门函数,但有puts这个函数,就可以通过构造rop泄露出libc的版本和函数地址,利用LibcSearcher或者DynELF可以查到libc的版本,之后获取libc里面的地址构造ROP链,获取shell。
  由于两次的payload长度是一样的,加密函数里面的x经过第一个payload之后,值已经改变,第二次payload输入是不会被加密的,可直接使用。

exp

from pwn import *
from LibcSearcher import *

def encrypt(string):
    newstr = list(string)
    for i in range(len(newstr)):
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值