web渗透测试 第17课:命令注入

命令注入来自缺乏对作为命令一部分使用的信息的过滤和编码。最简单的示例来自使用函数system(运行命令)并将HTTP参数作为此命令的参数。

 

有很多方法可以利用命令注入:

  • 例如,通过在反引号内注入命令 `id`
  • 通过将第一个命令的结果重定向到第二个命令 | id
  • 如果由第一个成功运行的另一个命令:&& id(其中,&需要被编码)
  • 通过运行另一个命令,如果第一个命令失败(并确保它执行:( error || id这里error只是导致错误)。

 

也可以使用相同的值技术来执行这种类型的检测。例如,您可以替换123`echo 123`。反引号内的命令将首先执行,并返回与命令使用的完全相同的值。

 

您还可以使用基于时间的向量来检测这些类型的漏洞。您可以使用在服务器上处理需要时间的命令(存在拒绝服务的风险)。您还可以使用该命令sleep告诉服务器在继续之前等待一段时间。例如,使用sleep 10

 

Example 1

第一个例子是一个简单的命令注入。开发人员没有执行任何输入验证,您可以在ip参数后直接注入命令。

 

基于上面提到的技术,您可以使用有效负载&& cat /etc/passwd( &需编码)来查看内容/etc/passwd命令注入

 

Example 2

此示例验证提供的参数,但不正确。正如我们之前看到的SQL注入一样,使用的正则表达式是多行的。使用我们在SQL注入中看到的相同技术,您可以轻松获得代码执行。

 

这里的好处是你甚至不需要注入分隔符。您只需添加编码的新行(%0a)然后输入您的命令即可。例如:%0als /命令注入

 

Example 3

这个例子和前一个例子非常相似; 唯一的区别是开发人员没有正确停止脚本。 在PHP中,如果提供的某个值与某些安全性约束不匹配,则可以轻松简单地重定向用户,即调用函数header。 但是,即使浏览器将被重定向,此函数也不会停止执行流程,并且脚本仍将使用危险参数运行。 开发人员需要在调用函数header之后调用函数die,以避免此问题。

 

您无法在浏览器中轻松利用此漏洞,因为您的浏览器将遵循重定向,并且不会显示重定向页面。要利用此问题,您可以使用telnet

% telnet vulnerable 80 
GET /commandexec/example3.php?ip=127.0.0.1|uname+-a HTTP/1.0

 

或使用netcat

% echo "GET /commandexec/example3.php?ip=127.0.0.1|uname+-a HTTP/1.0\r\n" | nc vulnerable 80

 

如果仔细查看响应,您将看到获得302重定向,但您可以uname -a在响应正文中看到命令的结果。

    A+
发布日期:2018年07月05日 23:05:41  所属分类:Web Pentester
最后更新时间:2018-07-05 23:05:41
评分: (2 票;平均数5.00 ;最高评分 5 ;用户总数2;总得分 10;百分比100.00)
付杰
Python数据分析与机器学习实战
  • ¥ 398.0元
  • 市场价:498.0元
uni-app高级实战:视频点播app小程序开发
  • ¥ 198.0元
  • 市场价:498.0元
Node.js视频教程:node.js全栈开发之路
  • ¥ 45.0元
  • 市场价:45.0元
Entity Framework Core项目实战快速入门视频
  • ¥ 68.0元
  • 市场价:98.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: