在这次网络安全攻防技术的学习之旅中,DVWA的Command Injection模块给我带来了深刻的学习体验和技术启发。
一、学到的知识和技术
1.命令注入的原理
命令注入是指攻击者通过在输入字段中注入恶意的系统命令,利用应用程序对用户输入的不当处理,从而使服务器执行这些恶意命令。这通常发生在应用程序将用户输入直接拼接到系统命令中,而没有进行充分的过滤和验证。
2.常见的漏洞利用场景
在Web应用中,常见的命令注入漏洞点包括表单提交、URL参数、HTTP头字段等。例如,当一个应用程序接受用户输入来执行系统命令,如文件操作、进程控制等,如果没有对输入进行严格的检查和过滤,就可能被攻击者利用。
3.命令执行的语法和技巧
不同的操作系统具有不同的命令执行语法。在Linux中,常用的命令如cat、ls、whoami等可以获取系统信息。而在Windows中,dir、ysteminfo等命令则具有类似的功能。此外,还学习了如何使用管道符|、分号;等符号来组合多个命令,以实现更复杂的攻击目的。
4.漏洞检测和利用工具
在探索Command Injection漏洞时,使用了一些工具来辅助测试,如Burp Suite进行抓包和修改请求,以及各种命令行工具来验证漏洞的存在和执行恶意命令。
二、DVWA-Command Injection需要注意的事项:
1.以DVWA中最简单(LOW)级别来演示,源代码中target参数为将要ping的ip地址,会发出相应的ping操作。由于在ping命令后可以尝试其他命令的拼接,这就是命令注入的基本原理。
对于DVWA中Command Injection的low级别,直接将用户输入的target变量放入shell_exec()执行ping命令,没有进行任何过滤。利用命令执行漏洞的原理,在操作系统中,&、|、&&、||等都可作为命令连接符。例如,在ping 127.0.0.1后面使用管道符与拼接继续执行命令whoami(127.0.0.1&whoami),可看到除了执行ping命令,whoami也被执行。
不同命令分隔符的效果如下:
(1)&&:先执行前面的命令,如果成功,再执行后面的命令。
(2)||:先执行前面的命令,如果失败,再执行后面的命令。
(3)&:先执行前面的命令,然后不管成功与否,执行后面的命令。
(4)|:管道符,先执行前面的命令,将其结果作为后面命令的输入。
在测试不同payload时发现:
127.0.0.1&&ipconfig与一个&的执行结果一样(注意这是基于第一个为真的条件)。
127.0.0.1&&ipconfig中,当第一个命令执行失败(为假),第二个命令(ipconfig)不会被执行,这是两个&&的效果。
127.0.0.1&ipconfig中,虽然第一个命令执行失败,但是第二个命令还是被执行了,这是一个&的效果(前面可真可假,后面命令都会执行)。
对于一个或(||、|),无论第一个命令执行为真还是假,都是直接执行第二个命令;对于两个||,前面为真,只执行前面的,后面命令没有执行;若前面为假,执行后面的,第二个命令被执行。
最后尝试写入木马后门,使用dir命令查看当前目录下的文件,利用或(|)来执行命令,但在靶场测试中使用或无法写入,换用与(&)即可。在windows系统下,尖括号<>被用于输出重定向,所以要使用^符号进行转义,构造payload写入一句话木马文件。
2.Medium级别针对命令注入进行的防御措施是对用户输入的过滤操作,只过滤了&&与;两种符号,所以用其他未过滤的符号如||、|、&同样可以进行攻击。
3.High级别对可能造成攻击的符号都进行了过滤操作,但在对|进行过滤的时候多了一个空格,在命令行中操作时空格不一定是必须的,所以只要不加空格同样可以造成攻击。
三、DVWA-Command Injection通关教程
1.low级别:服务器端获取用户提交的ip后,根据不同操作系统选择不同的ping命令格式,未对用户输入做任何过滤。可使用的命令连接符及相应payload示例如下:
(1)a;b:a不论正确与否都会执行b,如127.0.0.1;ipconfig。
(2)a&b:a后台运行,a和b同时执行,如127.0.0.1&ipconfig。
(3)a&&b:a执行成功后才会执行b,如127.0.0.1&&ipconfig。
(4)a|b:a执行的输出结果作为b命令的参数,a不论正确与否,都会执行b,如127.0.0.1|ipconfig。
(5)a||b:a执行失败后才会执行b命令,如127.0.0.1||ipconfig。
2.medium级别:设置了黑名单过滤规则,过滤了&&和;。可使用未被过滤的&、|、||,payload如127.0.0.1&ipconfig、127.0.0.1|ipconfig、127.0.0.1||ipconfig。
3.high级别:看上去敏感字符都被过滤了,但|后面有个空格,利用不加空格的|仍可绕过,如127.0.0.1|ipconfig。
四、对命令执行通关的理解和感悟
在通关DVWA的Command Injection模块过程中,我深刻体会到了安全防护的重要性。一个看似简单的输入字段,如果没有经过精心的设计和防护,就可能成为攻击者入侵系统的突破口。
在通关 Command Injection 的各个级别时,我深刻体会到了漏洞利用的复杂性和多样性。
1.低级别漏洞的明显与简单利用
DVWA的低级别漏洞往往较为明显,缺乏基本的输入过滤,这让我轻易地能够注入恶意命令。但这也让我明白,现实中的攻击者往往会首先寻找这样的明显漏洞来迅速获取初步的控制权。
2.中高级别漏洞的挑战与突破
随着级别的提高,漏洞的防范措施逐渐加强,需要更加细致地分析和巧妙地构造payload才能成功利用漏洞。这让我学会了在面对困难时保持耐心和冷静,不断尝试不同的方法和思路。
3.漏洞防范的重要性
每一次成功突破一个级别,我都会思考如果开发者在代码中采取了正确的防范措施,这些漏洞就可以被避免。这使我更加明确了在开发过程中,安全应该始终是首要考虑的因素。
同时,也意识到了开发者在编写代码时,必须对用户输入进行严格的过滤和验证,不能轻信用户的输入内容。任何未经处理的用户输入都可能是潜在的威胁。
另外,通过不断尝试不同的命令和输入组合,锻炼了自己的逻辑思维和问题解决能力。在面对复杂的漏洞利用场景时,需要冷静分析,找出漏洞的关键点,并巧妙地利用命令语法来达到攻击的目的。
五、心得体会
1.安全意识的提升
这次的学习让我更加重视网络安全,无论是作为开发者还是普通用户。在日常的网络活动中,要时刻保持警惕,不轻易输入敏感信息,避免成为攻击者的目标。
2.技术能力的成长
通过实际动手操作和实践,不仅巩固了之前学到的理论知识,还提升了自己的技术水平。对于命令行操作、系统原理等方面有了更深入的理解和掌握。
3.持续学习的重要性
网络安全领域不断发展和变化,新的漏洞和攻击技术层出不穷。只有保持持续学习的态度,不断跟进最新的安全动态,才能在这个领域中不断进步,更好地保护自己和他人的网络安全。
总的来说,DVWA的Command Injection模块是一次非常有价值的学习经历,让我在网络安全的道路上迈出了坚实的一步。我将继续努力学习和探索,为网络安全事业贡献自己的一份力量。