SQL注入原理
由于程序员对用户输入数据没有做完善的检查、过滤,导致恶意命令插入到正常数据中执行,达到SQL注入的目的。其主要危害包含写入os-shell文件、脱库、后期提权等。
SQL注入类型
提交方式:GET、POST
攻击方式:报错注入、union联合注入、布尔盲注、时间盲注、http头注入、宽字节注入(中国网站)、文件注入、DNS注入等
本文内容------SQL注入-get类型
本文主要讲述最最最基础的SQL注入流程,不包括过waf(防火墙)的一些操作----会在后面说明。本次展示union联合注入–get类型,进行脱库处理
1.信息搜集
(首先直接把键盘敲烂然后成功脱库—想啥呢…)
首先我们要当个正常人,知道这个数据是如何进行传输的,是GET类型还是POST类型传输参数,一般通过地址栏参数简单辨别,也可以通过抓包工具如BurpSuite等分辨,前期猥琐发育我们还是正常人
2.确定闭合方式
小知识:我们要知道SQL语句的闭合方式:无符号闭合、单引号—‘’、双引号—“”、单引号与括号联动—‘)、双引号与括号联动—“)、单引号括号双引号—‘)“、以及搜索语句中—‘%’闭合
其次我们尝试通过字符转义、传入大数id=50000000等各种方式来使其报错—此处表示你已经过了waf(即使你不会),我们观察他的闭合方式,诱导语句闭合并使用- -+把后面语句注释掉
(so 有的waf会把- -+给过滤掉)
3.确定栏目数目
利用order by确定栏目数目,从大到小,采用二分法(10 5 3 …),正常则说明栏目数目猜对了(哎~就是猜的)无则非正常显示
4.确定注入方式
这里采用union联合注入,id=1是正常指令会覆盖掉我们想要的数据,所以我们得搞他,让他变得不正常。(输入不存在数据、加个负号…)
5.开始利用系统库与函数进行注入
小知识:我们需要使用的系统库msql 5.0以上版本才有,有些网站(非常老的)没有系统库,采取其他方法进行处理,后面学了再说。
select * 显示数据
database()–数据库
information_schema.tables-----备份表名
information_schema.columns----备份栏目名
group_concat(table_name/column_name)----抓取函数
table_schema=database()等价
到这里基本流程差不多了,后期主要学习攻击方式和如何过waf,基本流程是这样,也可以根据原理使用python写一个自动注入程序,类似sqlmap
学废了,请点赞一手!
没学废,请回炉重造!