一、搭建DVWA环境
在windows下利用phpstudy搭建dvwa靶场
2.查看ip地址,访问DVWA。
二、制作一句话木马
新建一个记事本文件,在记事本中写入“<?phpeval($_REQUEST['zhengxiaohan']);?>”, 并将文件的扩展名改为.php,“zhengxiaohan”作为密码。并输出“ok”来验证文件是否成功上传。
三、分析low级别的代码
1.将DVWA安全级别修改为low级别。
2.点击upload-view source,查看源代码
3.对源代码进行分析
(1)if语句判断是否是用post方法来上传文件,如果是执行括号内部代码。
(2)$target_path目的路径变量,文件上传到DVWA来存放的位置,
(3)DVWA_WEB_PAGE_TO_ROOT常量,dvwa所在目录的位置
(4)“hackable/uploads/”字符串,文件所在的位置,dvwa的子目录
(5)“.”拼接常量和字符串
(6)对变量$target_path 重新赋值,变量$FILES 函数获取上传文件的文件名,basename()函数返回带有拓展名部分的文件名;通过“.”将上面得到的路径和文件名连接起来,得到完整的目的路径。
(7)使用move_uploaded_file()函数将上传的临时文件移动到指定目标位置,如果移动文件操作没有成功执行,则输出“Your image was not uploaded”。如果移动文件操作成功执行,则输出文件的位置.”successfully uploaded”。
(8)综上,low级别对上传的文件类型没有任何防范,其初衷是想要用户只能上传图片,而现在可以上传php文件,而且能够被网站解析。
4.上传一句话木马
组合文件的url:http://127.0.0.1/dvwa/hackable/uploads/muma.php
5.访问url,网站能够成功解析文件,输出OK,说明一句话木马上传成功并生效
四、分析medium 级别所采取的防御方法
1.将DVWA的安全级别修改为medium级别。
2.点击upload-view source,查看源代码
3.对源代码进行分析
(1)通过$_FILES预定义变量获取上传文件的文件名(name)、文件类型(type)和文件大小(size)这是三个数据分别赋给三个变量$uploaded_name、$uploaded_type、$uploaded_size。
(2)通过if语句判断,在同时满足上传文件类型是image/.jpg以及文件大小为100k时,才能继续执行括号内操作,检测文件是否成功移动,与Low级别内容相同。当不满足上述两个条件时,输出“Your image was not uploaded”。
(3)因此,medium级别主要是判断文件的类别和大小,代码中对于文件大小的限制一般文件都可以满足要求,因此主要分析文件上传的类型。
(4)MIME类型:MIME类型用来设定某种扩展名文件的打开方式
$_FILES[‘uploaded’][‘type‘]可以获取上传文件的 MIME 类型
常见的MIME 类型:分为两部分(“/”前是大类,“/”后是具体类别)
超文本标记语言文本(.html):text/html
普通文本(.txt): text/plain
RTF 文本(.rtf): application/rtf
GIF 图形(.gif):image/gif
JPEG 图形(.jpeg、.jpg): image/jpeg
4.上传一句话木马(php文件),上传失败。
5.将一句话木马修改为jpg形式,重新上传图片形式的一句话木马
6.图片虽然成功上传但是无法使用,没有实际意义。