SQL注入 ---04
1 简单的sql注入
要求:
要有sql注入:
1,变量 2,变量要带入数据库进行查询 3,没有对变量进行过滤或者过滤不严谨
mysql> select * from users where id=2 limit 0,1;
当我的语句这样写时查寻到的结果
当我修改为:
select * from users where id=-1 union select 1,2,3;
查询到的结果为1,2,3
原因:
因为当id=-2时会返回一个空值,就会把union后面的查询结果补充上来,然后我们就可以去看在那个字段有回显了,然后在我们回显的字段上面去,进行关键字段的回显
2 基础巩固
假设在我的x参数处有注入点,以下那个注入是正确的
www.xfy.com/index.php?y=1 and 1=1 & x=2
www.xfy.com/index.php?y=1& x=2 and 1=1
www.xfy.com/index.php?y=1 and 1=1 & x=2 and 1 =1
www.xfy.com/index.php?xx=1 and 1=1 & xxxx=2 and 1 =1
正确答案应该是bc,第一个他的测试语句在y这个参数里面,不在x很好理解;而最后一个将参数名都过滤了
注意:如果网站为www.xfy.com/index.php id=1 & page=1 如果你直接在后面注入或者说用工具sqlmap来注入的时候应该将参数的位置进行一个调换,因为sqlmap会自动对后面的参数进行注入测试(也可以加个*)
3 注入流程
数据库--》表--》列--》数据
1,判断注入
2,猜解列名数量(字段数)
--order by x,x--+
3,使用联合查询,看报错在那几个字段,接着用4的操作收集信息
4,信息收集:
数据库版本(version())
数据库:(database())
数据库用户:(user())
操作系统:@@version_compile_os
5,版本
低版本:5.0以下
高版本:5.0以上 information_schema来查流程在:SQL注入之information_schema表_schemata在sql-CSDN博客
6,limit,group_concat
limit x,1 限制 变动进行拆解
为什么查表名的时候加group_concat可以出现多个表名,而不加则只有一个呢?
6.1 数据库会返回多行结果,每行包含一个表名。但在SQL注入场景中:
-
通常只能看到查询返回的第一行结果
-
应用可能只处理或显示单行结果
-
因此你只能看到一个表名
6.2 它可以将多行结果合并为一个字符串:
-
将所有表名连接成一个字符串
-
默认用逗号分隔
-
结果作为单行单列返回,因此在SQL注入中可以看到所有表名
需要注意的是,GROUP_CONCAT
有长度限制(默认1024字节),对于大量表可能需要调整或使用其他技术。
如何判断注入点?
1
SELECT * FROM users where id = 1 and 1=1 LIMIT 0,1 页面正常
SELECT * FROM users where id = 1 and 1=2 LIMIT 0,1 页面错误
and就是且 当id=1 和 1=1都为真时就返回正确页面,反之则返回的是不正确的页面
2
可以在可控参数后面乱输,如果页面发生了变化说明可能存在注入点,但是当出现404或者说是页面跳转说明一般没有漏洞