1.简介(开场废话)
攻击者可通过存在漏洞的页⾯直接获取到数据库配置信息。如果攻击者可直接访问数据库,则可直接获取⽤户数据,甚⾄可以直接控制数据库服务器。2.影响范围
漏洞涉及范围包括不限于8.0、9.0版
3.搭建个环境(其实环境不重要,信息泄露这个东西)
4.已知漏洞点出现在/mobile/dbconfigreader.jsp这个页⾯(开始胡乱分析。。。有错还希望师傅们指出来)
直接看源代码好了,搜了⼀圈没找到8.0的安装包,我太难了,借张图过来,嘿嘿嘿
⾸先在这个页⾯获取数据库⽤户名密码,然后存储到变量sb中,再进⾏转换,进⾏DES加密有了源码,我们编译⼀下源码,断点调试,康康哪⾥出现了问题
<%
String conStr= \"12345\"; //Prop.getPropValue(\"weaver\
String conUser= \"12345\"; //Prop.getPropValue(\"weaver\;String conPsw= \"12345\"; //Prop.getPropValue(\"weaverl\String loginType=\"sqlserver\"; //Prop.getPropValue(\"weaver\//上⾯应该是从别的页⾯取数据过来,我这⾥直接定死StringBuffer sb=new StringBuffer();
//new ⼀个StringBuffer类对象
//StringBuffer和StringBuilder 之间的最⼤不同在于 StringBuilder 的⽅法不是线程安全的(不能同步访问)//由于 StringBuilder 相较于 StringBuffer 有速度优势,⼤多数时候还是⽤StringBuilder
String verb=\"url=\"+conStr+\//赋值操作
byte[] str=verb.getBytes();
//将字符串转化为字节数组byte[]
String keyString=\"1z2x3c4v5b6n\"; //DES的加密密钥
System.out.println(verb);//url=12345,user=12345,password=12345,Logintype=sqlserverbyte[] keyByte=keyString.getBytes();
//创建⼀个密匙⼯⼚,然后⽤它把DESKeySpec对象转换成⼀个Secretkey对象DESKeySpec dks1=new DESKeySpec(keyByte);
SecretKey key=SecretKeyFactory.getInstance(\"DES\").generateSecret(dks1);Cipher cipher=Cipher.getInstance(\"DES\");cipher.init(Cipher.ENCRYPT_MODE,key);//DES加密操作
byte[] cipherText=cipher.doFinal(str); //System.out.println(cipherText.length);
ServletOutputStream sos=response.getOutputStream();System.out.println(cipherText);//[B@641a034dsos.write(cipherText);
//输出des加密后的字节流,为啥⽤输出流,这⾥⼈都傻掉了sos.flush();
//清空缓冲区数据sos.close();//关闭流%>
并且我这⾥报异常了,不知道为啥,好像是冲突了
看了下修补⽅案,似乎就是禁⽌访问/mobile/dbconfigreader.jsp这个页⾯4.exp及利⽤
github上有现成的脚本
主要还是对显⽰在页⾯上的字节流进⾏des解密,完事 参考⽂章:
因篇幅问题不能全部显示,请点此查看更多更全内容