hi,你好!欢迎访问本站!登录
推文论坛
当前位置:首页 - 科技生活 - 正文

怎么进入华夏黑客联盟(中国华夏黑客联盟)-一次不用脚本的pwn解题

2020-11-18科技生活科技生活13081°c
A+ A-

  原创 紫色仰望 合天智汇

  我们在 ctf 中 ,更多的是在 web方向中会 使用到 linux 中的/proc 目录,这里将对它进行一次介绍与学习,并且最后再举一次pwn中 运用到它的一次实例记录.

  我们这可看下****对它的介绍:

  在许多类 Unix 计算机系统中, procfs 是 进程 文件系统 (file system) 的缩写,包含一个伪文件系统(启动时动态生成的文件系统),用于通过内核访问进程信息。这个文件系统通常被挂载到 /proc 目录。

由于 /proc 怎么进入华夏黑客联盟(中国华夏黑客联盟) 不是一个真正的文件系统,它也就不占用存储空间,只是占用有限的内存。

  以下操作系统支持 procfs :

  Linux中的 /proc实现也克隆了 九号项目 中对应的部分。
每个正在运行的进程对应于/proc下的一个目录,目录名就是进程的PID,每个目录包含:
/proc/PID/cmdline, 启动该进程的命令行.
/proc/PID/cwd, 当前工作目录的符号链接.
/proc/PID/environ 影响进程的环境变量的名字和值.
/proc/PID/exe, 最初的可怎么进入华夏黑客联盟(中国华夏黑客联盟)执行文件的符号链接, 如果它还存在的话。
/proc/PID/fd, 一个目录,包含每个打开的文件描述符的符号链接.
/proc/PID/fdinfo, 一个目录,包含每个打开的文件描述符的位置和标记
/proc/PID/maps, 一个文本文件包含内存映射文件与块的信息。
/proc/PID/mem, 一个二进制图像(image)表示进程的虚拟内存,
只能通过ptrace化进程访问.
/proc/PID/root, 怎么进入华夏黑客联盟(中国华夏黑客联盟) 该进程所能看到的根路径的符号链接。如果没有chroot监狱,那么进程的根路径是/.
/proc/PID/status包含了进程的基本信息,包括运行状态、内存使用。
/proc/PID/task, 一个目录包含了硬链接到该进程启动的任何任务

  即 /proc目录下各个文件其实就是运行程序的 PID号。我们可以使用cat 命令获取到每个进程中的相关信息。

  前言中说到在web 方向中会使用到/proc/这个目录,

  /proc/self 获取当前 进程

  /proc/self/cwd 进程中包含的文件

  /proc/self/environ 怎么进入华夏黑客联盟(中国华夏黑客联盟) 系统环境变量

  而在 二进制方向的 pwn中,我也第一次遇到了 proc 的 题目,这里记录下来以及分享下为了大家更好得理解和阅读通畅,在开始之前我们 地该程序中相关一些函数和知识点 进行 学习。

  /dev/urandom

  我们在linux中 获取随机数的时候,我的话目前经常见到是使用 rand函数,但其实 它是有很大的安全隐患的,即它是伪随机的,在(用srand产生)随机数种子一样的情况下,使用rand每次获得的序列都会是相同的。

  其实 linux上的怎么进入华夏黑客联盟(中国华夏黑客联盟)/dev/urandom文件产生较好的随机数(还有其相关文件/dev/random,有兴趣可以在网上搜搜索学习下)

  "/dev/random和/dev/urandom是Linux系统中提供的随机伪设备,这两个设备的任务,是提供永不为空的随机字节数据流。很多解密程序与安全应用程序(如SSH Keys,SSL Keys等)需要它们提供的随机数据流。"

  我们用open打开该文件,然后便可以从文件描述符中获取随机数据。

  这里写个demo:

  v2-25c506f2aa80fcaa653951902dbb9bb0_720w

  chdir()

  头文件:include函数原型:int chdir(const char * path);函数功能:将调用进程的当前工作目录改变为 参数path 所指的 目录

  返回值:执行成功 返回 0 失败 返回 -1

  写个demo:怎么进入华夏黑客联盟(中国华夏黑客联盟)

  输出结果:

  v2-7574f8b886a389454a85328907086a04_720w

  我们 以 find your self 这个pwn 题 学习下 ,一个不用写脚本的 pwn。

  例行检查:64位 ELF 文件,开启了canary 和 NX保护,但其实对这题 并没有什么影响。

  $ file fys

  fys: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 2.6.32, BuildID[sha1]=76f8c2cb2804973c40b8c6999ecc4dca5f732786, not stripped

  $ checksec fys

  拖入ida,看main 函数

  这里有个 怎么进入华夏黑客联盟(中国华夏黑客联盟) 两个 if 判断,先看第一个 我们要绕过它的话,就得使我们 输入字符串 s 等于 当前的工作目录绝对路径(在后面的分析中我们可以知道这个当前的工作目录绝对路径是通过 chdir()函数 设置的 目录字符串)

  第二个 if 判断 ,我们输入的字符串 s 要经过 check 2 函数处理,我们看下 分析下check2函数 即 我们 输入 s1 不能含有 *,sh,cat,..,&,|,>,< 这些符号即过滤了

  image.pngimage.png

  另外 这里我们呢看到了在执行最后system(&s1) 之前 关闭了标准输出和错误输出。

 怎么进入华夏黑客联盟(中国华夏黑客联盟) image.png

  所以 无论 system(&s1) 执行 什么 系统命令,屏幕上都不会显示 任何输出信息。所以,我们需要 解决的的第二件事情就是,将屏幕回显 。这样

  image.png

  在main 函数中我们看到程序首先执行了 init 函数用于初始化 工作

  这里的具体分析请详见代码中的注释!

  即首先在 /tmp 目录下创建 50个空文件夹,文件名是随机的16进制位数,

  接着有通过 chdir(&s) 随机 更改了当前进程的工作目录,然后我们可以执行 system(&s1)系统函数,最后返回到main函数 。但s1 怎么进入华夏黑客联盟(中国华夏黑客联盟) 要经过 check1函数检测。

  我们进入check1 函数分析下代码

  分析check1函数得,我们输入的字符串 s1 只能是 a-z,A-Z 再加上 '/' ,' ','-' 共55 的字符组合

  image.png

  整个程序,可以执行两次 怎么进入华夏黑客联盟(中国华夏黑客联盟) system(s) 命令为了可以执行第二次的,我们第一次输入需要 得到 当前程序 的 绝对目录 这里即可使用,上面说过的

  image.png

  为了阅读方通常我把check1的过滤放在下面:

  v2-1d587fb4c016b5bafac2c4a909a95f4c_720w

  这是我们已经绕过了 main函数中的 if 函数了,接着我们要输入的system(&s) 的参数 s 时我们要绕过 check2

  v2-39f80e38e6怎么进入华夏黑客联盟(中国华夏黑客联盟)e49a93668b85a224e8f9f9_720w

  因为我们只有这一次输入机会了,我们 这步要拿到shell,这个很好绕过 我们可以通过

  image.png

  为了很多新手看不懂,这里简单说下,字符串拼接的原理

  字符串拼接绕过 过滤 怎么进入华夏黑客联盟(中国华夏黑客联盟) 是 做ctf中(特别是web 方向)会 经常遇到的,这个是Linux shell的语法 初始化 a为变量,并赋值为 h, ';'是linux shell中的命令分隔符,然后 s$a 就相当于输入了 sh即可拿到 shell。

  然后我们 便可执行任意命令去 得到 flag,我们接着可以再 将 屏幕的 回显打开

  image.png

  然后再 cat /flag 便成功了

  v2-eebd922dce7512e4834b54df6fa87936_720w

  这题是我在二进制方向第一次用到 /proc 这个知识点。觉得这次很详细了,可供给大家学习下。

  如果想更多系统的学习CTF,怎么进入华夏黑客联盟(中国华夏黑客联盟)可点击“CTF从入门到实践-CTF一站式学习平台-合天网安实验室

  ”,进入CTF实验室学习。

  声明:笔者初衷用于分享与普及网络知识,若读者因此作出任何危害网络安全行为后果自负,与合天智汇及原作者无关!

本文来源:推文收录网

本文地址:https://www.hzccw.com/i/89810.html

版权声明:本站收录微信公众号文章内容全部来自于网络,部分内容为用户投稿内容,本站所有内容仅供个人学习、研究或者欣赏使用。版权归原作者所有。禁止一切商业用途。其中内容并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现本站上有侵犯您的知识产权的内容,请与我们联系,我们会及时修改或删除。