大多数现代 Web 应用程序都实现某种数据库,而 SQL 是最常用的查询数据库的语言。
1.SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作当用户自定义参数请求服务器中的动态资源或者在服务器上执行的代码包含了某个页面时,就会出现文件包含漏洞。如果让服务器执行了文件包含导致的恶意代码,系统就有可能被入侵。
一. 环境准备
1.开启OWASP靶机和Kali虚拟机
2.kali中登陆dvwa(用户名和密码都是 admin),进入 SQL Injection(SQL 注入)页面,安全等级调为low
二. 手动识别 SQL 注入案例
1.通过输入一个数字来测试应用程序的正常行为。将用 户 ID 设置为 1,然后单击“提交”。 通过查看结果,可以说应用程序查询数据库以查看是否存在 ID 等于 1 的用户并返回该用户的 ID、名称和姓氏。(提交ID,查看显示的信息)
2.接下来,测试如果发送应用程序不期望的内容会发生什么。在文本框中输入 1'(1 和一个单撇号)并提交该 ID。 如以下屏幕截图所示,应用程序应响应错误,结果表明很可能这个应用程序很容易受到攻击。(从报错获取信息:数据库管理软件mysql,和错误原因是引号不对称)
3.返回 DVWA 的 SQL Injection 页面。
4.为了确保存在基于错误的 SQLi,尝试另一个输入:1'',这次没有错误。 这证实了应用程序中存在 SQLi 漏洞。
5.现在将执行一个非常基本的 SQLi 攻击。 在文本框中输入' or '1'='1 并提交。(使得输入的条件为“true”,让数据库输出所有用户姓和名)
三.命令连接符号说明
&&:代表首先执行命令a,若成功再执行命令b,又被称为短路运算符。
&:代表首先执行命令a再执行命令b,不管a是否成功,都会执行命令b。在执行效率上来说“&&”更加高效。
||:代表首先执行a命令再执行b命令,只有a命令执行不成功,才会执行b命令。
|:代表首先执行a命令,在执行b命令,不管a命令成功与否,都会去执行b命令。(当命令a失败时,它仍然会执行命令b,表示A命令语句的输出,作为B命令语句的输入执行。)
四.总结
1.与简单地显示应用程序的用户名相比,SQLi攻击可能造成更大的破坏。通过利用这种漏洞,攻击者可能会泄露各种漏洞有关用户的敏感信息,例如联系方式和信用卡号。 也可能危及整个服务器,并能够执行命令并升级其中的权限。此外,攻击者可能能够从数据库中提取所有信息,包括数据库和系统用户,密码,以及根据服务器和内部网络配置,SQLi漏洞可能是完整网络和内部基础结构的入口点。