游戏顶级黑客(黑客电脑游戏)

游戏顶级黑客(黑客电脑游戏)

黑客接单hacker2022-08-20 0:30:231981A+A-

写在前面的话

本系列教程仅以学习教育为目的,请不要用你在本教程中学到的东西去测试其他的站点,本人对此类行为概不负责。

前情提要

在《让你在游戏中变成高端黑客:SQL注入攻击全教程系列-开始游戏》中,我们介绍了有关SQL注入的一些基础知识,并且将项目的PHP代码文件安装到了我们的电脑里面,那么今天我们就以“基于错误信息的SQL注入”开始我们的系列闯关课程。

什么是SQL注入攻击?

SQL注入攻击是一种通过网站来攻击后台数据库的技术。作为一种代码注入技术,SQL注入利用的是网站软件中存在的安全漏洞。

Lesson 1:基于错误信息的SQL注入

打开localhost/sqli-labs-master/Less-1/index.php之后,你将会看到如下图所示的界面:

展开全文

界面中显示了“Welcome Dhakkan”," Dhakkan"是印度俚语,指的是“愚蠢的人”。好吧,欢迎你,小傻瓜...

根据界面提示,你需要输入一个ID作为参数,其ID为数字值。那我们按照提示输入:

?id=1

?id=1

按下回车之后,你会看到下图所示界面:

那么这一关我们就成功闯过啦!我们在URL地址后添加了一个参数,并将这个参数指向了数据库表中ID为1的记录,这样一来我们便得到了用户ID为1的用户名(Dumb)和相应的密码(Dumb)。你也可以尝试其他的数字,例如?id=2或?id=10,你将会得到不同的用户信息。

原理分析

接下来,用编辑器打开Less-1目录下的index.php,然后查看其源代码的第29行:

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

我们在URL中添加了额外的ID参数之后,整个过程中后台起作用的查询语句如下:

Select * from TABLE where id=1;

Select * from TABLE where id=1;

如果你输入的是?id=999999或?id=hahahaha,你就会发现页面不会有任何的输出。但如果你在刚才的?id=1后面加个单引号(?id=1'),你就会发现系统输出了错误信息:

我们先来分析一下这段错误信息,其重点就在结尾的地方:

''1'' LIMIT 0,1' at line 1

''1'' LIMIT 0,1' at line 1

先看这个双引号括起来的数字1,噢不,其实它是由两对单引号括起来的,稍微格式化一下就变成了:

' '1' ' LIMIT 0,1 ' at line 1

' '1' ' LIMIT 0,1 ' at line 1

第一个和最后一个单引号是用来包裹出错的SQL语句的,我们可以直接去掉,然后格式化之后如下:

' 1' ' LIMIT 0,1

' 1' ' LIMIT 0,1

游戏顶级黑客(黑客电脑游戏)

也就是我们刚才输入的1和一个单引号,而这个不成对的单引号破坏了原本的SQl语句执行。

这一次我们用反斜杠(MySQL的转义字符)代替刚才的单引号,并让SQL语句执行出错:

格式化之后的信息如下:

' 1\ ' LIMIT 0,1

' 1\ ' LIMIT 0,1

拿第一个例子(?id=1')来说,现在我们得想办法不让它报错,我们有两种方法去修复它。1.注释掉1'后面的语句;2.补充一个单引号与之匹配。

第一种方法就是在语句末尾添加两个破折号+空格来注释掉后面的语句:

' 1' -- ' LIMIT 0,1

' 1' -- ' LIMIT 0,1

在浏览器中,我们需要输入%20或+来代表空格符(URL编码),否则注释将无效。输入localhost/sqli-labs-master/Less-1/index.php?id=1' --%20然后按下回车:

除此之外,我们也可以通过#来完成注释。同样的,#所对印的URL编码为%23:

第二种就是在?id=1'的后面再加一个单引号,这个请同学们自己动手尝试。

目前一切进展顺利,但是你可能会有个疑问:我们这样破坏SQL语句然后又修复它们,到底有什么意义呢?

我们可以看到,我们的输入信息永远是被一对单引号(或双引号)包裹住的,无论我们输入什么内容,它都会在这对引号之中。那么当我们输入了一个单引号之后:

' '(我们输入的) '

游戏顶级黑客(黑客电脑游戏)

' '(我们输入的) '

这个单引号就帮我们结束掉了左边那部分的SQL语句,接下来我们就可以在右边写我们所要执行的语句了。比如说,我们可以写上AND 1=1(这个条件永远为真),然后注释掉右侧的内容:

也就是说,变量$id包裹在单引号中(id = ' $id ')。当我们在URL地址后面添加一个?id=1' AND 1=1 ,那么id = ' $id '就会变成id = ' ' AND 1=1 ',这样就直接让id等于了一个空字符串,并运行AND后面的语句,不过由于右侧还多出了一个单引号,所以我们还得注释掉这个单引号以及它后面的内容。

' AND '1'='1对应 id = ' ' AND '1'='1 ' LIMIT 0,1

' AND 1=1 --+对应 id = ' ' or 1=1 --+ ' 被注释掉的内容

' AND 1=1 #对应 id = ' ' or 1=1 # ' 被注释掉的内容

' AND '1'='1对应 id = ' ' AND '1'='1 ' LIMIT 0,1

' AND 1=1 --+对应 id = ' ' or 1=1 --+ ' 被注释掉的内容

' AND 1=1 #对应 id = ' ' or 1=1 # ' 被注释掉的内容

总结

那么第1关就这样轻松搞定啦!希望大家能够认真学习,有什么疑问或者想法也可以在文章下方或给“安全猴”留言,第2关马上就来,之后可就没那么轻松咯!

更多国内外精彩安全资讯以及信息安全技术资源,尽在“安全猴”

点击这里复制本文地址 以上内容由黑资讯整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
  • 1条评论
  • 嘻友绅刃2022-08-20 10:50:17
  • 可以看到,我们的输入信息永远是被一对单引号(或双引号)包裹住的,无论我们输入什么内容,它都会在这对引号之中。那么当我们输入了一个单引号之后:' '(我们输入的) '' '(我们输入的) '这个单引号就帮我们结束掉了左边那部分的SQL语句,

支持Ctrl+Enter提交

黑资讯 © All Rights Reserved.  
Copyright Copyright 2015-2020 黑资讯
滇ICP备19002590号-1
Powered by 黑客资讯 Themes by 如有不合适之处联系我们
网站地图| 发展历程| 留言建议| 网站管理