Java代码审计复现-铁人下载系统 v1.0

  • A+
所属分类:代码审计



Java代码审计复现-铁人下载系统 v1.0

环境搭建

导入数据库

create database liuxing;

use liuxing;

source  liuxing.sql;

Java代码审计复现-铁人下载系统 v1.0

设置字符集为GBK

show tables;  

Java代码审计复现-铁人下载系统 v1.0

访问安装文件路径

http://127.0.0.1/install/index.html

填好相关参数即可。

Java代码审计复现-铁人下载系统 v1.0

后台管理地址

http://127.0.0.1/admin/index.jsp

默认管理员账号密码

admin/admin

Java代码审计复现-铁人下载系统 v1.0

漏洞分析

安装漏洞 ?

打开文件夹,发现安装成功后, 没有删除安装页面 ,很有可能存在重安装漏洞。

Java代码审计复现-铁人下载系统 v1.0

安装路径为

http://127.0.0.1/install/index.html

跟一下/install/index.html

Java代码审计复现-铁人下载系统 v1.0

再继续跟进install.jsp

Java代码审计复现-铁人下载系统 v1.0

继续跟进install_setup.jsp

Java代码审计复现-铁人下载系统 v1.0

通过import导入了要使用的类 liuxing.util.Install,继续跟进

Java代码审计复现-铁人下载系统 v1.0

安装完成后会通过updateConfig函数将 db_an 设置为no,

Java代码审计复现-铁人下载系统 v1.0

通过install_setup.jsp进行安装时,对db_an进行了判断,所以即使install页面没有删除 ,但是已经不能进行重复安装了。

SQL注入 ?

从前台开始,看见搜索框,点击“搜索”,跳转到so.jsp

Java代码审计复现-铁人下载系统 v1.0

跟进一下so.jsp

Java代码审计复现-铁人下载系统 v1.0

发现存在prepareStatement, 注入是基本凉凉。这里采用了预编译,允许数据库已参数化的形式进行查询,当运行时动态地把参数传给PreprareStatement时,即使参数里有敏感字符如 or '1=1',数据库也只是会作为一个参数一个字段的属性值来处理,而不会作为指令,所以,SQL注入基本无戏!看看其他有sql查詢的的地方:

Java代码审计复现-铁人下载系统 v1.0

结果都是像这样的

Java代码审计复现-铁人下载系统 v1.0

像这样的

Java代码审计复现-铁人下载系统 v1.0

有很多'?', 这其实是占位符, 预编译机制的需要。

存储型XSS

先注册一个账号,看看修改资料的功能点

Java代码审计复现-铁人下载系统 v1.0

尝试闭合一下前面的>的,查看源码发现payload没有被转义

""><script>alert(don9sec)</script>

Java代码审计复现-铁人下载系统 v1.0

然后再次点开修改资料,成功弹窗

Java代码审计复现-铁人下载系统 v1.0

存储型xss一枚。

看一下漏洞原理,根据关键字'youxiang',跟一下传参过程

Java代码审计复现-铁人下载系统 v1.0

跟进Userguanli.getInstance().Xiugaiyonghu2()

Java代码审计复现-铁人下载系统 v1.0

继续跟userDao.Xiugaiyonghu2,进到UserDaoMysql文件,可以看到数据库与资料修改功能点的交互

Java代码审计复现-铁人下载系统 v1.0

可以看见,youxiang这个参数没有经过任何过滤机制或判断机制,直接就拼接到sql语句中,存到数据库。

Java代码审计复现-铁人下载系统 v1.0

SQL注入

登录后台,开启代理后对管理员的功能都测试一遍,顺便抓包分析,再用户管理功能点存在一处时间盲注。

Java代码审计复现-铁人下载系统 v1.0

抓包

Java代码审计复现-铁人下载系统 v1.0

sqlmap跑一下

Java代码审计复现-铁人下载系统 v1.0

存在时间盲注,跟一下源码 delete.jsp

Java代码审计复现-铁人下载系统 v1.0

往上回溯 函数shanchuyonghu

Java代码审计复现-铁人下载系统 v1.0

delete语句中没做任何过滤,直接拼接参数

delete from user where id in('3') or if(ascii(substr(user(),1,1)) < 72,0,sleep(1));delete from user where id in('3'or if(ascii(substr(user(),1,1)) < 72,0,sleep(5));delete from user where id in('3'or if(ascii(substr(user(),1,1)) < 72,0,sleep(10));

Java代码审计复现-铁人下载系统 v1.0

文件上传

在“其他管理” -> “添加友情链接”处发现一处文件上传的接口

Java代码审计复现-铁人下载系统 v1.0

对应的文件为shangchuanwen3.jsp, 主要看这两段代码:

Java代码审计复现-铁人下载系统 v1.0

开发者意图

黑名单机制: 如果后缀为exe,asp等后缀,则会跳进wrong type

正则匹配 :

String regExp = ".+(.+)$";

四个转义字符,即1为2转义,3为4转义,最后为;  也就是说文件名必须是带路径的形式,如xxxx。

Java代码审计复现-铁人下载系统 v1.0

这一段代码表示文件名的生成,时间戳+.gif, 估计没戏了

Java代码审计复现-铁人下载系统 v1.0

此条路径先放着,看看shangchuanwen.jsp和shangchuanwen2.jsp,本以为代码会差不太多,但是在

shangchuanwen2.jsp文件后缀竟然可控

Java代码审计复现-铁人下载系统 v1.0

这里文件名为

pathname=date+men

m.group(1)的结果根据正则表达式来的,比如我们输入的filename="test.jsp",那么group(1)则为.jsp

而date为时间戳,也是可控的,所以这里完全可以构造想要上传的文件;

wen/,上传的文件所在路径

上传test.jsp, 打印字符串“don9sec”

Java代码审计复现-铁人下载系统 v1.0

文件名为时间戳+.jsp, 浏览器成功访问

Java代码审计复现-铁人下载系统 v1.0

上传哥斯拉的马子

Java代码审计复现-铁人下载系统 v1.0

上传成功。

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/

本文始发于微信公众号(don9sec):Java代码审计复现-铁人下载系统 v1.0

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: