关于sql注入(mysql)的基础知识

注入分类

系统函数

函数名称

函数作用

version()

mysql版本

user()

数据库用户名

database()

数据库名

@@database()

数据库路径

@@version_compile_os

操作系统版本

字符串连接函数

函数名

函数作用

concat(str1,str2,...)

没有分隔符链接字符

concat_ws(separator,str1,str2,...)

使用separator分隔符链接字符

group_concat(str1,str2,...)

连接一个组的所有字符串,并以逗号分隔每一条数据

详细介绍 http://www.cnblogs.com/lcamry/p/5715634.html

漏洞盘底语句(poc)

  • or 1=1--+

  • 'or 1=1--+

  • "or 1=1--+

  • )or 1=1--+

  • ')or 1=1--+

  • ") or 1=1--+

  • "))or 1=1--

注:--+可以使用#替换,#的url编码为%23(#是注释)

常见的sql查询代码:

$id=$_GET['id'];
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

语句可能会不同,但是注意引号的闭合,当用户输入不一样的引号引起的效果是不一样的(sql语句认定引号内为字符串,且上引号对配对第一个下引号),一般采用两种思路,闭合后面的引号或者注释掉,注释掉采用--+ 或者 #(%23)

union操作符的介绍

union操作符用于合并两个或多个select语句的结果集。请注意,union内部的select

语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 select 语句中的

列的顺序必须相同。

sql的union语法

SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2

注:默认地,union 操作符选取不同的值。如果允许重复的值,请使用 union all。

SQL UNION ALL 语法

SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2

另外,union 结果集中的列名总是等于

sql的逻辑运算

提出一个问题

Select * from users where id=1 and 1=1;

这条语句为什么能够选择出 id=1的内容,and 1=1 到底起作用了没有?

这里就要清楚 sql 语句执行顺序了。同时这个问题我们在使用万能密码的时候会用到。

Select * from admin where username=’admin’ and password=’admin’

我们可以用 ’or 1=1# 作为密码输入。原因是为什么?

这里涉及到一个逻辑运算,当使用上述所谓的万能密码后,构成的 sql 语句为:

Select * from admin where username=’admin’ and password=’’or 1=1#’

上面的这个语句执行后,我们在不知道密码的情况下就登录到了 admin 用户了。

原 因 是 在 where 子 句 后 , 我 们 可 以 看 到 三 个 条 件 语 句 username=’admin’ and

password=’’or 1=1。三个条件用 and 和 or 进行连接。在 sql 中,我们 and 的运算优先

级大于 or 的元算优先级。因此可以看到 第一个条件(用 a 表示)是真的,第二个条件(用

b 表示)是假的,a and b = false,第一个条件和第二个条件执行 and 后是假,再与第三

个条件 or 运算,因为第三个条件 1=1 是恒成立的,所以结果自然就为真了。因此上述的语

句就是恒真了。

Select * from users where id=1 and 1=1;
Select * from users where id=1 && 1=1;
Select * from users where id=1 & 1=1;

上述三者有什么区别?

1和2是一样的,表达的意思是 id=1条件和1=1条件进行运算。

3的意思是 id=1 条件与 1 进行&位操作,id=1 被当作 true,与 1 进行 & 运算 结果还是 1,

再进行=操作,1=1,还是 1(ps:&的优先级大于=)

注:此处进行的位运算。我们可以将数转换为二进制再进行与、或、非、异或等运算。必要

的时候可以利用该方法进行注入结果。例如将某一字符转换为 ascii 码后,可以分别与

1,2,4,8,16,32.。。。进行与运算,可以得到每一位的值,拼接起来就是 ascii 码值。再从

ascii 值反推回字符。(运用较少)

注入流程

mysql特性

表名

作用

nformation_schema

在MySQL中,把 information_schema 看作是一个数据库,确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。

schema_name

schema_name 返回系统架构和用户定义架构的名称。 可以在选择列表where子句和任何允许使用表达式的地方调用schema_name。

information_schema.tables

获取所有表结构

information_schema.columns

获取所有表的字段

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

himobrinehacken

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值