JAVA代码审计之铁人下载系统 v1.0

照着前辈大佬的审计过程走了一遍,,还是很有收获的!代码是几年以前的,,而且也没有用到MVC框架,整个来说也不是很复杂,但是对于java入门,,我觉得够用了!

下载地址:http://down.chinaz.com/soft/25711.htm

图片[1]-JAVA代码审计之铁人下载系统 v1.0-安全小百科

这里环境搭建用的tomcat+mysql,安装包里有安装说明,不再赘述~

还有一点要说的就是由于没有设置默认打开页,因此我们在安装时需要手动输入安装的url,不然直接进入install目录可能会显示没有此页!

0x01 sql注入漏洞

由于省事,这里也没有登进后台,添加几个测试页面,,因此页面功能较少,慢慢来吧!

首页上有一个搜索的功能,这里常见的话就是反射型的xss漏洞和sql注入漏洞,下面跟进代码去看看代码的逻辑

进行搜索后,页面进行了跳转http://127.0.0.1:8080/liuxing/so.jsp

下面进入so.jsp源码中去看看怎么写的,这里由于eclipse的jad反编译插件一直没有安装成功,因此审计IDEA采用的是是sublime+jd-gui,一个用来看jsp源码,一个用来反编译class文件,因此java里面的功能几乎都是写在class文件内,这倒有点像php里mvc框架的class.php

这里可以看到name参数即为搜索参数,进入了Ruanjianguanli.getInstance().so()这个函数

根据刚才的描述,因为功能都写在class文件里,下面到jd-gui里去找找搜索的sql语句怎么写的

图片[2]-JAVA代码审计之铁人下载系统 v1.0-安全小百科

guanli目录下我们找到了Ranjianguanli这个class文件,跟进去找找~

图片[3]-JAVA代码审计之铁人下载系统 v1.0-安全小百科

100行找到了这个so函数,又调用了ruanjianDao这个函数,,那下面只能一步一步跟进去看看

图片[4]-JAVA代码审计之铁人下载系统 v1.0-安全小百科

跟进ruanjianDao,又看到这只是一个调用接口,并没有实际的sql语句,但是观察这个目录下的文件

图片[5]-JAVA代码审计之铁人下载系统 v1.0-安全小百科

可以看到这个RuanjianDao的sql语句就在下面这个RuanjianMySQL,下面跟进去找找sql语句

图片[6]-JAVA代码审计之铁人下载系统 v1.0-安全小百科

这里就找到了这里的sql查询,然后我们输入的参数为最后的string类型Name

那下面我们就应该重点关注Name这个参数如何进行传参的,但是如上图所示,,sql语句里面出现了很多?,这其实跟php的机制是类似的,那就是预编译机制,防止sql语句的语义被改变,,简言之就是防止sql注入的

图片[7]-JAVA代码审计之铁人下载系统 v1.0-安全小百科

进入下面的数据库查询,可以看到采用的是prepareStatement语句,,典型的预编译,因此这里不存在sql注入漏洞,其他的sql语句我也没找,因为根据经验来看,,如果有那就是大片大片的注入,,如果没有,,那可能大片大片的没有!

0x02 重安装漏洞

像php里安装后会生成一个lock文件,然后安装程序会判断lock文件是否存在,然后再决定是否进入安装流程,这个cms因为比较早,,因此存在一个重安装的问题

图片[8]-JAVA代码审计之铁人下载系统 v1.0-安全小百科

找到了安装的class文件,,没有任何逻辑判断,因此可以直接进入安装界面

图片[9]-JAVA代码审计之铁人下载系统 v1.0-安全小百科

 

0x03 后台管理员的session问题

在php或是asp中,有一类常见的漏洞就是后台的权限绕过,,这里漏洞问题比较多,,大抵都是管理员的cookie可以伪造,从而让任何人伪造成管理员进入后台,,这里尝试了一下,权限采用的jsp的session,不是明文存储,因此不太可能出现问题,关键是找一下判断源码吧!

图片[10]-JAVA代码审计之铁人下载系统 v1.0-安全小百科

图片[11]-JAVA代码审计之铁人下载系统 v1.0-安全小百科

在这里没找到重定向的语句,,那只有一个可能,就是写在class文件里了。。

写在了后台的Authfilter里(认证的过滤器,过滤器应该算是java web的一个特性吧)

