渗透测试_SQL注入


1、SQL注入检测
    (1)测试者需要列出进行SQL查询的输入字段清单,包括POST请求隐藏字段。然后对他们进行逐一测试,尝试使用查询对其进行干涉并产生错误。
    (2)通常给测试的字段增加一个单引号(')或一个分号(;)。单引号是用在SQL中作为一个字符串终止符。如果应用程序没有将其过滤,它将导致不正确的查询。分号是用于终止SQL 语句。如果没有将其过滤,它同样可以产生错误。
    
2、常规SQL注入测试
    (1)对于查询语句SELECT * FROM Users WHERE Username='$username' AND Password='$password',使用
        $username = 1' or '1' = '1
        $password = 1' or '1' = '1
    (2)对于如下查询:SELECT * FROM Users WHERE ((Username='$username') AND (Password=MD5('$password'))),使用
        $username = 1' or '1' = '1'))/*
        $password = foo
    
3、union查询
    对于查询语句SELECT Name, Phone, Address FROM Users WHERE Id=$id,设置id:$id=1 UNION ALL SELECT creditCardNumber,1,1 FROM CreditCarTable。
    这将和所有信用卡用户一起加入原始查询结果中。绕开使用DISTINCT关键词的查询必须使用关键字ALL。为了避免语法错误,union查询跟前面的查询必须有同等数目的参数。
    
4、SQL盲注
    (1)确定查询正确和错误的响应页面(错误查询:SELECT field1, field2, field3 FROM Users WHERE Id='1' AND '1' = '2')
    (2)依次推理查询(SELECT field1, field2, field3 FROM Users WHERE Id='1' AND ASCII(SUBSTRING(username,1,1))=97 AND '1'='1')
    (3)直到出现ASCII码0比较返回true时,执行查询:SELECT field1, field2, field3 FROM Users WHERE Id='name' AND LENGTH(username)=N AND '1' = '1'(其中name是之前推理出来的字符串),如果返回true,则查询完成;否则说明要查询的字符串中含有空字符,继续推出,直到下一个空字符。
    
5、存储过程注入
    (1)如果处理不当,在存储程序中的动态SQL可以和网页中的动态SQL 一样容易受到攻击。
    (2)如果不能绕过登录或者返回查询结果,可以考虑注入update、delete等操作来修改数据库。
    

参考:OWASP测试指南



你可能感兴趣的:(OWASP,TOP,10,2013)