Tmail代码审计
配置环境:
前台:
1.xss:
前台搜索xss:
访问:vps:8088/tmall/
前台服务,搜索处存在xss。
用户信息修改xss:
提交后,后台管理处可以弹出xss。
之后我们可以利用xss接受平台接受信息。
不会利用。
2.文件上传:
用户个人信息修改中存在任意文件上传。
上传后的文件路径在:
/tmall/res/images/item/userProfilePicture/文件名
目录下
直接bp抓包后放行,没有过滤后缀:
默认密码是rebeyond
实现逻辑中没有对上传的文件后缀进行过滤。
后台:
1.登陆权限绕过:
在获取用户信息中,我们需要管理员进行登录操作,才能查看的,如下图:
将cookie删除了就会重定向登陆页面:
一般项目中都会在filter中做权限校验,要么在struct中做权限校验,查看filter拦截器:
主要获取当前url然后判断url中是否存在/admin/login
或者是/admin/account
目录,如果存在则放行,不存在校验权限。
因此我们可以知道存在/admin/login
或者是/admin/account
目录的都会被放行。
这个时候我们可以尝试使用../..
的方式去绕过。如/xxx/../aa/bb
这样的目录,tomcat接收到的实际路径是/aa/bb
,这就能够直接绕过filter的权限校验了。
因此我们可以构造payload:/admin/login/../../tmall/admin/user
,这样就会被解析成/tmall/admin/user
,这就可以绕过filter的校验了。
SpringBoot(Tomcat)和Shiro对URL处理的差异化
漏洞编号 | CVE-2020-1957 | CVE-2020-11989 | CVE-2020-13933 |
---|---|---|---|
影响版本 | Apache Shiro < 1.5.1 | Apache Shiro < 1.5.2 | Apache Shiro < 1.6 |
payload | /xxxx/..;/admin/ | /;/test/admin/page | /admin/;page |
Shrio 处理结果 | /xxxx/.. | / | /admin/ |
SpringBoot 处理结果 | /admin/ | /admin/page | /admin/;page |
这表中对于CVE-2020-1957
我们的路径是/xxx/..;/admin/
,那么shiro实际获取的参数是/xxxx/..
,而springboot获取的实际参数是/admin
,这样我们就饶过了shiro层,从而路由到springboot对应的controller层了,这样就绕过了权限校验。
2.查询sql注入:
一般的springboot都可能会存在的注入点:
- order by
- like
like预防的措施是concat('$',参数,'$')
选择文件掩码为*.xml
,然后搜索${
为未预编译的。
往上查找:
查找到对应的controller:
找到orderby字段是可控的。
可以直接上sqlmap:
使用-p
指定orderBy
参数
1 |
|
还有很多的注入点,方法类似,主要是从dao层网上查找,需要注意的是orderby字段是否是可控的。
3.管理员头像文件上传:
和前台一样。
但是这里需要知道的是正常来说,Springboot项目是不能够解析JSP文件的,这里能够解析,是因为引入了jstl和jasper依赖。所以,对于前后端分离的springboot项目,即使上传了马子,也没办法解析。
4.fastjson组件漏洞:
查找到使用fastjson的地方,搜索json.parse
payload如下:
1 |
|
成功收到dns:
但是以上payload只能证明fastjson出网,无法判断fastjson是否存在反序列化漏洞,因为最新的打了补丁的fastjson也是能发起DNS请求的。这是很多新手,误以为能DNS出网,就认为存在fastjson漏洞,这是不正确的。
5.log4j2漏洞:
全文搜索logger.
在文件上传中可以找到:
dnslog检测:
本地使用工具:
1 |
|
然后传入参数:
1 |
|
即:
1 |
|
vps上监听5555端口
重新发送数据包