首页
社区
课程
招聘
[讨论]SQL注入的学习笔记之2
发表于: 2018-9-12 16:49 1707

[讨论]SQL注入的学习笔记之2

2018-9-12 16:49
1707

开始第二节,关于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期)

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//