1.sql注入环境搭建

phpstudy下载安装
sqli-labs下载解压,将解压后文件放在www文件下

关于mysql命令在win10命令框中无法使用
配置环境变量可使系统在任何路径下都能找到mysql命令。需找到MySQL的安装目录,一般安装目录下会有bin文件夹,如我配置文件中basedir为E:/phpstudy_pro/phpstudy_pro/Extensions/MySQL5.7.26/,则bin目录为E:/phpstudy_pro/phpstudy_pro/Extensions/MySQL5.7.26/bin。右键点击“此电脑”,选择“属性”,在左侧面板中点击“高级系统设置”,在弹出的“系统属性”窗口中,点击“环境变量”。在“系统变量”列表中,找到“Path”变量,点击“编辑”,点击“新建”,将MySQL的bin目录路径添加进去,然后点击“确定”保存设置。
接着在管理员权限的命令框中,切换到bin目录下
cd E:/phpstudy_pro/phpstudy_pro/Extensions/MySQL5.7.26/bin
执行
mysqld --install
将mysql安装为服务,此后就可以在命令框中使用mysql命令

2.sql注入靶场使用

启动phpstudy,在首页启动nginx服务,启动mysql服务
本人将靶场文件导入www/下时重命名为了sqli,在浏览器地址栏中输入“localhost/sqli”即可访问该sqli注入靶场。

常用mysql函数:

mysql的五个截断函数:substr、substring、left、right、mid
subtr:字符串截断1型,图例为“截断从root中第一位字符开始截断,截断一个字符”
在这里插入图片描述

substring:字符串截断2型,与1型功能相同
left:从左截断,从左往右截断root,截断一位字符
left截断

right:从右截断,从右往左截断root,截断一位字符
从右截断

mid:与第一种相同
ascii:ASCII码转换
在这里插入图片描述
length:求长度
length求长

简单mysql语句:select if(now()=sysdate(),database(),user());

如果当前时间=当前时间,显示databases,否则显示user
简单语句1000000

mysql库中几个重要内容

information_schema:mysql安装时系统自动创建的一种索引,在其下有以下几个重要的表

SCHEMATA:记录数据库的名称
TABLES:记录所有表名,包含数据库名
COLUMNS记录所有列名,可以查询到数据库名和表名

mysql联表查询:union、join、

union:将表与表联在一起,要求列数相同,渗透未知列数的时候,用order by(排序)函数,使用时默认倒序排序,
当查到不存在的列数时可以侧面得知表单列数
join:查询两张表中的内容联在一起

3.sql注入的三种方式

例1:Less-1

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Less-1 **Error Based- String**</title>
</head>

<body bgcolor="#000000">
<div style=" margin-top:70px;color:#FFF; font-size:23px; text-align:center">Welcome&nbsp;&nbsp;&nbsp;<font color="#FF0000"> Dhakkan </font><br>
<font size="3" color="#FFFF00">


<?php
//including the Mysql connect parameters.
include("../sql-connections/sqli-connect.php");
//此处include包含sql-connections.php、sqli-connect.php两个文件,相当于将两个文件复制过来贴在这里
error_reporting(0);
// take the variables 
if(isset($_GET['id']))
//isset,检测参数是否被声明,此处检测参数是否为真(被输入)
{
$id=$_GET['id'];
//get传参id
//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
//打开result.txt文件,以‘a’追加的形式打开
fwrite($fp,'ID:'.$id."\n");
//写入输入的id
fclose($fp);
//关闭文档
// connectivity 
// SELECT * FROM users WHERE id='1' #' LIMIT 0,1


$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
//连接数据库成功后查询user表中id为输入传参的一行数据
//此处我们要让写入的id逃出该语句的单引号,可以通过注释的方式
//将后面的语句注释掉来使得传入的内容逃逸出单引号
//注释方法1-- ,2#,3/**/,
//因为有限制WHERE id=..所以限制了查询内容
// $sql="SELECT * FROM users WHERE id='0' union select 1,2,3 -- ' LIMIT 0,1";
// $sql="SELECT * FROM users WHERE id='0' union select 1,2,3 # ' LIMIT 0,1";
$result=mysqli_query($con1, $sql);
$row = mysqli_fetch_array($result, MYSQLI_BOTH);

	if($row)
	{
  	echo "<font size='5' color= '#99FF00'>";
  	echo 'Your Login name:'. $row['username'];
  	echo "<br>";
  	echo 'Your Password:' .$row['password'];
  	echo "</font>";
  	//将查询到的数据赋值交于前端显示
  	}
	else 
	{
	echo '<font color= "#FFFF00">';
	print_r(mysqli_error($con1));
	echo "</font>";  
	}
}
	else { echo "Please input the ID as parameter with numeric value";}

?>
</font> </div></br></br></br><center>
<img src="../images/Less-1.jpg" /></center>
</body>
</html>

select * from  users union select user(),database(),version();
//这是我们要让数据库执行的语句
//为此我们从地址栏传入的语句应为如下语句
?id=-1’ union select user(),database(),vaersion()
//id为-1是因为代码限制了查询内容为传入id的内容,联表查询出的
//结果无法显示,故只要穿入一个不存在的id即可
//该语句中user()可以省略,因为前端代码不展示该数据
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