SQL注入入门

SQL注入

  1. 原理:以简单的get方法举例
#在进行页面请求的时候,页面和数据库打交道,会向数据库里面传入sql语句,示例如下
页面输入为 1 
源码为:
$query = SELECT first_name, lastname FROM users WHERE user_id = $1
实际传入
SELECT first_name, last_name FROM users WHERE user_id = '1'

在上面的语句中,1是输入的数字,这种情况下,我们可以在输入的时候加一些其他语句,例如 order by 1…n 得到 数据库的列数

#页面输入:
1' order by 1#
实际传入:
SELECT first_name, last_name FROM users WHERE user_id = '1' order by 1#`;
在mysql中,'#'后面的会被注释掉,所以在数据库层面看来,sql语句是:
SELECT first_name, last_name FROM users WHERE user_id = '1' order by 1;

按照此逻辑,很多东西都可以做,比如绕过验证通过,or 1 == 1 这种类似的语句,对数据库的系统表了解的,可以查询系统表中的信息。

  1. 攻击检测(服务端)
    最简单的是在查询的时候加入右 ’ ,sql语句如下
# 在右边进行右',相当于结束符,后面添加任何其他语句会报错
http://xxx/abc.php?id=1'

  1. 验证sql注入漏洞模式(11 | 12 )
#常见的漏洞模式
数据库中有很多其他类型,但是最常用的就是char 类型和 int 类型。
利用上面的 or 1==1 或者 1==2 来看网站漏洞是否是int类型
代码如下:

 select * from <表名> where id = x and 1 == 1 
 select * from <表名> where id = x and 1 == 2 
 如果1 正常运行,2返回类型错误,则证明为int类型,
 如果是char类型的话,两个语句真正执行的是
 select * from <表名> where id = ' x and 1 == 1'
#char类型
类似的,如果为char类型的话,只需要更改执行语句也可以达到对应的效果
' and '1' = '1
实际执行的为下面的语句:
select * from <表名> where id = '1' and '1' == '1'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值