Web_for_Pentester_I之命令注入

  • Post author:
  • Post category:其他


Web_for_Pentester是国外安全研究者开发的一款渗透测试平台,由PentesterLab出品。官方给自己的定义是一个简单又十分有效地学习渗透测试的演练平台。

命令注入攻击来自于缺少对被当做命令执行的输入部分进行有效的过滤或者编码。最简单的一个例子是利用system函数来执行,并且使用接收的http参数作为有效输入变量。

有许多方式可以执行命令注入攻击,如:

 在反引号对中注入命令,比如

id



 把第一个命令的结果重定向到第二个中去,比如| id

 如果第一个命令被成功执行,可以尝试执行更多的命令:&& id(这里&需要被编码)

 在一个失败的命令后执行另一个命令:error || id (这里的error就只是为了制造一个错误)

这里也可以用相同值技巧来检测这种漏洞。比如,把123替换成

echo 123

。在反引号里面的代码会先被执行,但是返回的结果和没有更改过的返回的页面一样。

你也可以用基于时间的载体来检测这种类型的漏洞。你可以引入需要服务器消耗时间来执行的命令来检测漏洞(可能会有造成拒绝服务攻击的风险)。你可以用sleep命令让服务器等待一段时间继续执行命令。比如用sleep 10。

【实验步骤】

一、 Example1

1.1 由Commands injection Example1的源代码example1.php可知,这是一个简单的命令执行漏洞。开发者不做任何的输入验证,你可以直接在ip参数后注入你的命令。如图1所示

在这里插入图片描述

图 1

1.2 根据前面提过的技巧,可以用| cat /etc/passwd来查看/etc/passwd的内容。在浏览器地址栏输入http://vulnerable/commandexec/example1.php?ip=

127.0.0.1 | cat /etc/passwd,获得passwd文件的内容。如图2所示

在这里插入图片描述

图 2

1.3 还可以将|改为;,在浏览器地址栏输入http://vulnerable/commandexec/

example1.php?ip=127.0.0.1 ; cat /etc/passwd,同样可以得到passwd文件内容。如图3所示

在这里插入图片描述

图 3

1.4 除此之外,可以将IP地址写错,将|改为||。在浏览器地址栏输入http://vulnerable/commandexec/example1.php?ip=127.0.0 || cat /etc/

passwd,同样可以获得passwd文件内容。如图4所示

在这里插入图片描述

图 4

二、 Example2

2.1 由Commands injection Example2的源代码example2.php可知,在这个例子中,开发者有验证提供的参数,但是用了不是很正确的方式。就像我们之前看到sql注入漏洞那样,利用的是多行的正则表达式。使用和在sql注入漏洞一样的技巧,你可以轻易的利用代码执行漏洞。这里比较方便的是你不用考虑注入分隔符。你只要注入编码的新行代码(%0a),然后加上你要执行的命令就行了。如图5所示

在这里插入图片描述

图 5

2.2 在浏览器地址栏输入http://vulnerable/commandexec/example2.php?ip=

127.0.0.1%0Acat /etc/passwd,得到passwd文件内容。如图6所示

在这里插入图片描述

图 6

三、 Example3

3.1 由Commands injection Example3的源代码example3.php可知,其源代码与example2.php类似,唯一不一样的地方是开发者没有正确的停止执行脚本。在PHP中,如果用户的提供的输入触发了某些安全规则的时候可以调用header函数非常简便的实现页面重定向。但是,就算浏览器会被重定向,这个函数并不会停止执行过程,脚本仍然会将危险的语句执行完毕。开发者需要在调用header函数后接着调用die函数来避免这个危险的错误。如图7所示

在这里插入图片描述

图 7

3.2 在浏览器地址栏输入http://vulnerable/commandexec/example3.php?ip=

127.0.0.1%0Acat /etc/passwd”,无法得到passwd文件的内容,且回到初始页面。如图8、图9所示

在这里插入图片描述

图 8

在这里插入图片描述

图 9

3.3 打开cmd,输入命令cd C:\tools\curl,再输入命令curl http://vulnerable/commandexec/example2.php?ip=127.0.0.1%0acat%20/etc/passwd,得到passwd文件的内容。如图10、图11所示

在这里插入图片描述

图 10

在这里插入图片描述

图 11



版权声明:本文为swl412原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。