Drupal 7.31SQL注入getshell漏洞利用详解及EXP

0x00php

这个漏洞威力确实很大,并且Drupal用的也比较多,使用Fuzzing跑字典应该能够扫出不少漏洞主机,可是作批量可能会对对方网站形成很大的损失,因此我也就只是写个Exp再也不深刻下去。python

 

0x01shell

关于漏洞的原理和POC在个人博客上已经有文章进行解释,这里只是着重说一下利用过程。配合POC的效果,我主要是从远程代码执行和GetShell方面去作的利用。cookie

远程代码执行利用:socket

1.使用超级管理员进行登陆函数

2.开启站点PHP Filter功能学习

3.新建aticle,选择PHP_CODE模式(编辑php代码)并预览测试

4.预览页面载入后就会执行代码网站

 

对应EXP中DrupalSQLin类的codeExecution函数,这个函数所作的事情就是把上述过程自动化。我编写这个部分比较费劲的 是,requests发送attachment遇到了问题,没有找到比较合适的Python模块,最后实在没办法就本身对Post数据包进行拼接,拼接的 时候要当心,建议遇到一样问题的朋友参考一下RFC1867协议规范,拼接结构以下:ui

1

在调试程序时,使用burpsuite进行辅助颇有效果,经过burpsuite你能够清楚看到每一次交互的数据包格式与字段内容。

GetShell利用:

  • 使用超级管理员进行登陆
  • 开启网站的PHP Filter功能
  • 新建block,编辑PHP代码
  • 使用PHP_CODE进行保存

Post请求构造以下:

2

使用python进行发包,有个缺点就是不直观,咱们没法获知咱们的数据包构造是否正确,这时候可使用requests模块的proxies参数,将代理设置为burpsuite,而后就能够分析调试了。不过,使用新建block的方法获取shell可能权限比较小。

在构造请求包的时候,有两个字段是form_build_id和form_token,他们是Drupal自带的防止CSRF所使用的token(相似于Django中的csrf防御)。发包以前必须找到这两个东西,使用小型爬虫便可。

3

还有一个关键点就是模拟登录后要保存cookie,由于后续的攻击利用都要携带admin的cookie,不然会执行出错。

 

0x02

命令执行效果:本地监听端口获取反弹shell

测试环境:本地测试

程序执行:以下图

4

因为反弹shell的基础是socket,因此通讯双发没有完成通讯会发生阻塞,这里的表现是接收反弹shell的过程当中主线程会阻塞。

反弹出shell的效果:

5

0x03

这个漏洞威力大,带给对方主机的危害也大,且涉及到用户覆盖以及改变网站原有设置的问题。

若是想要隐蔽地利用,那么须要作不少辅助工做,好比在开启php filter的过程当中,涉及到小型爬虫抓取网站原有的配置信息。还有就是管理员的获取方式进行改进,好比插入用户以后将用户加入管理员权限,这个自己我没有测试过,可是是可行的。

接下来就是放出关键部位的代码:

模拟登陆函数

6

开启PHP Filter:

7

代码执行:

8

0x04

向这种关于Web的exp写起来真的是不太顺畅,由于要处理不少细节,好比模拟登录、验证码、csrf的token、甚至徒手拼接POST attachment也不是没有可能。

关于这个漏洞利用,其实还有一种方法,就是使用了Drupal的回调机制,利用SQL Injection在menu_router表中插入一些构造好的数据,配合最终构成了RCE,而后就是各类花式getshell了。因为篇幅有限,我这里就再也不分析了。

最后,这个EXP对网站构成的危害比较大(覆盖用户名而且有可能改变网站结构),因此也只是写出来供你们学习交流使用,重点是过程,不要用于非法用途。

相关文件下载:

连接:http://pan.baidu.com/s/1eQ3V7Bc 密码:s9yi

相关文章
相关标签/搜索