DVWA命令注入攻击

什么是命令注入?

我的理解就是,由于一些web网站有一些执行系统命令的功能,但是没有对用户输入进行检测,导致存在一些漏洞。然后,攻击者利用这些漏洞与相关系统命令,构造相关语句,来获得自己想要的信息,或者执行一些敏感的操作。

基础的命令注入详解

在DVWA的界面,我们可以看到相应的表单提交代码。提交的方式是post密文传输。所以,对应的服务器端必然是用$_POST来获取浏览器端的表单数据。

服务器返回结果前

正常情况下,攻击者都是不知道服务器源代码的,所以得进行一些测试。但是,如果攻击者有一定的网站开发经验,那么猜对的可能性就比较大。

由于我这里dvwa的防御等级调的是最低级,所以随便几个套路都能发现成功了。

比如:(看见红色的hello了吗?表示成功了)

类似这样的

还有加 | 这个一道杠的符号的,还有&&符号,等等,这些都是系统中的一些符号。

command1 && command2     先执行command1后执行command2
command1 | command2     只执行command2
command1 & command2     先执行command2后执行command1

这些都是常见的。

那么,这些漏洞的危害只有一个hello那么大吗?不是,根据这些漏洞既然能执行相关的系统命令了,那么就可以查看相应的系统信息了。

比如,我通过浏览器看到了自己linux系统上的文件有哪些:

这里有一个地方我比较感兴趣,就是,服务器端代码直接输出了结果,可是居然就是在表单下方显示结果,而不是在其他地方显示,这让我觉得有点特别。可能是我本人技术太差,还不懂。

服务器返回结果后,多了东西

当我把dvwa的防御等级变成中级的时候,发现有的命令注入方法提示失败了,打开源代码一看,原来是对输入进行了一些简单的过滤,相当于添加黑名单,但是黑名单又不够完善,所以依旧可以有一些漏网之鱼。

下面是低级和中级的代码对比:

低级防御,没有检查
中级防御,虽然检查,但是不完全


高级防御,就是过滤字符多了一些
低级源码+详细注释
低级源码+详细注释

补充:php_uname('s','WINDOWS NT')的相关参数意义
‘a’:此为默认。包含序列 “s n r v m” 里的所有模式。
’s’:操作系统名称。例如: FreeBSD。
‘n’:主机名。例如: localhost.example.com。
‘r’:版本名称,例如: 5.1.2-RELEASE。
‘v’:版本信息。操作系统之间有很大的不同。
‘m’:机器类型。例如:i386。


中级防御源码+注释
中级防御源码+注释

中级防御的情况下,只是加了不完善的黑名单罢了。所以用 | 来达到注入的目的完全可以。

高级防御源码+注释
高级防御源码+注释
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容