图片[12]-JAVA代码审计之铁人下载系统 v1.0-安全小百科

可以看到这里是从session中提取admin属性,,然后进行判断,,无果,这里不存在漏洞!

 

0x03 存储型xss漏洞

回到前台,因为开放了会员注册的功能,因此我们可以尝试修改会员的个人资料,然后插入xss语句,最后我们到源码中看看参数是如何传递的!

图片[13]-JAVA代码审计之铁人下载系统 v1.0-安全小百科

这里只有一个邮箱可以修改,但是经过测试,,是存在xss漏洞的且没有任何语句的检查

图片[14]-JAVA代码审计之铁人下载系统 v1.0-安全小百科

下面回到源码里看看是如何入库的

图片[15]-JAVA代码审计之铁人下载系统 v1.0-安全小百科

value就是我们可控的邮箱参数,这里参数名为youxiang,下面去找找youxiang这个参数如何传递的

这里能看到进入了Userguanli.getInstance().Xiugaiyonghu2这个函数,这其实也是class文件,下面跟进这个class文件

这里跟刚才一样,又回到了这个Dao文件下的函数,根据刚才经验我们可以直接跟进到SQL的class文件里去看看代码逻辑

图片[16]-JAVA代码审计之铁人下载系统 v1.0-安全小百科

这里可以看到youxiang这个参数没有任何的过滤或是检查机制,,但是可惜的是采用的预编译,因此不存在sql注入,只能当做存储型xss漏洞

 

0x04 后台任意文件上传

这个洞其实有点鸡肋,,但是配合前面的存储型xss还是能进后台的

图片[17]-JAVA代码审计之铁人下载系统 v1.0-安全小百科

这里可以看到文件目录,然后跟进这个shangchuanwen2.jsp文件去看看代码

可以看到这里仍然没有一个具体的上传逻辑代码,因此只能到class文件里去找了

图片[18]-JAVA代码审计之铁人下载系统 v1.0-安全小百科

这里一下就找到了,shangchuan2和shangchuan3,这里其实代码是一样的,只是功能点可能不相同

下面跟进这个shangchuan2文件

代码有点长,,找其中的关键点进行分析

首先是一个黑名单机制,如果后缀为exe,asp等后缀,则会跳进wrong type这里

然后是一个正则匹配,这里逻辑上简直就是胡扯。。

String regExp = “.+\\(.+)$”;这里如果学过正则匹配的人就知道,四个转义字符,前一个转义字符为后一个转义,那么剩下来两个转义字符,然后前一个为后一个转义,那么最后的匹配样式则是******

也就是说这里的上传文件必须是c:\123.txt这一样,平常的单个文件名这里上传的话就是进入最后一个选择:无法上传

然后下面来分析文件后缀怎么形成的?

item.write(new File(getServletContext().getRealPath(“/”) + “wen/” + date + men));

这里给出了解释,文件名=data+men,data这里其实就是时间戳,men是我们上传文件名的后缀

那么文件名后缀我们可控,data时间戳又是可以修改的,,下面附上测试截图

图片[19]-JAVA代码审计之铁人下载系统 v1.0-安全小百科

可以看到这里res.sendRedirect(“../admin/left3/chenggong2.jsp?” + date + men);

实际上?后面的就是data+men,也就是说这就是文件名加文件后缀,这里data我设置的为1.jpg,文件名为c:\1.qwer

那么data+men=1.jpg+qwer=1.jpg.qwer

那么这里构造shell就应该是十分简单了吧,,只要保证后缀为jsp即可~

图片[20]-JAVA代码审计之铁人下载系统 v1.0-安全小百科

其他功能没有看,,上述如有不当之处,敬请指出~

最后附上参考链接:http://www.codersec.net/2016/12/%E9%93%81%E4%BA%BA%E4%B8%8B%E8%BD%BD%E7%B3%BB%E7%BB%9F%E4%BB%A3%E7%A0%81%E5%AE%A1%E8%AE%A1/

相关推荐: 利用aircrack-ng暴力破解无线网络

这个是利用aircrack-ng进行WPA2的破解,现在无线密钥机制由最老的WEP变为现在的WPA2,针对WEP只要能够拿到足够多的IVS,利用其头部相似的信息就可以还原出密码,不过针对WPA2这种方法则不行。 目前主流的破解无线网密码都是利用抓握手包来暴力破…

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论