password
status
date
icon
category
tags
slug
summary

0x00 前言

实战碰到概率很低,故网上基本都是些简单的执行命令payload,今天考试正好碰到了,当时想到了几种绕过限制方法,事后分析记录下。

0x01 限制分析

网上一般是执行单个命令,这个位置虽然可以执行命令,但是同时受DTD语法+expect伪协议语法约束,限制极多,通过分析这俩约束,大概有如下限制
不可以使用" 但是可以使用'
不可以使用实体编码、URL编码
不可以使用 < > 虽然这俩有XML预定义实体引用,但这里确实不行,echo xxx > xxx 这种方法基本不可以
不可以使用 | ,管道符被禁用那操作又少了不少,想base64解码传到sh也不行了。
不可以使用 \ {}
: 必须符合 :8080 这种表示端口的格式
不可以使用 (空格)

0x02 环境快速搭建

 

0x03 getshell

3.1 空格绕过

看到这些限制熟悉CTF的肯定都能想到不少方法了
比如$IFS代表分隔符,但是这并非空格的完美替代
cat$IFS/etc/passwd 这种$IFS + 符号是正常的,但是cat$IFSindex.php 这种$IFS+字母则会提醒你没有cat.php 这个文件,这是因为bash把 $IFSindex 当作了变量名。这时候一般做法是用${IFS} 替代空格,不过这里{}已经被限制了,所以只好使用$IFS$9 这种来代替空格了,$9 代表当前shell进程第9个参数,一般是空字符,同理其实 $8 $7 等等也都是空字符,而且这些变量在解释器里有特殊处理,不会和后面的字母、数字结合成变量名,这样空格问题基本就解决了。

3.2 其他绕过?

但是 > 怎么办?sh -c "echo 23 $PS2 b"这种情况下 $PS2可以代替>,但是双引号被限制了,故用$PS2 绕过是不行了。
同时,因为反斜线被限制了,printf执行命令的方法也行不通了(如$(printf "\154\163")
没有 " \ 可用的情况下着实难以绕过限制,这俩有一个就可以全盘绕过了,如果有大佬绕过了,麻烦留言教我。

3.3 写webshell

既然绕不过某些限制,那就用允许范围内的方法写webshell吧。
最先想到的就是curlwget
好在http:// 是可以不使用的(对:有限制)
notion image

3.4 任意命令执行

到上面这步其实大部分情况已经够了,但万一目录没有写文件权限,或者不出网怎么办?
在sh下确实没办法绕过限制了,但在别的编程语言下就未必了,你php环境总有php吧?
先确认一下php命令能不能用,按理来说就算不能直接用也能用绝对路径用,大部分情况下直接用就可以了。
notion image
到这就随意了,想执行什么命令都行,也没有限制了,

3.5 其他

利用php临时文件之类的奇怪方法也可以,不过没上面的好用,就不写了。
OSCP2023备考经验城市印象 - 广西南宁
公告
password
status
date
icon
category
tags
slug
summary
年轻时,你的潜力是无限的。说实在的,任何事都有可能做成。你可以成为爱因斯坦,也可以成为迪马吉奥。直到某一天,你身上的可能性消失殆尽,你没能成为爱因斯坦,你只是一个无名之辈。那真是糟糕的时刻。
🔮
所谓魔法不过是我们尚未了解的科学。
📚
潜心学习,低调发展。