二次注入
二次注入可以理解为,攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。防御者可能在用户输入恶意数据时对其中的特殊字符进行了转义处理,但恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中,当web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了sql二次注入。
less-24
先注册一个admin’#账户
登录后修改密码
最后发现实质修改了admin的账户
原理
注册用户时:
仅对特殊字符进行了转义,判断输入两次密码是否一致,然后将用户键入,将数据插入至数据库。
KaTeX parse error: Can't use function '\"' in math mode at position 55: …ssword) values(\̲"̲username", “$pass”)"
这里直接插入了数据
修改密码时:
$username= $_SESSION[“username”];//直接取出了数据库的数据
s
q
l
=
"
U
P
D
A
T
E
u
s
e
r
s
S
E
T
P
A
S
S
W
O
R
D
=
′
sql = "UPDATE users SET PASSWORD='
sql="UPDATEusersSETPASSWORD=′pass’ where username=‘
u
s
e
r
n
a
m
e
′
a
n
d
p
a
s
s
w
o
r
d
=
′
username' and password='
username′andpassword=′curr_pass’ ";//对该用户的密码进行更新
$sql = "UPDATE users SET PASSWORD=‘12345678’ where username='admin‘#