首页 > 代码库 > Drupal 7.31 SQL注入漏洞利用详解及EXP

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



有意迟几天放出来这篇文章以及程序,不过看样子Drupal的这个洞没有引起多少重视,所以我也没有必要按着不发了,不过说实话这个洞威力挺大的,当然,这也是Drupal本身没有意料到的。

0x00

首先,这个漏洞真的很大,而且Drupal用的也比较多,应该可以扫出很多漏洞主机,但是做批量可能会对对方网站造成很大的损失,所以我也就只是写个Exp。不过,这个洞好像不怎么被重视,这也是极为不合适。

 

0x01

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

远程代码执行利用:

1.使用超级管理员进行登录

2.开启站点PHP Filter功能

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

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

 

对应EXPDrupalSQLin类的codeExecution函数,这个函数所做的事情就是把上述过程自动化。我编写这个部分比较费劲的是,requests发送attachment遇到了问题,最后实在没办法就自己对Post数据包进行拼接,拼接结构如下:


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

GetShell利用:

1.使用超级管理员进行登录

2.开启网站的PHP Filter功能

3.新建block,编辑PHP代码

4.使用PHP_CODE进行保存

Post请求构造如下:


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


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


还有一个关键点就是模拟登陆后要保存cookie,因为后续的攻击利用都要携带admincookie,否则会执行出错。


0x02

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

测试环境:本地测试

程序执行:如下图

接收反弹shell的过程中主线程会阻塞。

反弹shell效果;


0x03

这个漏洞威力大,带给对方主机的危害也大,而且涉及到用户覆盖以及改变网站原有设置的问题,所以我这里就不准备将代码完整分享出来。

如果想要隐蔽地利用,那么需要做很多辅助工作,比如在开启php filter的过程中,涉及到小型爬虫抓取网站原有的配置信息。还有就是管理员的获取方式进行改进。

接下来就是放出部分代码:

模拟登录函数

开启PHP Filter

代码执行:


0x04

这种Web类型的EXP编写需要很多细节,在调试的途中我甚至动用了burpsuite。并且这个过程也让我恶心得很。

另外,程序也仅供安全研究与学习交流使用,请读者不要用于非法用途。


0x05

分享一下程序,其中一些重要的部分被我删去一些,程序现在是无法运行的,还是只提供学习交流使用:

#coding=utf-8
import requests
import re
import sys
import socket
import urllib
import urllib2
import cookielib
import mimetypes
import mimetools
class DrupalSQLin():

	'''获取超级管理员账户密码(覆盖)'''
	def getAdmin(self,url):
		try:
			#admin is owned, pass is thanks
			data = http://www.mamicode.com/{>



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