请勿截屏传播

命令执行漏洞

程序员使用脚本语言(比如 PHP)开发应用程序过程中,脚本语言开发十分快速、简洁,方便,但是也伴随着一些问题。比如说速度慢,或者无法接触系统底层,如果我们开发的应用,特别是企业级的一些应用需要去调用一些外部程序。当应用需要调用一些外部程序时就会用到一些执行系统命令的函数。应用在调用这些函数执行系统命令的时候,如果将用户的输入作为系统命令的参数拼接到命令行中,在没有过滤用户的输入的情况下,就会造成命令执行漏洞。 https://cloud.tencent.com/developer/article/2037547

1.命令执行漏洞描述

程序员使用脚本语言(比如 PHP)开发应用程序过程中,脚本语言开发十分快速、简洁,方便,但是也伴随着一些问题。比如说速度慢,或者无法接触系统底层,如果我们开发的应用,特别是企业级的一些应用需要去调用一些外部程序。当应用需要调用一些外部程序时就会用到一些执行系统命令的函数。应用在调用这些函数执行系统命令的时候,如果将用户的输入作为系统命令的参数拼接到命令行中,在没有过滤用户的输入的情况下,就会造成命令执行漏洞。 https://cloud.tencent.com/developer/article/2037547

2.相关函数

在 PHP 中可以调用外部程序的常见函数: system(args) 有回显 passthru(args)(有回显) exec(args) (回显最后一行-必须 echo 输出) shell_exec(args) (无回显-必须输出) 反引号: popen(handle,mode)(无回显) proc_open('cmd','flag','flag')(无回显) process=procopen(dir, process = proc_open('dir', des,des, pipes);echostreamgetcontents(pipes); echo stream_get_contents(pipes1);

3.命令执行漏洞攻击

1. ;(分号)

命令按照顺序(从左到右)被执行,并且可以用分号进行分隔。当有一条命令执行失败时,不会中断其它命令的执行。 ping -c 1 127.0.0.1;whoami

2. | (管理符号)

通过管理符 | 可以将一个命令的==标准输出==管理为另外一个命令的==标准输入==,当它失败后,会执行另外一条命令 ping -c 1 127.0.0.1|whoami

3. &(后台任务符号)

命令按照顺序(从左到右)被执行,跟分号作用一样;此符号作用是后台任务符号使 shell 在后台执行该任务,这样用户就可以立即得到一个提示符并继续其他工作 ping -c 4 127.0.0.1&cat /etc/passwd&

4.&&(逻辑 “与”)

前后的命令的执行存在逻辑与关系,只有【&&】前面的命令执行成功后,它后面的命令才被执行 ping -c 4 127.0.0.1&&whoami4ping 命令的 -c 参数的值,表示 发送 4 个 ICMP Echo Request(ping 请求包),然后停止。 具体含义:

  • -c = count(计数)
  • 4 = 发送 4 个探测包
  • 收到 4 个应答后,ping 会自动结束并输出统计信息

5.||(逻辑“或”)

前后命令的执行存在逻辑或关系,只有【||】前面的命令执行失败后,它后面的命令才被执行; ping -c ||whoami

6.`(反引号)

当一个命令被解析时,它首先会执行反引号之间的操作。例如执行 echo ls -a 将会首先执行 ls 并捕获其输出信息。然后再将它传递给 echo,并将 ls 的输出结果打印在屏幕上,这被称为命令替换 echo whoami

7.$(command)命令执行

这是命令替换的不同符号。当反引号被过滤或编码时,可能会更有效。 ping -c 4 127.0.0.1 $(whoami)

4.常见的命令

1.cat

cat 是 Linux 下一个常用的命令,用于查看文件内容。例如:cat /tmp/flag.txt 可以读取并显示 flag 文件的内容。

2.tac

tac 是 Linux 下的一个有趣命令。它和 cat 类似,但会将文件内容的每一行倒序输出,最后一行会显示在第一行。比如:tac /tmp/flag.txt 有时候如果服务不允许 cat 命令,攻击者会尝试用 tac,因为 tac 实际上也可以读取文件内容,常用于绕过对 cat 命令的限制。

3.head

head 是 Linux 下用于查看文件开头内容的命令,默认显示前 10 行。比如:head /etc/passwd 会输出文件的前 10 行。 在安全实践中,head 可以用来快速检查大文件的一部分,或者绕过对某些命令(如 cat)的限制。攻击者有时会用 head 来读取敏感文件的开头内容。

4.tail

tail 是 Linux 下用于查看文件末尾内容的命令,默认显示最后 10 行。比如:tail /etc/passwd 会输出文件的最后 10 行。 在安全实践中,tail 可以用来快速检查日志的最新内容,或者读取大文件的末端。攻击者有时会用 tail 来获取敏感文件的结尾信息,以绕过对部分内容的读取限制。

5.more

more 是另外一个常用的文件查看命令,可以分页浏览内容。当文件内容太长时,使用 more /etc/passwd 可以一页一页地查看,非常适合阅读大文件。按下空格可以翻到下一页,按下 q 可以退出查看。 在安全实践中,tail 常用来快速检查日志或文件最新内容,而 more 则常用于较长文件的内容查看和浏览。攻击者有时会通过 tailmore 来读取敏感文件,以绕过某些读取限制。

6.less

less 是一个高级文件分页查看命令,与 more 类似,但功能更强大。使用 less /etc/passwd 可以高效阅读大文件,支持向上和向下翻页(用上下箭头或 PageUp/PageDown),按 q 退出。less 支持内容搜索(使用 / 输入关键词)和更灵活的滚动方式。在安全实践中,攻击者有时会通过 less 去查看敏感文件,因为它比 more 更易于浏览和查找关键信息,有些过滤措施可能只防住了 cat or more 指令,却忽略了 less

7.nl

nl 命令用于为文件中的每一行加上行号,输出时更加清晰有序。基本用法为 nl filename,可以看到每一行前面都有编号。 在安全测试中,nl 一些过滤只限制 cathead 等命令的场景下,攻击者可能绕过过滤用 nl 来查看敏感文件内容

8.sort

sort 命令用于对文本内容进行排序,使输出内容按照特定规则有序排列。基本用法为 sort filename,可以将文件内容按行排序输出。 在安全测试中,如果 cathead 等命令被过滤,攻击者可能使用 sort 命令来读取并间接查看文件内容。

9.uniq

uniq 命令用于去除文本中的重复行,只保留唯一的内容。基本用法为 uniq filename,通常与 sort 命令结合使用以确保相邻重复行能被识别和移除。 在安全测试中,uniq 可能被用作替代 cathead 等命令,帮助攻击者整理和查看文件中的唯一信息。

10.cp

cp 命令用于拷贝文件或目录。可以将一个或多个源文件复制到目标路径,常见用法包括 cp 源文件 目标文件(拷贝单个文件)和 cp -r 源目录 目标目录(递归拷贝整个目录)。
在日常运维和安全测试中,cp 常用于文件备份、恢复、批量复制等操作,也是排查和利用文件相关漏洞时经常用到的工具。

11.mv

mv 命令用于移动(重命名)文件或目录。可以将一个或多个源文件或目录移动到指定目标路径,常见用法包括 mv 源文件 目标文件(重命名文件或移动文件到其它位置),以及 mv 源目录 目标目录(移动或重命名目录)。 在日常运维和安全测试中,mv 常用于整理文件、重命名敏感文件、迁移目录结构等操作,也是文件管理和排查过程中经常使用的工具。

文件包含漏洞
文件包含

评论区

评论加载中...