记一次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状态码的响应达到不发送 ...
记一次从信息收集到获取任意用户权限
发表于|更新于
背景:某客户系统,登录只需要ID号以及对应的身份证的后四位,ID号可从社交媒体收集,只需要得到身份证后四位,其登录没有任何锁定限制,而四位数在可能的时间内可进行爆破,但存在验证码,无法直接直接使用burp实现,于是编写了脚本进行爆破,最终成功爆破获取用户权限。
登录框:
进行信息收集获取ID号:
此处发现了一份报告单,右上角有二维码,扫描后得到一串域名后面跟着一串jwt:
https://xxx.xxxxxx.xxx.cn/xxxxx/#/pages/xxxxxPdf?params=eyxxxxxx
base64解密后得到了ID号,后续进行身份证爆破
这里用到ddddocr识别验证码,而此处为svg的图像验证码,需要svg转png的库cairosvg,其库在windows上运行需要安装环境:https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer/releases/tag/2022-01-04
具体代码逻辑实现(部分已脱敏):
import requestsimport base64i ...
记一次FLASK绕签名校验联动SQLMAP获取系统权限(Getshell)
发表于|更新于
背景:
某客户系统存在签名校验,由参数以及其值拼接随机数和时间戳生成,并且数据包由multipart/form-data的表单形式传输,前端JS逆向完成后编写出了签名生成工具,但是一个个参数值复制替换到burp进行测试十分不方便,后续也是遇到了SQL注入,而手动注入比较麻烦,于是有了一键签名并发送数据包的想法,在SQLMAP的联动下快速进行SQL注入并且获取系统权限。
直接篡改数据包,会出现签名不正确:
此处单纯从数据包上看,存在随机数nonce和timestamp和签名校验sign
逆向分析JS:
其中nonce和timestamp的实现方法有了
打断点,发现是将参数以及其值和nonce和timpstamp排列后进行md5
编写脚本:
import hashlibimport timeimport randomimport jsonclass SignGenerator: def __init__(self): self.chars = "ABCDEFGHIJKLNMOPQRSTUVWSYZabcdefghijklnmopqrstuvws ...
公告
你又来偷偷看我啦( ´͈ ᵕ `͈ )◞♡
最新文章
标签
网站资讯
文章数目 :
46
已运行时间 :
1166 天
本站总字数 :
88.5k
最后更新时间 :
20 天前

