sql注入

sql注入 我们不管注入的形式是什么我们只要知道和数据库进行交互的时候就有可能出现漏洞我们抓个包直接改包就好了 sql注入会对我们的数据和我们的权限造成危害的

sql浅谈

SQL注如就是将我们想要查询的sql语句通过参数传递到后台的sql语句中去执行查询我们要的东西。
我们要想想我们能去进行sql注入的条件是什么,我们要将我们的语句去上传也就是我们需要要一个可控变量,然后这个变量是要被后台接受并在数据库中查询的,在之后就是过滤不严谨这是看对方的,如果过滤特别严谨我们几乎是没有办法完成注入的。

判断注入点

我们要去完成注入的话我们肯定要去发现一个注入点,找注入点就大同小异了参数后面加and 1=1,and 1=2我们去看他的页面是否正常来判断

信息收集

我们在注入的时候我们肯定是要把注入语句给放到对应的参数上面的,不是盲注的话order by判断字段,然后我们就要去找到这个注入点的一些信息,例如数据库,用户权限,版本,操作系统之类的

注入操作

我们利用我们的判断的信息在mysql中5.0版本以上就会有一个information_schema
如果是低版本我们就不能用这个思路
我们可以通过他去找到所有的名字,符号“.”这个点表示的是下级例如information_schema.tables,这个就是记录了所有的表的名字的表
同理查列名也一样
在我们的MySQL里面我们找到root权限注入的话的话我们是可以跨站去查询其他数据库里的数据,我们有root权限的注入的话我们就可以查数据库名select * from schemeta,schemata_name
select table_name from information_schema.tables where table_schema=”数据库名”这是查表名的
select column_name from information_schema.columns where table_name=”表名”这是列名
select 列名 from 数据库名.表名 这是查看数据

绕过方式

如果有防护的话我们是要去绕过的那么绕过的方式
1.更换请求方式
2.将我们的注入语句编码
3.等价的关键字替换
4.注释符,特殊符号混用
5.大小写绕过
6.垃圾数据轰炸

搜索语句

在mysql里各个不同功能的搜索词不一样我们也可以利用功能来判断是否会有注入的出现,insert:插入语句,经常会在注册的时候出现,update:更新,我们更改自己的数据的时候会出现;select:搜索数据的时候会出现的

盲注:在我们的sql语句中有一些语句是不会有回显得或者也有可能是网站这里不让他去把回显给我们那我们就要去采用盲注的方式,盲注又分为报错盲注,布尔盲注,时间盲注。我们在报错信息能够出现的时候就用报错注入,布尔盲注是在页面在我们语句错误的时候我们就是错误的页面语句正确才能出现正常的页面而时间盲注是不管我们的语句怎么样我们只有一个页面我们只能通过sleep()之类的函数去帮助我们

sql注入的注释及闭合:

–+,– (这有个空格),#。使用注释符的目的我们先看一个语句

SELECT * FROM products WHERE category = ‘neme’ AND released = 1,在这个语句中name被‘’包裹我们如果只是放入一个语句而不去闭合那么语句就会被当作字符串带入搜索这样就无法做到查询的操作我们在语句前加一个‘前面的’就被闭合了而后面的语句因为少了一个‘而报错这时候直接将后面的语句注释那就剩下我们注入的语句是在起作用的:
SELECT * FROM products WHERE category = ‘neme’ union select 1,2,3–+’ AND released = 1
##正式注入前查询:正式注入前是要做一些基础信息的查询例:user(),database(),@@version_compile_os,version() @@dirdata.类似这些东西的意思自己去了解

## 常见注入

union 联合查询:在mysql数据库中union的作用就是合并多个select查询语句的结果,说以我们可以在union后面加上我们想要查询的语句
union使用:首先我们要判断参数类型将union前的参数给闭合 不然我们的语句会被包裹在‘’之内就无法执行,如何利用order by去查询字段,得到字段个数之后利用select 1,2,3得到会爆出字段的位置 然后在去查询,
例:在2的位置爆出字段那么语句闭合后的语句 union select 1,user(),3 –+在2对应的位置就会出现user()的信息然后附上一些之后的操作:
-1 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema=’mozhe_Discuz_StormGroup’
-1 union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name=’StormGroup_member’
这两个语句最前面的-1是为了让整体语句报错然后将我们的union后的东西给查出来

注入的思路

sql注入是一个十分大的一个知识一个总体的思路就是先判断他的数据库类型,注入点的权限,之后要知道请求方法和数据类型,如果是低权限的话就一步一步去获取数据去哪到我们要的数据,而如果是高权限的话数据库又有这个功能我们就进行文件的写入,命令执行之类的操作。

其他注入

加解密注入–网站的数据接受是会把我们的数据加密在接收,我们在抓包后要把我们的注入语句也进行同样的加密后再去发包,这样我们的注入语句才会生效;

http头注入–数据包是有一些http头的后端要是选择去接受这些数据的话这里也是可以注入的

堆叠注入–在mysql数据库中;代表结尾的意思我们在注入的时候用;结尾后接上我们写的句子然后完成闭合就可以去查询我们要的数据

二次注入–这个注入方式是要代码开源的时候我们才能用的就是先把语句放到数据库里然后二次调用完成我们的注入