php exec多条命令怎么拼接_[DVWA学习笔记]命令注入Command Injection

72cf86531b4f9e160e329a8dae288086.png

Low:

命令注入即通过在原本输入框中拼接系统命令的方式,在服

务器上执行对应的指令。

在存在执行系统命令的函数,如php中的system、exec、shell_exec等,用户可以传入命令的参数的时候,将恶意的命令拼接其中,就可以造成命令注入攻击。

以DVWA中最简单(LOW)级别来演示:

c111085cd2f3cbb1f8b1a874e300ce68.png

该处设置一个ping功能,输入一个IP地址即可以从服务器对该地址执行ping操作。源代码如下:

1d6602e8d742597ffafd3cc6d6b6164e.png

target参数为将要ping的ip地址,比如在输入框输入127.0.0.1后,对于windows系统,会发出ping 127.0.0.1操作。

这里可以引入命令行的几种操作方式:

A && B: 先执行A,如果成功,执行B;

A || B :先执行A,如果失败,执行B;

A | B:管道,先执行A后,将A的结果作为B的输入,打印的是B的结果;

A & B:先执行A,然后不管成功与否,执行B;

再看上面的源代码,可以想到在ping命令后可以尝试其他命令的拼接,比如在linux系统中执行ping 127.0.0.1 & ls,则会先运行ping指令,之后执行ls指令,列出当前文件夹的内容。那么在这个地方同样可以进行拼接,输入框中填入127.0.0.1 & ls,这些内容都会作为target参数传入服务器从而拼接出整个系统命令并执行。

这也就是命令注入的基本原理。

攻击效果如图:

0921a1b792ad1eab9ec272fabae9afdb.png

Medium与High:

在DVWA中Medium及High级别下,针对命令注入进行的防御措施实际上都没有太大差别,都进行的是对用户输入的过滤操作:

Medium的过滤操作部分代码:

de8e5e5a2c9d608a79b81fcb673a6c8f.png

High的过滤操作部分代码:

1efc95861f6240c8be66e21eb85e51fb.png

Medium只对&&与;两种符号进行过滤,所以用其他的||,|,&同样可以进行攻击,对于High,它对可能造成攻击的符号都进行了过滤操作,但是在对 | 进行过滤的时候,多了一个空格,如下:

17e650d4fe13e4ebb186bb6d7dde4f6a.png

在命令行中进行操作的时候,空格不一定是必须的,此处如果输入127.0.0.1 | ls(即竖线后有空格)和127.0.0.1|ls,两者效果一致,所以只要不加空格同样可以造成攻击。

8040a03ce39e26ecd048d0db50112ede.png

Impossible

设置DVWA防御级别为impossible,查看这部分的代码:

f2be9266f177d735edbd3fa7815cf258.png

这里不仅做了命令注入的防御,还做了CSRF的防御。

其中,is_numberic()函数返回值为:如果指定的变量是数字和数字字符串则返回 TRUE,否则返回 FALSE。

传入ip地址(即用户的输入内容)后,服务器会利用explode函数将该地址依据.划分为4个部分,比如127.0.0.1中的3个.将该ip划分成了4个数字,检验每个部分是否为数字。所以如果出现非法字符,is_numberic()就返回了false。

补充:

CTF或渗透测试中常用于进行命令注入攻击拼接的命令:

ls :列出当前文件夹的内容;

sleep 5:观察是否存在时间差来检测是否存在漏洞;

whoami:当前的用户;

cat /etc/shadow:影子文件,存储linux中用户的密码信息

ls -alh /home/:查看用户

ls -alh /home/用户名/ : 查看具体用户的目录

usname -a:查看系统信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值