SQL Server数据库
测试连接数据库是否成功
SQL Server的PHP扩展
由于这边使用的是小皮面板,PHP版本为7.3.4nts版本
下载Windwos7.3扩展文件(这里的版本号一定要对得上)
https://objects.githubusercontent.com/github-production-release-asset-2e65be/19043988/23d51580-6213-11eb-897e-e3aa6e1ac680?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20250625%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250625T072816Z&X-Amz-Expires=1800&X-Amz-Signature=2df203a2e38602acd1ae39694310ec4359023a7ac1ead47cf546592c7fbf7b22&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3DWindows-7.3.zip&response-content-type=application%2Foctet-stream
下载成功后把这两个文件拉到该目录下:C:phpstudy_proExtensionsphpphp7.3.4ntsext
对应的修改C:phpstudy_proExtensionsphpphp7.3.4nts目录下的php.ini文件
extension=php_pdo_sqlsrv_73_nts
extension=php_sqlsrv_73_nts
成功添加扩展文件后重启小皮面板服务即可
创建数据库数据
-- 1. 创建测试数据库
CREATE DATABASE test;
GO
-- 2. 使用测试数据库
USE test;
GO
-- 3. 创建用户表(针对字符型注入优化)
CREATE TABLE users (
id VARCHAR(50) PRIMARY KEY, -- 改为字符型以支持字符型注入
username NVARCHAR(50) NOT NULL,
password NVARCHAR(100) NOT NULL,
email NVARCHAR(100),
is_admin BIT DEFAULT 0,
created_at DATETIME DEFAULT GETDATE()
);
GO
-- 4. 插入测试用户数据(使用字符型ID)
INSERT INTO users (id, username, password, email, is_admin) VALUES
('1', 'admin', '5f4dcc3b5aa765d61d8327deb882cf99', '[email protected]', 1),
('2', 'user1', '5f4dcc3b5aa765d61d8327deb882cf99', '[email protected]', 0),
('3', 'test', '098f6bcd4621d373cade4e832627b4f6', '[email protected]', 0),
('4', '张伟', 'e10adc3949ba59abbe56e057f20f883e', '[email protected]', 0),
('5', '李娜', 'd8578edf8458ce06fbc5bb76a58c5ca4', '[email protected]', 0);
GO
编写靶场PHP源码
在WWW根目录下创建sql.php,复制以下内容进去即可
header('Content-Type: text/html; charset=utf-8');
$connectionInfo = array(
"Database" => 'test',
"UID" => 'sa',
"PWD" => '123456',
"CharacterSet" => 'UTF-8'
);
$conn = sqlsrv_connect('127.0.0.1', $connectionInfo);
if($conn === false) {
die(print_r(sqlsrv_errors(), true));
}
$id = isset($_REQUEST['id']) ? $_REQUEST['id'] : '';
if(!empty($id)) {
// 字符型注入测试点
$sql = "SELECT * FROM users WHERE id = '" . $id . "'";
$data = sqlsrv_query($conn, $sql);
if($data === false) {
die(print_r(sqlsrv_errors(), true));
}
echo "<h2>查询结果:</h2>";
echo "<table border='1'><tr><th>ID</th><th>用户名</th><th>密码</th><th>邮箱</th><th>管理员</th><th>创建时间</th></tr>";
while($row = sqlsrv_fetch_array($data, SQLSRV_FETCH_ASSOC)) {
echo "<tr>";
echo "<td>".$row['id']."</td>";
echo "<td>".htmlspecialchars($row['username'])."</td>";
echo "<td>".htmlspecialchars($row['password'])."</td>";
echo "<td>".htmlspecialchars($row['email'])."</td>";
echo "<td>".($row['is_admin'] ? '是' : '否')."</td>";
echo "<td>".$row['created_at']->format('Y-m-d H:i:s')."</td>";
echo "</tr>";
}
echo "</table>";
} else {
echo "<h2>字符型SQL注入测试</h2>";
echo "<form method='get'>";
echo "用户ID: <input type='text' name='id'>";
echo "<input type='submit' value='查询'>";
echo "</form>";
}
sqlsrv_close($conn);
测试靶场网站
打开网站
输入框输入内容:1
id追加单引号
再次追加单引号
靶场环境搭建结束。
原文始发于微信公众号(湘安无事):sql server注入靶场搭建
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论