本文共 1637 字,大约阅读时间需要 5 分钟。
判断某个链接是否存在SQL注入,可以通过对其传入的可控参数进行简单的构造,通过服务端返回的内容来判断有无注入。
实验环境: sqli-libs构造测试 预期结果 变种a' //触发错误,返回数据库错误 a' or '1'='1 //永真条件,返回所有记录 a') or ('1'=1 a' or '1'='2 //空条件,返回原来相同结果 a') or ('1'=2a' and '1'='2 //永假条件,不返回记录 a') and ('1'='2
构造测试 预期结果 变种' //触发错误,返回数据库错误 1+1 //返回原来相同的结果 3-11+0 //返回原来相同的结果 1 or 1=1 //永真条件,返回所有记录 1) or (1=11 or 1=2 //空条件,返回原来相同的结果 1) or (1=21 and 1=2 //永假条件,不返回记录 1) and (1=2
网站中源码的sql语句为:“SELECT * FROM users WHERE id=$id LIMIT 0,1”;
我们主要看这个: ‘’ LIMIT 0,1’ 除去两边最外面的’ 只剩下: ’ LIMIT 0,1 还剩下的’ 为我们自己加上去的 可以判断源码中的id这个参数在并入sql语句中并没有用引号包含网站中源码的sql语句为:“SELECT * FROM users WHERE id=’$id’ LIMIT 0,1”;
我们主要看: ‘‘1’’ LIMIT 0,1’ 除去最外侧的’ ’ 只剩下 ‘1’’ LIMIT 0,1 由于我们输入的参数为1’ 除去我们自己输入的’ 剩下 ‘1’ LIMIT 至此我们可以判断出这个参数在sql中是用’ '包含的网站中源码的sql语句为:“SELECT * FROM users WHERE id=(’$id’) LIMIT 0,1”;
我们主要看: ‘‘1’’) LIMIT 0,1’ 除去最外侧的’ ’ 只剩下 ‘1’’) LIMIT 0,1 再除去我们输入的参数 ’ 剩下 ‘1’) LIMIT 0,1 至此我们可以判断这个参数是由 (’ ')包含的网站中源码的sql语句为:“SELECT * FROM users WHERE id=(”$id") LIMIT 0,1";
这里我们无论是输入’ 或者是) 都不会报错 原因在sql语句中参数用" "包含 如果是数字加字符串比如1’ 或者 1) 都会自动转换为 1 那么我们如何判断呢我们可以用\ 或者"
\是转义字符可以将" 转换成字符串而不是引用参数的引号转载地址:http://luhzi.baihongyu.com/