CTFlearn: Grid It!

题目来源:https://ctflearn.com/index.php?action=find_problem_details&problem_id=430

原题:

Grid It!

Can you bypass the security measures on the site and find the flag? I doubt it. http://web.ctflearn.com/grid

解题参考:https://github.com/terjanq/Flag-Capture/tree/master/Practice/CTFLearn/GridIt#grid-it---write-up-by-terjanq

点开题目给出的网站,可以看到一个登录页面。首先尝试能不能用SQL注入语句绕过验证。但是即使输入单引号网页还是可以正常运行。所以放弃用SQL注入绕过。在登录页面注册,进入网站中,看到页面中间有一个空白的框。我们可以在框的下方输入坐标而生成新的点。当前存在的点会列在框的下面,也有一个delete按钮可以供我们删除存在的点。

用Burp Suite截获并分析数据包。发现删除一个点的GET方法中有一个PHP序列对象:


我们可以尝试在序列中进行SQL注入。为了测试是否可以进行SQL注入,我们用curl进行测试。首先用正常的删除请求测试,在cookie中传入我们的SESSID:


命令没有任何返回,但是在浏览器中刷新我们可以看到这个点已经被删除了。

在ID字段后面加入注入语句:


我们在ID后面加上 “OR 1”,同时改变前面的长度。命令成功执行后同样没有返回任何东西,但是在浏览器上可以看到所有点都被删除了。这说明我们可以在序列中进行SQL注入。但是语句的执行不会有任何返回,所以我们将进行SQL盲注。

我们可以在ID的后面加上AND语句,后面通过条件判断来枚举出每一个字母是什么。比如我们可以构造如下的语句:

..ID=507868 AND Ascii(substring((SELECT table_name FROM information_schema.tables WHERE table_schema = database() LIMIT 0,1),1,1))>97

在这条语句中,我们判断当前数据库第一个表的第一个字符的ASCII码是不是大于‘a’。如果这个条件成立,ID所对应的点就会成功被删除,否则说明这个条件为假,即这个字符小于‘a’。我们可以进一步缩小这个字符所在的位置最后找到那个字符的值。用同样的方法,我们可以枚举出表中数据的值。如果手工枚举会用掉很多时间,我们可以写一个脚本来枚举。这个链接中的脚本可以参考:https://github.com/terjanq/Flag-Capture/tree/master/Practice/CTFLearn/GridIt#grid-it---write-up-by-terjanq

经过枚举,我们可以找到user表中admin用户的密码。用这个密码登录网页就可得到flag值。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 8,066评论 5 115
  • 去往陌生城市的陌生女人 猛然回头,怕是要错过什么,失去一个人,失去一次恋爱的机会。许多不经意的偶然会被花言巧语修饰...
    导演张升志阅读 216评论 0 0
  • CSS 全称是 Cascading Style Sheets(层叠样式表) 样式,就是html页面显示出来的样子,...
    姚小帅阅读 431评论 0 1

友情链接更多精彩内容