SQL宽字节注入,使用sqlmap注入

宽字节注入

常见的三种编码方式

UTF8  三个16进制组成一个汉字
GBK   两个16进制组成一个汉字
ASCII 一个16进制组成一个字符

宽字节注入原理

和SQL注入原理类似,破坏原SQL语句,使用注释符修复或使用内联的方式,修改SQL语句,令原SQL语句执行修改后的SQL语句。

根据URL编码和以上三种编码方式结合的注入

'       %27
"       %22
#       %23
\       %5c  
%       %25
说明:为了 \ 在编码中有意义,在GBK编码中可以与 %df 或 %81 或 %ec 结合。但在UTF8中不幸没有

思路:通过对特殊字符进行编码方式绕过网站对SQL注入的防护。

网站常用的URL进行处理的方式

    addslashes() 对URL输入的特殊字符处理,但存在宽字节注入漏洞
    PDO连接数据库,在PHP5.3之前同样存在宽字节SQL注入漏洞
    MySQL连接数据库,两种方式设置数据库编码:
        1。使用 mysql_query('set names "GBK"');需要和mysql_real_escape_string()配合使用,才可以预防宽字节注入。
        2。使用 mysql_query('set names "GBK"');和 mysql_real_escape_string()配合是不能预防宽字节注入的。

    注意:php默认会对URL的参数进行一次转码。网站通常习惯使用 urldecode() 函数 将参数一次性转码转成原始数据。   

urldecode()和 rawurldecode() 区别在于 rawurldecode() 会将 + 进行转码

http头注入

    User-Agent:浏览器像服务器表明身份信息,识别客户端的操作环境信息
    Cookie:辨别用过户的身份标识
    X-Forwarded-For:建成XFF头,HTTP客户端的真实IP(关于注入:有些网站在记录访问者IP地址时,如果写入数据库,就可能存在注入漏洞)
    Referer:浏览器向WEB服务器表明自己的来源连接
    Host:客户端指定自己想访问的WEB服务器的域名/IP 地址和端口

关于使用sqlmap的技巧

如果找到注入漏洞,在常规不能使用sqlmap进行注入的情况下,则通过抓包,在此漏洞的基础上创建该漏洞类型的SQL语句,嵌入到该漏洞中,连接sqlmap,用*指定注入点。可以多线程(–thread 上限是10个) 使用–technique “BEUSTQ”可以只进行该类型的注入,加快速度。

    BEUSTQ的含义:
        B:Boolean-based blind  布尔类型注入
        E:Error-based  报错型注入
        U:Union query-based  可联合查询注入
        S:Stacked queries  多语句查询注入/堆叠注入
        T:Time-based blind  基于时间的延迟注入
        Q:Inline Queries  嵌套内联查询注入

实际操作

宽字节注入

环境

根据提供centos7的虚拟机,测试老司机开车网站的宽字节注入漏洞,同时可以通过sqlmap跑出数据

步骤

1。抓包


2。确定是 ‘ 款字符注入,编写payload 导入sqlmap 去掉文档中不必要的 *

3。使用sqlmap跑数据库信息

sqlmap -r "D:\1.txt"  --dbs --thread 10执行(线程上限是:10)


4。指定漏洞爆破数据库

5。–dump数据

sqlmap -r "D:\1.txt"   --thread 10 --technique B  -D test –dump

HTTP头注入

准备环境

根据提供centos7-留言板的虚拟机,测试留言板系统登陆页面的请求头ip注入,同时可以通过sqlmap跑出数据。

步骤

1。根据提供centos7-留言板的虚拟机,测试留言板系统登陆页面的请求头ip注入,同时可以通过sqlmap跑出数据。

2。使用sqlmap进行爆破

Sqlmap确定漏洞
sqlmap -r "C:\Users\ROC\Desktop\1.txt" --thread 10

sqlmap -r "C:\Users\ROC\Desktop\1.txt" --thread 10 --dbs


   转载规则


《SQL宽字节注入,使用sqlmap注入》 Evolyutsiya 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录