随笔 - 51  文章 - 0  评论 - 4  阅读 - 19287

CTFer成长记录——CTF之Web专题·19强网杯—随便注

一、题目链接

https://buuoj.cn/challenges#[%E5%BC%BA%E7%BD%91%E6%9D%AF%202019]%E9%9A%8F%E4%BE%BF%E6%B3%A8

二、解法步骤

  本题考察的是堆叠注入:堆叠注入原理就是通过结束符同时执行多条sql语句;例如php中的mysqli_multi_query函数与之相对应的mysqli_query()只能执行一条SQL所以要想目标存在堆叠注入,在目标主机存在类似于mysqli_multi_query()这样的函数,根据数据库类型决定是否支持多条语句执行。总之,堆叠注入的触发条件很严格

  输入:1进行常规查询。

同时用order by  2,可以得出共有两列;但是本题过滤了select ,delete等关键字,要想获取数据库可以用show databases,

  结合堆叠注入的特性,构造payload:1';show databases;# 这里第一个分号表示正常查询结束,第二个分号是我们注入的sql语句结束,同时结尾仍然用#注释。

  

  可以发现爆出了许多数据库;接下来试试能不能爆表:同样用show tables

  

  114514(警觉!)说不定flag就在这表里,现在用show columns  from `1919810931114514`,查询表里的列。PS:这里查数字类型的表时,需要用反引号括起来。

查询该表:

  最后就差查数据了,查数据只能用select,但是如果直接用:1';select * from`1919810931114514`;#会发现提示select被过滤。绕过方式可以选择设置一个变量,让它的值变成该语句的16进制,最后用prepare ···· from ·····   ,execute 语句执行。

  设置变量:SeT@a=

  sql语句的十六进制:0x73656c656374202a2066726f6d20603139313938313039333131313435313460 (把select flag from ` 数字 `转换成16进制)

  语句执行:prepare execsql from @a;execute execsql;#

  完整payload:1';Set@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;#

  得到flag:

  最后得到flag。

三、总结

  本题能想到堆叠注入就挺难的,对select过滤处理方法也要知道;总体难度较大,目前就当增长见识了。

posted on   MiracleWolf  阅读(127)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示