我再没见过 像你一般的星空~
年
新
乐
快
...
记一次内存数据库凭据泄露到Mssql命令执行
背景:
某客户系统在内存中泄露了数据库账号密码,连接成功后,利用xp_cmdshell成功进行任意命令执行。
使用Process Hacker对目标进程进行内存搜索
搜索相关关键字例如password等:
此处获取到泄露的数据库账号以及密码
此处再通过echoMirage发现系统的数据交互是与数据库直接交互,此处可获取到对应的数据库ip地址和端口,通过端口可以发现其为Mssql数据库
尝试进行连接:
此处可成功连接,获取数据库权限:
尝试进行xp_cmdshell:
此处发现存在xp_cmdshell
成功执行命令,获取系统权限
记一次未授权任意文件下载(0day)
背景:
某客户系统存在全站加解密,解密后发现疑似可控的文件读取输入点,后续成功进行任意文件读取。
系统存在前后端加密并且JS进行了混淆:分析后发现是DES的加解密:Key:数组转明文:
IV:
得到KEY和IV后,使用autoDecoder自动加解密插件:
KEY和IV转十六进制后填入:
此时数据包出现对应的插件选项:
这里说明使用插件进行自动化加解密正常
此时发现数据包中存在一个传入json后缀文件名的参数,并且此接口用于获取Web系统版本等相关信息,无需授权对其进行修改发送:
成功进行任意文件读取,后续发现该系统存在多个单位使用,为通用0day漏洞。
记一次RSAES-PKCS1-V1_5分块加密的FLASK代理SQL注入
背景:
某客户系统登录处存在SQL注入,由于其登录逻辑是取密码进行比对,无法使用万能密码进行登录绕过,而其登录为PKCS-V1_5加密,后续编写FLASK网页配合SQLMAP进行注入后发现其PKCS-V1_5加密只支持117长度,需要分块加密,后续优化脚本后成功进行SQL注入。
此处为加密的登录,但此处初步判断进行了延时
使用万能密码尝试:
此处因为存在用户枚举的原因,不存在的账号会显示”账号或密码错误”没有进入锁定的处理逻辑,而存在的就会进行锁定逻辑,而这里会发现如果没闭合和成功闭合是不一样的,说明此处是存在万能密码登录,但由于登录逻辑多了一层对比判断对应账号的密码是否匹配数据库中的数据,所以此处万能密码无法登录。
递增时间判断出确实存在时间盲注
此处为rsa加密:
编写Flask进行代理注入:
此时数据包输入的数据为明文,使用SQLMAP对数据包进行注入
成功识别出时间盲注
但是后续尝试跑数据库发现报错,排查发现是rsa输入的长度过长了
测试发现此加密方式只支持117字符加密:
所以需要用到分块RSA加密再拼接起来
FLASK代码:
from f ...
记一次Html页面触发接口的未授权SQL注入
背景:
在一次客户系统的渗透测试中,在未登录的情况下,接二连三构造url/参数访问后,其中触发了一个带参数的POST请求,后续绕过WAF成功实现SQL注入。
信息收集利用雪潼信息收集:此处发现其中一个API接口是html页面
数据包构造拼接域名访问后查看数据包:
访问第一个html后,自动触发了一个GET请求,此处使用插件在返回包中收集url信息,其中又有一个html此处继续拼接,构造id=1请求第二个html:
⭐此处又触发了第二个接口,是一个直接带参数的POST请求,且返回200状态码,也未提示未授权等错误
SQl注入此处尝试进行SQL注入
此处单数引号报错,双数引号正常,初步判断存在SQL注入使用SQLMAP:
此处应该是存在Oracle的时间盲注,但是存在WAF无法继续
手动测试,使用oracle时间盲注语句测试发现存在WAF拦截,不返回任何信息
WAF绕过尝试加入垃圾数据绕过:
成功回显,并且进行了延时将数据包保存到本地后,使用SQLMAP:
此处也是成功判断存在SQL注入,并且是前台未授权的SQL注入,后续不作展示
记一次Mitm绕身份校验到SQL注入+获取大量敏感数据
背景:
一次渗透测试的客户系统中没有其余身份校验字段,只有一个Token,并且Token由前端简单生成(表面上是Token实际上更多的是用于防重放,无实际的身份校验),即分析还原前端Token算法,即可绕过身份校验,执行任意操作。
逆向分析数据包中存在Time和Token
一旦以上header中Token被使用过,直接进行重放会直接返回一个状态码为200但响应为空的数据包。
逆向JS分析关键算法:
Time为现行时间戳,即Token为http拼接(http和现行时间戳)的MD5的值
Mitm脚本编写/调试编写Mitm脚本:
from mitmproxy import http, ctximport hashlibimport timeimport jsonimport reclass EnhancedTokenUpdater: def __init__(self): self.reader_no_md5 = "" self.last_reader_no = "" self.tar ...
记一次从AES加解密到除零报错盲注的SQL注入
背景:某客户系统存在AES加密,利用autoDecoder插件实现了自动加解密后发现了一处order by参数可控,由于系统无回显具体报错信息等信息,后续选择使用除零报错的盲注方法成功实现SQL注入。
系统数据包为请求响应加密:
前端JS逆向:搜索关键字encrypt进行断点:
控制台打印出key和iv:
此处得到key和iv,均为同一个值,且为数组形式,转为明文:
这里用到autoDecoder插件:
测试可正常加解密
这里在burp的proxy窗口也是自动解密成明文,这里发现一个oderBys的参数并且可控此处先换成数字判断字段数:
此处可22正常回显,23报错,初步判断此处参数可控并且存在order by注入
这里将desc换成1依旧正常回显,但明显长度不一致了,但说明了此处可控
使用exp()函数判断数据库:这里exp(709)和exp(710)都报错,正常来说exp(709)是正常回显,说明此处不是Mysql数据库
这里exp(290)正常回显,exp(291)报错,说明该系统为Oracle数据库因为不回显报错语句,此处只能盲注,下面使用除零盲注判断用户名长度:
Pay ...
记一次基于AES-CBC+RSA(PKCS1_v1_5)+HMAC-SHA256的加解密
背景:某客户系统存在多种算法混合加密以及签名校验,记录分析过程。
Rsa公钥为st(已省略):MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAIVwAZ2E+O7qVmGPrBrVFVfe93V1bkLrV9LTbEA0tqPLgZzg/BPYQs0j02LZZ……
RSA私钥为ct(已省略):MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAjoS58XGU1pP+SEiJPxe9tjNiTE3orbr5I2fHtWp64p5Xsa14Yw5apqIaBNL6ot7B+FMCN7514vQhdFOs+kKvKQIDAQABAkB08eJmhc4dGYlRpPvB4uhQJu/lLxTb4g3niJQugDZf11aF2R7pBEl3zPDkXbw9KE+DbvIA5U0IkzRpZg46nIAFAiEAy1WTzlY3qxrr+ioeQneFMQW6rJQ6……
AES的固定密钥和iv(已省略):ut = "……3690……", lt = "… ...
记一次Js-Forward绕双重签名校验
背景:
某客户系统,数据包存在header和body的双重签名校验,并且参数为乱序,即使还原了签名算法也可能使得签名的结果不一致,此时用到了Js-forward工具以转发明文参数和参数值,而此系统请求和响应调用不在一个函数中,如果还原加密的请求和响应需要插入两处,一个负责转发请求,一个转发响应,可实现绕过签名的同时抓取明文的请求和响应包(此处系统请求响应的数据包均为明文,即只需要抓取请求即可,不需要抓明文响应,但为了深入学习研究也一并实现了)
工具链接:
https://github.com/G-Security-Team/JS-Forward
数据包:
数据包的header和body均存在签名校验
断点:
此处为乱序跟数据包排序不一致:
如果还原算法,但排序为混乱,拼接生成的结果会不一致此处改用JS转发的思路(本质上是修改作用域,但转发更方便直观):找一个还没生成nonce和timestamp和sign的地方(因为如果生成了以上三个,再去改参数值将会报签名错误,所以要在还没生成之前拦截才有意义):
此处有个beforesign
此处使用js-forward工具插入转发 ...
记一次Mitm绕过某数防重放的另辟蹊径
背景:
某客户系统存在某数防重放攻击(URL中拼接一个参数值,用过的将会不能再次使用,以达到防重放效果),如果进行补环境/纯算,时间/技术成本较大,本文研究了一种市面上尚未存在的另辟蹊径的方法,利用Mitm捕获参数值,并且伪造返回状态码,不发送到目标服务器,并利用某种方法批量保存N组数据到本地,在后面渗透测试的时候自动替换掉Burp中数据包对应参数的参数值,达到数据包的唯一性,以绕过防重放(可能有人想到这种思路,但没人实现开源出来,这里应该算是原创首发吧?🤣),适用于只有URL参数校验的防重放的情况。
免责声明:
本文仅用于学习研究目的,禁止销售或任何直接、间接的营利行为,转载请注明出处,通过使用本文相关代码产生的风险与作者无关。
某数防护:
重放:
会出现400状态码
但是这里发现只要重新获取一个没被用过的参数(这里是xxxxxxXD,已脱敏)的值就不会出现400状态码,那么是不是可以利用某种方法先保存N组参数值,然后利用某种方法不发送到目标服务器记录,到后面进行替换已保存的参数值就可以绕过防重放了呢?
这里使用Mitm捕获参数值,并且伪造200状态码的响应达到不发送 ...
