如何测试我的网站是不是存在基本的 sql 注入漏洞?

Posted

技术标签:

【中文标题】如何测试我的网站是不是存在基本的 sql 注入漏洞?【英文标题】:How to test my website for basic sql injection vulnerabilities?如何测试我的网站是否存在基本的 sql 注入漏洞? 【发布时间】:2017-05-28 23:58:07 【问题描述】:

我正在为一个项目创建一个带有登录屏幕的基本网站,我想测试它是否存在一些基本的 sql 注入漏洞。我正在使用表单从用户那里读取用户名和密码,并使用这行 php 代码在我的数据库中查找他们的信息并将其打印给他们:

if(isset($_POST['username'])&&$_POST['username']!=""&&isset($_POST['pass'] )&&$_POST['pass']!="") $sql="SELECT username,pass,email,name,surname,ADT,tel,address,bdate,gender FROM myusers WHERE username='".$_POST['username']."' AND pass='".$_POST['pass']."'";

提前感谢您的帮助。如果您需要有关我的代码的任何其他信息,请询问。

【问题讨论】:

我可以告诉你,你的代码很容易受到攻击,无需任何测试。 简单,只要问一个问题:“是否有任何没有完全参数化的任何语句? - 如果答案是肯定的,那么是的,您的代码非常容易受到攻击。这在您的示例中很明显。想象一下有人发布用户名'; DROP TABLE myusers; --.. 顺便说一句:永远不会!存储纯文本密码! 使用password_hash()password_verify()(每次存储纯密码时,root 都会将小猫移动到 /dev/null) 【参考方案1】:

我会建议使用一些提琴手(我推荐telerik fiddler)并手动创建请求。通过该程序,您可以准备 sql-injection 请求并查看服务器响应。在这里你有一些基本的例子:

0+1, 2-1, (...) - if it return specific record, your code is vulnerable
In your case check this:
x' or 'x'='x'         
x' or 'x'='x' -- 
1 AND 1=(SELECT 1), 1 AND 1=(SELECT 0) - check if subquery works

您也可以查看cheat sheet和sql injection cheat sheet。

【讨论】:

以上是关于如何测试我的网站是不是存在基本的 sql 注入漏洞?的主要内容,如果未能解决你的问题,请参考以下文章

测试登陆页面时,如何测试SQL注入漏洞呢

网站安全测试与检测中 发现的OA系统中的SQL注入漏洞

怎么检测网站存在注入漏洞 防注入都有哪些解决办法

如何防止网站被SQL注入攻击之java网站安全部署

Sql注入-1:sql注入基本原理

有没有办法通过 SQL 注入攻击查看 MySQL 数据库是不是已被访问?