龙空技术网

SQL实操 | 常见的注入环境搭建

爱数据网 343

前言:

而今咱们对“mysqlextractvalue”都比较关切,姐妹们都需要分析一些“mysqlextractvalue”的相关文章。那么小编在网上网罗了一些关于“mysqlextractvalue””的相关内容,希望咱们能喜欢,看官们快快来学习一下吧!

本篇文章主要讲解6个SQL的注入环境搭建,都是根据笔者练习时所记录的代码,搭建SQL注入环境的小伙伴可以根据这个内容进行练习。

01 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;//返回报错信息

02 常规回显注入

回显注入类型是指我们的查询内容会被应用回显到页面中;一般情况下回显注入回利用UNION联合函数来测试是否存在注入“ union select …… ”

<?phpecho '<h1>';echo 'SQL常规回显注入环境';echo '</h1>';$conn=mysqli_connect('127.0.0.1', 'root', 'root');// 连接mysqlif (!$conn){//判断连接是否成功 echo '连接MySQL发生错误:'.mysqli_error($conn);}else{ echo '成功连接MySQL!';}echo '<hr>';// mysqli_select_db -- 查询库,or die(str) -- 上一个函数执行错误则输出strmysqli_select_db($conn, 'text') or die ("无法正确连接到数据库!");// mysqli_query -- 执行sql命令// set names utf-8 -- 写入数据库采用的编码(utf-8)mysqli_query($conn, 'set nams utf-8');

// 接收参数textif(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; -- +

03 报错注入

报错注入类型是泛指应用页面不返回内容数据,无法从回显结果获得信息;但是一般应用都会保留SQL的查询报错mysqli_error 通过“extractvalue UpdateXml foot”等函数来查询,但是无法查询到结果并会通过报错的方式返回结果。

<?phpecho '<h1>';echo 'SQL报错注入环境';echo '</h1>';$conn=mysqli_connect('127.0.0.1', 'root', 'root');// 连接mysqlif (!$conn){//判断连接是否成功 echo '连接MySQL发生错误:'.mysqli_error($conn);}else{ echo '成功连接MySQL!';}echo '<hr>';// mysqli_select_db -- 查询库,or die(str) -- 上一个函数执行错误输出strmysqli_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); -- +

04 盲 注

盲注类型泛指无法利用回显测试等情况,进行的一种sql注入测试方法。

盲注主要分为两种:

布尔盲注:通过判断页面响应确定是否正确的布尔sql拼接。时间盲注:通过sql查询的时间延迟sleep函数来测定构造的布尔sql是否成立。

<?phpecho '<h1>';echo 'SQL常规盲注环境';echo '</h1>';$conn=mysqli_connect('127.0.0.1', 'root', 'root');// 连接mysqlif (!$conn){//判断连接是否成功 echo '连接MySQL发生错误:'.mysqli_error($conn);}else{ echo '成功连接MySQL!';}echo '<hr>';// mysqli_select_db -- 查询库,or die(str) -- 上一个函数执行错误则输出strmysqli_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返回结果为第二类情况则适用时间盲注,通过时间延迟的方式来判断布尔结果并不断的猜解*/?>

1. 布尔盲注测试

' or left(database,2)='te'; -- +

2. 时间盲注测试

if(ascii(substr(database,1,1))='t',1,sleep(10)); -- +

05 宽字节注入

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

<?phpecho '<h1>';echo 'SQL宽字节注入环境';echo '</h1>';$conn=mysqli_connect('127.0.0.1', 'root', 'root');// 连接mysqlif (!$conn){//判断连接是否成功 echo '连接MySQL发生错误:'.mysqli_error($conn);}else{ echo '成功连接MySQL!';}echo '<hr>';// mysqli_select_db -- 查询库,or die(str) -- 上一个函数执行错误则输出strmysqli_select_db($conn, 'text') or die ("无法正确连接到数据库!");// mysqli_query -- 执行sql命令// set names utf-8 -- 写入数据库采用的编码(utf-8)mysqli_query($conn, 'set names gbk');// 接收参数textif(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>';}?>

06 登录框注入

登录框注入泛指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'; -- +

End.

作者:Mirror王宇阳

来源:博客园

零基础入职数据分析就业班

课程的形式主要是“直播+录播”

报名专享:课程项目作业+1v1班主任监督学习+爱数据学院学员专属网站+班级答疑群

课程结束后能熟练掌握SQL、Python、Excel、PPT等工具

适合人群:

1.转行(岗位相关,专业相关、对数据分析感兴趣)

2.从事数据分析工作,但是需要提升技能以及增加实战经验

3.应届毕业生入职数据分析

标签: #mysqlextractvalue