这节课我们会把上节课搭建的网站运行起来,然后尝试修改代码看看能不能加强。这样会让你对 SQL 注入有更深的理解,顺便还能学到如何进行代码审计,如何开发更安全的网站。
上周课程的门户
实验要求:
【1】整个过程需有步骤和截图(截图上有学号最后一位水印,如1),格式可以模仿本课件;
【2】每节课都有相应的任务需要完成,如未完成,请利用课间休息时间完成。
【3】作业将计入你的正常成绩,并应在4节课后上交。
好的,我们来谈谈课程纪律:
【1】对帮助同学、认真做实验,每节课在总分上加2分;
【2】上课玩游戏、睡觉、聊天等行为,每节课扣5分;
今天的故事(富兰克林的修身养性故事,复制下面链接到浏览器即可观看):
阅读故事后,请在实验报告中写下你的想法(超过50字)。
1. 练习安装
它需要运行,所以需要先安装它(之前已经学过如何安装,这里就省略安装过程了),现在大家都默认安装了。
0.安装(略)
1.下载链接:
直接将下载的安装包解压到自己的安装目录即可。我安装在D盘。
ps:有的同学安装很久了,不知道安装在哪里,可以直接在环境变量里查看,如图:
2.输入cmd并打开
我们需要进入包中才能开始
2.启动上一课的环境,抓包,运行
因为数据是POST传输的,所以需要抓包来找到注入点
我们将这个包复制到桌面上的1.txt文档中
使用以下命令判断请求文本中是否存在注入
格式为:
.py -r 文档的绝对路径
发现注入点和漏洞
查询当前用户下的所有数据库
.py -r 文档的绝对路径 --dbs
成功找到所有数据库
获取当前网站数据库的名称
.py -r 你的文档的绝对路径---db
获取当前网站数据库的用户名
.py-r 你的文档的绝对路径---用户
获取数据库中的表名
.py -r 你的文档的绝对路径 -D 音乐--
查找用户
获取表中的字段名称
.py -r 文档的绝对路径 -D 音乐 -T 用户 --
查找用户表中的所有字段和数据类型
获取字段内容
.py-r 你的文档的绝对路径--Tuser -C --dump
.py-r 你的文档的绝对路径--users
3. 强化代码
我们看到SQL注入的原因是用户的数据没有经过任何处理就被放入查询语句中执行,所以我们使用像1'or 1=1#这样的简单语句来下载所有用户信息。
我们来看看代码:
分析源码发现,对参数没有做任何过滤,直接带入数据库进行查询。分析SQL查询语句,$user被单引号括起来,因此应该存在字符型SQL注入。
现在我们在防守方面需要做两件事:
(1)查找所有SQL注入漏洞;
(2)修复这些漏洞。
仅对用户输入进行一些处理是不够的。
所以如果我们使用一个函数来转义用户输入的特殊字符,它可以起到一定的效果
$用户=环($_POST ['']);
ring()函数会对如下字符进行转义,但是PHP高版本,PHP5.3以上版本不支持该函数,现在PHP中不建议使用该函数了。这里要告诉大家,曾经有这样一个函数,可以作为初步防御。该函数主要对如下字符进行转义:
如果攻击者不使用这些转义字符,则可以绕过该功能。
我们可以使用()函数来过滤输入的数据。
$用户=$_POST[''];
$用户1=(($用户));
$query=" , ,,,, 来自用户,其中='$user1'";
这对于单引号有效。
输入1'或1=1 # 不再显示用户信息。
在代码中添加 echo ''.$user1; 并检查结果,会发现单引号已经被转义了。
我们也可以尝试预编译语句。一般来说,防御 SQL 注入最好的方法是使用预编译语句和绑定变量。使用预编译 SQL 语句,SQL 语句的语义不会改变。在 SQL 语句中,变量用 ? 表示。攻击者无法改变 SQL 的结构。在上面的例子中,即使攻击者插入类似于 1' 或 1=1# 的字符串,也只会被当作查询。
代码如下:
我们发现,当你输入1'或者1=1#时,什么也找不到。我们认为这种方法比较安全。
最后,从数据库本身的角度来说,应该遵循最小权限原则,避免Web数据库使用root等高权限账号直接连接数据库。
实验报告格式要求:
实验课题:搭建自己的PHP网站并用于注入加固
学生证号: 姓名:
阅读以下链接文章并撰写 50 字的评论(注意不要出现拼写错误或语法错误)
1. 在服务器上练习安装(第一课)
2.启动上一课的环境,抓包,运行(第二、三课)3.强化代码(第四课)
4.总结与改进
请写下本次实验的总结以及你想在下一次实验中了解到的内容。
编写.php处理用户输入数据并添加数据到数据库(第三课)
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。