SQL注入和可能的攻击(SQL Injection and possible attacks)

2019-09-29 06:49发布

您好我有以下查询这是一个Java类的一部分。 我只是想知道什么是可能的可能的攻击与SQL注入。 如何攻击者可以注入查询? 什么是在这种情况下示例查询,可用于获取对数据库的访问?

    String query = ("SELECT username, password, admin FROM users 
    WHERE "  + "username='" + username + "' AND password='" + 
    password + "'"); 
    ResultSet rs = st.executeQuery(query); 
    // Entry in the result set means the query was successful and 
    //the user is a valid user
    if (rs.next()) { 
    username = rs.getString(1); 
    isAdmin = rs.getBoolean(3);   

我想这也是通过把用户名作为ABC'攻击的可能方式;##因为什么之后将被视为在SQL注释。 想想别人怎样?

我想知道,攻击者会在HTML页面的用户名框和密码框中输入要访问为管理员。 假设上述Java类的工作是通过查询数据库来处理用户的从一个HTML页面输入的请求。

Answer 1:

基本上它是这样工作的https://xkcd.com/327/

我做的是假设,一切用户输入是一种威胁,所以我将一切保存到变量一样usUsername ,这里的“我们”是指不安全。 从那以后,我检查每一个“我们” -variable打针,什么导致sUsername (s表示安全)。 所以,当我创建一个查询我只能用S-varaibles,并应在大多数情况下是安全的。

这种想法完全是从这里取: http://www.joelonsoftware.com/articles/Wrong.html



Answer 2:

在此基础上的代码,你可以通过操纵发送给查询用户名或密码的文本值做任何你想要的。

唯一的限制是执行查询的用户帐户的权限级别。 如果它是一个系统管理员,你可以删除所有内容。 如果它是SQL Server和xp_cmdshell的启用,可以格式化SQL服务器的硬盘驱动器。

SQL注入是那些东西在那里,如果你可以做一些事情 ,你几乎可以做任何事情之一。

看看进入Havij工具,这是一个安全的研究工具,可以证明SQLI的力量。



Answer 3:

你不能这样做。 用户名和密码可以通过任何导致所有类型的查询所取代。 您必须使用准备好的语句,以提供用户名和密码



Answer 4:

输入下列值密码将添加一行包含值的结果集合'admin''dummy'1用户名密码 ,和管理员 ,分别为:

' AND 1=0 UNION SELECT 'admin', 'dummy', admin FROM users WHERE admin = 1 AND '1'='1

结果查询将如下所示:

SELECT username, password, admin FROM users 
WHERE username='dummy' AND password='' AND 1=0 UNION SELECT 'admin', 'dummy', admin FROM users WHERE admin = 1 AND '1'='1'

作为第一SELECT将返回任何结果1=0是为每个记录假。 但第二,注入的SELECT语句返回所有的记录,其中admin=1是真实的,并取代了用户名密码的初始值admindummy ,分别。

你应该用准备好的语句 ,并传递值作为执行参数。



文章来源: SQL Injection and possible attacks