⼀句话⽊马绕过linux安全模式,⼀句话⽊马(webshell)是如何
执⾏命令的
在很多的渗透过程中,渗透⼈员会上传⼀句话⽊马(简称webshell)到⽬前web服务⽬录继⽽提权获取系统权限,不论asp、php、jsp、aspx 都是如此,那么⼀句话⽊马到底是如何执⾏的呢,下⾯我们就对webshell进⾏⼀个简单的分析。
⾸先我们先看⼀个原始⽽⼜简单的php⼀句话⽊马。
看到这⾥不得不赞美前辈的智慧。
对于⼀个稍微懂⼀些php的⼈⽽⾔,或者初级的安全爱好者,或者脚本⼩⼦⽽⾔,看到的第⼀眼就是密码是cmd,通过post提交数据,但是具体如何执⾏的,却不得⽽知,下⾯我们分析⼀句话是如何执⾏的。
这句话什么意思呢?
财报asp是什么意思php的代码要写在<?php  ?>⾥⾯,服务器才能认出来这是php代码,然后才去解析。
@符号的意思是不报错。
例如:
如果没有@,如下图,就会报错
为什么呢?
因为⼀个变量没有定义,就被拿去使⽤了,
服务器就善意的提醒: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‘;"); ?>
结果:
连起来意思就是:
⽤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为了⽅便处理某些功能,会去掉的)
看看效果:
现在应该理解,为什么说⼀句话短⼩精悍了吧!
我们在看⼀下⼀句话在菜⼑之类的webshell管理⼯具⾥⾯是如何⼀句话是如何执⾏的
其实可以很明显看明⽩,其实执⾏的命令就和我们前⾯写的哪样进⾏输⼊输出,执⾏系统命令操作。所以只要webshell有⾜够⾼的权限,可以做任何你想做的事情。