首页
论坛
课程
招聘
[看雪10年] [原创]SQL注入
2021-3-4 20:51 1311

[看雪10年] [原创]SQL注入

2021-3-4 20:51
1311

SQL注入

注入的原理:把用户输入的数据当作代码执行

两个关键条件:1.用户能够控制输入

 

​ 2.原本程序要执行的代码拼接了用户输入的数据

:注入的分类

显错注入

 

POST注入

 

HEAD注入

 

布尔盲注

 

延时注入

 

宽字节注入

:传参的方式和区别:

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="#查询条件">查询条件

  1. User_Agent -- 当作查询,当我们登录某页面的时候,页面会显示上次登录IP, 这就代表着我们的某些数据被记录进了数据库(insert into )会出现一个插入语句

  2. Referer -- 提供上下文服务,告诉服务器我从哪里来,用于流量统计

  3. X-Forwarded-For -- 是一个扩展头。HTTP/1.1(RFC 2616)协议并没有对它的定义,它最开始是由 Squid 这个缓存代理软件引入,用来表示 HTTP 请求端真实 IP,现在已经成为事实上的标准,被各大 HTTP 代理、负载均衡等转发服务广泛使用,并被写入 RFC 7239(Forwarded HTTP Extension)标准之中
  4. 在使用XFF头时要注意有时候抓包会没有XFF头,这时候我们自己可以加上一个,并且在冒号后面要加上空格

注意事项

  1. 报错有长度限制所以在报错表的时候最好用limit这个函数一个一个去查表
  2. 有时候and 会不行也可以用 or

使用方法

image-20210222194505278

 

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注入image-20210226213508939
  • 然后用抓包工具抓个数据包,把数据包保存,在cookie请求头数据后价格*星号 ,然后sqlmap.py -r (文件名)

四,盲注

  • 什么是盲注

    • 页面没有回显的注入
  • 盲注分类

    • 时间型盲注

      • 页面无论对错都不会有变化
      • 利用if()函数加sleep()函数组合 and if(length(database())>10,sleep(5),1)
      • image-20210228205241044
    • 布尔型盲注

      • 页面会回显数据对错
      • 判断出有注入后用length()判断数据库长度,然后再利用ascii()函数判断数据库的字母的ascii码值加上substr()截取函数一个一个的去判断数据路名的字母。and select ascii(substr(database(),1,1)>107)

    五,宽字节注入

    • 魔术引号:会在单引号,双引号,反斜杠前加上反斜杠,达到注释的效果为了防止SQL注入
    • 环境:数据库被设置成了GBK编码时
    • 利用:传参一个字符和原本的反斜杠凑成一个汉字
    • 在查字段名的时候查询条件的表名需要用单引号括起来,这时候就被魔术引号转义了,所以需要改写成十六进制编码,(数据库可以接收十六进制编码)

[公告] 2021 KCTF 春季赛 防守方征题火热进行中!

收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回