Web_BUUCTF_WriteUp | [极客大挑战 2019]EasySQL

发布时间 2023-11-11 14:12:46作者: Guanz

题目

靶机界面

URL:http://86ae5adf-d39e-47dd-b3da-1ae895847925.node4.buuoj.cn:81/

分析

先在交互界面随便输入用户名和密码试试,界面显示如下:

此时的 URL 为 http://86ae5adf-d39e-47dd-b3da-1ae895847925.node4.buuoj.cn:81/check.php?username=admin&password=123
对多出的部分进行分析:

  • check.php .php 是 PHP 文件的扩展名。PHP 是服务器端脚本语言,说明该界面与数据库产生交互。
  • ? 用于分隔实际的 URL 和参数。
  • username=admin 包含输入数据的用户名。
  • & URL 中指定参数间的分隔符。
  • password=123 包含输入数据的密码。

可以看出我们输入的用户名 admin 和密码 123 都显示在 URL 中,在了解 GET 请求与 POST 请求后可判断浏览器采用的是 GET 请求,可能存在 SQL 注入漏洞。
尝试在输入数据后加入 ) " ' 三种常用闭合符观察返回的界面

  • 加入)"得到的界面:
  • 加入'出现报错:

根据报错情况可以判断输入数据的闭合符为单引号 '。接下来尝试输入一些永真的语句进行 SQL 注入,通过对用户名和密码输入万能密码 ' or 1 = 1,得到返回界面:

考虑是未对用户名后的 and password='' or 1 = 1'' at line 1 进行分隔,使其被服务并入判断,因此需要注释掉后面的部分,将用户名部分的输入改为 or 1 = 1 #,得到 flag。

Flag

flag{1bd61b7f-bd29-45cb-9def-42aa51b540e7}

参考

PHP-菜鸟教程
URL中的特殊字符 + % # & = ? /-拾破烂的-博客园
get请求和post请求的区别(全面讲解)-_处女座程序员的日常-CSDN
POST请求和GET请求如何传递和接收解析参数-码农小胖哥-腾讯云开发者社区
SQL注入原理及如何判断闭合符-大大大蜜蜂-CSDN
SQL注入:#和--的作用-不解风情的帅帅男-博客园