window.cnblogsConfig = { webpageTitleOnblur: '404-页面丢失', } window.cnblogsConfig = { webpageTitleOnblurTimeOut: 500, }

SQL注入其他情况

宽字节注入

当某字符的大小为两个字节时,被称为宽字节。

宽字节注入是利用数据库在处理GBK等宽字节编码时的特性,通过特定的输入绕过过滤。

当发现网站对敏感字符进行转义过滤,且数据库使用的是gbk编码

GBK双字节编码:一个汉字用两个字节表示,首字节对应0x81-0xFE,尾字节对应0x40-0xFE(除0x7F),刚好覆盖了转义符号\对应的编码0x5C0xDF0x5c对应汉字“運”,URL编码用%加字符的16进制编码表示字符,于是%df%5c经过GBK解码后变为汉字“運”

base64编码

判断特征:以 %3D 结尾

Base64编码使用64个字符(包括大小写字母A-Z、a-z、数字0-9、加号“+”和斜杠“/”,以及在编码结束时用作填充的等号“=”)来表示二进制数据。

%3DURL解码后为=,且Base64编码的特征为以=结束。

cookie注入

注入点在cookie数据中

使用BurpSuite修改cookie中键值对的value值

User-Agent注入

注入点在USer-Agent

使用BurpSuite修改USer-Agent的值

Referer注入

注入点在referer

Referer: allen' and extractvalue(1,concat(0x5e,database(),0x5e)) and '1
mysql> select 'allen' and '1';
 +-----------------+
 | 'allen' and '1' |
 +-----------------+
 |               0 |
 +-----------------+
 1 row in set, 1 waring (0.00 sec)
 
 mysql> select 'allen' and extractvalue(1,concat(0x5e,database(),0x5e)) and '1';
 ERROR 1105 (HY000): XPATH syntax error: '^security' 

读取文件

利用SQL注入漏洞进行文件读取

load_file(path) #path是文件绝对路径,可以完成文件内容的读取。

前提

  • MySQL的配置文件mysql.inisecure_file_priv配置;

    参数 含义
    secure_file_priv=NULL 限制mysqld不允许导入导出(读写)操作
    secure_file_priv=‘c:/a/’ 限制mysqld的导入导出操作在某个固定目录(c:/a/)下,并且子目录有效
    secure_file_priv= 不对mysqld的导入导出操作做限制
  • 当前用户是否具有文件读写操作权限;

    # root@localhost
     select file_priv from mysql.user where user='root' and host='localhost';
    
  • 知道读取文件的绝对路径。

联合查询&读取文件

  1. 写入的文件路径为物理绝对路径,并且需要使用/来进行目录拼接
  2. 需要使用联合查询注入的页面显示位来完成文件内容读取

读取php脚本文件

  1. 使用联合查询注入的页面显示位来读取php脚本文件
  2. 由于读取的内容是php代码,浏览器认为它是网页源码的一部分而只在源码中显示,前端页面不显示是因为php代码的解析器只在服务器端

读取其他后缀的文本文件

读取文件内容的其他后缀我呢间的效果和直接读取txt文本我呢间一样

报错注入&读取文件

  1. 报错注入也需要用到页面显示位来读取文件内容
  2. 由于报错的信息有长度限制,每次只显示32位字符,所以需要结合substr函数进行截断读取
and updatexml(1,substr(load_file('path'),1,10),3) --+

文件写入

利用SQL注入漏洞进行文件写入

select a,b,c into outfile "path" #a,b,c为写入的内容,path是文件绝对路径

前提

  • MySQL的配置文件mysql.inisecure_file_priv配置;

    参数 含义
    secure_file_priv=NULL 限制mysqld不允许导入导出(读写)操作
    secure_file_priv=‘c:/a/’ 限制mysqld的导入导出操作在某个固定目录(c:/a/)下,并且子目录有效
    secure_file_priv= 不对mysqld的导入导出操作做限制
  • 当前用户是否具有文件读写操作权限;

    # root@localhost
     select file_priv from mysql.user where user='root' and host='localhost';
    
  • 文件写入不能覆盖服务器上已有同名文件。

当前文件所在位置

mysql> select @@datadir;
 +-------------------------+
 | @@datadir               |
 +-------------------------+
 | E:\phpStudy\MySQL\data\ |
 +-------------------------+
 1 row in set (0.00 sec)

联合查询&写入文件

  1. 利用‘’空字符作为占列位。
  2. 所有的列都可以用来放置写入的文件内容,不一定非要页面显示位。

报错注入无法进行写入操作

posted @ 2024-11-04 21:32  憂心如惔  阅读(26)  评论(0)    收藏  举报