前面提到可以改用户账号密码
'; insert into users ('user_id','first_name') values('35','yuan') 这是插新用户
drop table users;-- 删除表(前提是这个账号有权限)
sql注入的危害,来源于数据库管理员的权限有多大,因此配置权限要弄好
php5.5之前,mysql_real_escape_string()存在,php7.0就没有这个函数了,用mysqli和pdo_mysql取代了
dvwa的中级中,程序员还可能在sql语句执行的变量处少个引号。。。这就和数值型sql注入类似了。直接就插入语句了。
dvwa最高级的安全级别,是将数据类型只限制为数字了。(相当于白名单)
当sql注入的时候,不反回报错信息的时候,就只能盲注了。
换句话说,当输入单引号等特殊符号没有报错信息的时候,再尝试and 1=1之类的盲注,盲注至少要提交一个正确的值,否则不好判断。
#和--+起到的效果是一样的。都是注释。
1' and user is not null-- 在盲注中,因为只有正确信息才会返回,所以这里加not
同理,猜表名也可以这么猜,和前面的原理一样。
1' or user like '%a% 这样只要有a的存在,就会返回信息
1' or user='admin' and password='jalkj45atga45qwe' 这里的1多换几个字符来判断
总结:
sql注入分为两块:发现注入和利用注入
发现注入:返回报错信息的,有回显就继续猜测,验证;不反回任何的报错信息,就盲注;还有一种情况,过滤危险字符的,用宽字符注入尝试(根据前端的meta编码来判断是否可以宽字节注入)
利用注入:无论有没有报错,都要先找到回显地址。若没有禁止order by和union,那就可以直接查。若禁止了,但是能确认有注入点,那么就and各种猜测。
网友评论