Web_BUUCTF_WriteUp | [极客大挑战 2019]EasySQL
题目
靶机界面
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注入:#和--的作用-不解风情的帅帅男-博客园