2023TKKCTF——Write up
⚠:如果需要本次比赛源代码的可以私聊找我要。本篇wp主要面向观众是新成员,用语会比较口语化,如有不严谨的地方还请见谅 WEB easy_SQL 拿到题第一步先审计代码,这里过滤只有一个clean函数,按照常规有两种解题思路 1.在查pass的地方绕过,在name后输入管理员账号即可。但问题就是,我们现在并没有管理员账号,因此没法通过这个方法定位到我们要查的地方。因此这个方法就先排除 2.、在name或pass里插入联合查询,以此来达到读库的目的。但实际操作种碰到问题不仅和上面第一种思路的问题有类似情况,而且还会出现单/双引号被clean过滤的情况 怎么办呢?我们先把query里的sql语句提取出来做一下研究 SELECT * FROM users WHERE name='".$username."' AND pass='".$password."'; 假设我现在输入的username=admin,password=123,那么就是 SELECT * FROM users WHERE name='admin' AND pass='123'; 这里我们先尝试把AND pass删掉,在username输入\ SELECT * FROM users WHERE name='admin\' AND pass='123'; 为什么这样就叫把AND pass删掉呢?因为原本在admin后的引号被斜杠转义成了内容,丧失了原先用来“框住”字符串的功能,而这个功能已经被pass=后面的引号给替代。此时我们只要在password输入or 1=1 -- ,SQL语句变成 SELECT * FROM users WHERE name='admin\' AND pass='or 1=1 -- 123'; 123';就会被注释掉,而这句语句where后面的条件因为or 1=1而100%成立,因此就会执行SELECT * FROM users,即可拿到flag。 这里有个细节需要注意,就是--后面是要带个空格的,一些浏览器会把URL中最后一个空格删掉,因此要手动补一个%20 时光密钥 PS:本题由于容器实例时间校对有错,因此判断登录用的时间戳比真实unix时间戳多了大约15秒。做出来的成员应该是运气比较好,多算了二十几秒就开始发包尝试 打开实例,根据提示,先算出合适的时间戳,再用burp抓包修改一下即可 在网上找到现在的时间戳 burp抓包 为了方便操作,我们把数据包发到repeater 更新一下时间戳,预估个比当前时间戳多20到25秒左右的时间放到password,不断点击send直至出现下面所示的cookie即可 根据所给提示里的博客可知,base64解码该cookie即可获得下面结果 将gift值后面的东西进行base32解码即可 ...