小菜鸟学黑客(1)php篇
2014-11-16 23:45
141 查看
我们的问题:为什么在测试php网站是否有漏洞的时候会需要在末尾加一个 and 1=1提交后,再输入一个and 1=2进行提交呢?
下面我们来看一下PHP程序中最典型的注射漏洞代码,如下所示:
$id=$_GET["id"];
$query="SELECT * FROM my_table where id='".$id."'"; //很经典的SQL注入漏洞
$result=mysql_query($query);
参数$id通过$_GET方式访问表单域id中的内容,利用它可以获得我们输入id参数的值。而$id在没有经过任何过滤情况下,就用字符串连接符(.)连接到了数据库查询代码中,然后就执行了数据库查询。所以对于参数id我们可以构造任何数据,从而出现了经典的注射漏洞。
我们已经知道,在PHP中目前获得客户端输入的数据不仅仅只有$_GET这一种方式。还可以采用$_POST和$_REQUEST方式获得数据,所以对于上面的$id=$_GET["id"];还可以改成$id=$_POST["id"];或$id=$_REQUEST["id"];,不过他们依然存在注射漏洞,只是获取客户端数据的方式不同而已。
这里,我们假设参数id的正确值为10。当我们只提交id=10时,查询语句$query就等于SELECT * FROM my_table where id=10,执行结果就是返回id=10所包含的信息。当然,我们当然不会那么听话,只输入id=10。比如我们输入id=10',则$query就等于SELECT * FROM my_table where id=10'。因为我们知道在数据库中的参数id是不可能有一个10’的值,所以执行的结果肯定出错,这也是为什么如果存在注入漏洞的时候我们输入单引号页面就会返回错误的原因,这个时候就可以初步判定它存在注入漏洞。而如果我们输入id=10
and 1=1的话,则$query就等于SELECT * FROM my_table where id=10 and 1=1,前面大家已经知道了and的运算规则了,因为SELECT * FROM my_table where id=10执行的结果为真,1=1也为真,那么真 and 真运算之后还是为真,所以添加输入and 1=1返回的结果依然为真。可是我们输入id=10 and 1=2呢?$query就等于SELECT * FROM my_table where id=10 and 1=2,因为SELECT
* FROM my_table where id=10为真,1=2为假,即真 and 假,所以执行的结果为假。这也是为什么添加输入and 1=2返回的结果为错误的原因。所以通过单引号、and 1=1、and 1=2我们就可以判断一个网站是否存在注射漏洞。
下面我们来看一下PHP程序中最典型的注射漏洞代码,如下所示:
$id=$_GET["id"];
$query="SELECT * FROM my_table where id='".$id."'"; //很经典的SQL注入漏洞
$result=mysql_query($query);
参数$id通过$_GET方式访问表单域id中的内容,利用它可以获得我们输入id参数的值。而$id在没有经过任何过滤情况下,就用字符串连接符(.)连接到了数据库查询代码中,然后就执行了数据库查询。所以对于参数id我们可以构造任何数据,从而出现了经典的注射漏洞。
我们已经知道,在PHP中目前获得客户端输入的数据不仅仅只有$_GET这一种方式。还可以采用$_POST和$_REQUEST方式获得数据,所以对于上面的$id=$_GET["id"];还可以改成$id=$_POST["id"];或$id=$_REQUEST["id"];,不过他们依然存在注射漏洞,只是获取客户端数据的方式不同而已。
这里,我们假设参数id的正确值为10。当我们只提交id=10时,查询语句$query就等于SELECT * FROM my_table where id=10,执行结果就是返回id=10所包含的信息。当然,我们当然不会那么听话,只输入id=10。比如我们输入id=10',则$query就等于SELECT * FROM my_table where id=10'。因为我们知道在数据库中的参数id是不可能有一个10’的值,所以执行的结果肯定出错,这也是为什么如果存在注入漏洞的时候我们输入单引号页面就会返回错误的原因,这个时候就可以初步判定它存在注入漏洞。而如果我们输入id=10
and 1=1的话,则$query就等于SELECT * FROM my_table where id=10 and 1=1,前面大家已经知道了and的运算规则了,因为SELECT * FROM my_table where id=10执行的结果为真,1=1也为真,那么真 and 真运算之后还是为真,所以添加输入and 1=1返回的结果依然为真。可是我们输入id=10 and 1=2呢?$query就等于SELECT * FROM my_table where id=10 and 1=2,因为SELECT
* FROM my_table where id=10为真,1=2为假,即真 and 假,所以执行的结果为假。这也是为什么添加输入and 1=2返回的结果为错误的原因。所以通过单引号、and 1=1、and 1=2我们就可以判断一个网站是否存在注射漏洞。
相关文章推荐
- 黑客菜鸟必须掌握的几个dos命令
- Web前端--黑客技术揭秘(菜鸟知识)
- 当黑客遇上菜鸟
- 一个在黑客界引起轰动的菜鸟教材---跟我学编程系列
- 黑客攻防专题九:菜鸟 Sa 注入=肉鸡
- 一个在黑客界引起轰动的菜鸟教材---跟我学编程系列
- 一个在黑客界引起轰动的菜鸟教材---跟我学编程系列
- 黑客攻防技术:菜鸟的几个入侵命令
- 一个在黑客界引起轰动的菜鸟教材---跟我学编程系列
- 菜鸟黑客的第一天——一些基础的手法
- 菜鸟学习初级教程-----强烈推荐(看完后成黑客拉) 第一篇
- 菜鸟黑客的第二天-一些常用的DOS命令
- 一个在黑客界引起轰动的菜鸟教材---跟我学编程系列
- 菜鸟黑客入门攻击及防范技巧
- 新手菜鸟防黑客必备知识
- 菜鸟黑客的第三天——一些很有用的工具
- Web前端--黑客技术揭秘(菜鸟知识)
- 菜鸟黑客的第四天——一些很有用的欺骗防范工具和技术
- 菜鸟学黑客――菜鸟的旅程
- 肉鸡的俘虏!一个菜鸟木马黑客的自白