sql二次注入
什么是二次注入?
简单的说,二次注入是指已存储(数据库、文件)的用户输入被读取后再次进入到 SQL 查询语句中导致的注入。
网站对我们输入的一些重要的关键字进行了转义,但是这些我们构造的语句已经写进了数据库,可以在没有被转义的地方使用
可能每一次注入都不构成漏洞,但是如果一起用就可能造成注入。
原理:
二次注入需要具备的两个条件:
(1)用户向数据库插入恶意语句(即使后端代码对语句进行了转义,如mysql_escape_string、mysql_real_escape_string转义)
(2)数据库对自己存储的数据非常放心,直接取出恶意数据给用户
登录页面 新建用户
数据插进去了
、
登录
修改密码
修改完后查看下,当前账号admin'# 并没修改到密码 还是原来的123456 倒是把表中另一个admin账号修改了
查看修改密码页面的源代码
传进来的的语句变成了这样
$pass变量=传进来的新密码 $username 当前用户 $curr_pass 当前用户登录密码
$sql = "UPDATE users SET PASSWORD='123456789' where username='admin'#' and password='$curr_pass' ";
#把后面的都给注释了,所以就是修改了admin用户的密码为123456789
用这条语句把admin改回原来的密码
update users set password='admin' where username='admin'#' and password=123456789;