-
-
[讨论]SQL注入的学习笔记之2
-
发表于: 2018-9-12 16:49 1714
-
开始第二节,关于sql注入点的寻找问题。
从这里我开始感觉这篇教程的优点,让我们自己写一段sql代码,自己来注入,中间还解除了mysql数据库的创建,无疑让我们非常直观的了解了sql注入的原理和过程。在这里给教程作者点个赞。
2.1是输入id=1’探测注入点,笔者曾经先接触过实验吧简单的sql类注入习题,这也是最基本的探测SQL注入点的方法,但一直不知其所以然。
而在这里,我们可以将输入的值:1’代入php语句,有$querry = "select * from users where id =1’”;
Mysql_querry()函数发送查询语句,语句执行错误返回FALSE,因为没有1’id号,而结果就是
$result = mysql_fetch_array($sql);因为参数为逻辑值FALSE而执行错误,程序报错。
也由此可以确定这里存在一个SQL注入点,这里不懂的去看SQL注入的概念。
另var_dump()变量的功能室打印变量信息。
2.2中的前半部分不讲,很简单,笔者主要在数据遍历这里遇到了难题。
根据作者的代码改完之后,发现自己的第一行无法显示。
如图:
看到这里一开始肯定很疑惑的,反复检查代码没有问题后,我再度仔细查看了mysql_fetch_array()的说明,发现该函数的返回结果是数组指针形式的,学过编程语言的朋友应该都知道指针概念,没学过的也不要紧,慢慢学,而且我后面会总结一下该函数功能,相信即使不会语言,也可以理解。
下面是我对于mysql_fetch_array()函数的理解:
代码中的$result[0],$result[1]代表的是数据表的一列。
比如$result[0]代表是id这一列,这一整个字段。
如果你在php代码中加上$result[2]的输出,那么你就会看见之前自己设置的password列。
这是作者在教程中没有说明的。
有了列的概念,那么请大家思考?他的行是什么来控制的呢?
是mysql_fetch_array()的每一次调用,注意代码:
$querry = "select * from users where id =".$_GET['id']; $sql = mysql_query($querry,$con); var_dump($sql); $result = mysql_fetch_array($sql); echo "<table border='1' cellspacing='0' width='300px' height='150'>"; echo "<tr>"; echo "<td>id</td>"; echo "<td>username</td>"; //echo "<td>password</td>"; echo "</tr>"; //遍历查询结果 while($result=mysql_fetch_array($sql)) { echo "<tr>"; echo "<td>".$result[0]."</td>"; echo "<td>".$result[1]."</td>"; //echo "<td>".$result[2]."</td>"; echo "</tr>";
我们在第四行,有第一次调用过mysql_fetch_array()函数,而如果我们将这一行去掉,再在网页中查看代码,你就会发现,页面完整地显示了四个结果。
对于2.3节的加法减法笔者有些难理解,我的认知为:
数字型不需要要单引号括起来,1=1,而其他类型,是‘1’=‘1’
其他类型的加法减法,是无法运算的,会导致报错等类型,所以如果加法减法可以正常显示结果,就能证明该SQL注入点是数字型。反之是其他类型。
这一部分笔者也不是很确定,姑且这么理解,如果有误,希望大家能指出来,不胜感激。
到这里SQL注入攻击初级学习完毕,向本文作者zusheng致敬,教程出自ichunqiu,该SQL注入教程来自《渗透攻防web篇》合集,大家可以去ichunqiu关注作者更多的教程。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
- [讨论]SQL注入的学习笔记之2 1715
- [讨论]SQL注入的学习笔记 2970
- [求助]关于sqlmap的一个使用错误问题 4153
- [求助][讨论]如何下载一个安全的caidao工具 11337