我再没见过 像你一般的星空~
年
新
乐
快
...
记一次Order by过滤括号的Case When盲注到利用变量进行堆叠注入
背景:
背景: 某客户系统存在SQL注入,但是存在括号过滤,后续进行绕过成功证明存在SQL注入风险,最后堆叠注入提升危害。
数据包中存在sort参数:
并且此处是作为order by参数传入:
此处在末尾随意加入字符,提示不存在对应的字段,说明此处可控可拼接:
先尝试exp临界注入:
此处发现整个order by不见了
不断测试发现此处是检测是否存在括号,从左到右匹配左括号和右括号,如果符合条件则关闭orderby排序:
即需要构造不存在括号的注入
此时先找出两个存在的字段:
此处使用account_code和account_mobile进行true或flase的判断
使用CASE WHEN进行盲注,先看True的情况:
account_code and CASE WHEN 1=1 THEN account_code ELSE account_mobile END
再看False的情况:
account_code and CASE WHEN 1=2 THEN account_code ELSE account_mobile END
此时排序发送变化,证明sql语 ...
记一次表别名可控注入
背景:
某客户系统存在SQL注入,构造payload成功进行SQL注入。
数据包中尝试SQL注入,发现存在字段名白名单:
value1处使用了预编译:
柳暗花明,此处疑似可控:
此处证明可控点为alias处,即表别名可控:
存在报错回显,所以这里优先使用报错注入:
核心payload:
select extractvalue(1,concat(0x7e,version(),0x7e))
此处s前面有三个左括号,所以需要在核心payload上基础上最后使用三个右括号闭合
select extractvalue(1,concat(0x7e,version(),0x7e)))))
由于是新增的一个and条件,所以要还原原始的样子,在最后补一个and (((s
select extractvalue(1,concat(0x7e,version(),0x7e))))) and (((s
成功执行报错注入回显数据库版本号
记一次内存数据库凭据泄露到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 = "… ...
