宽字节注入
常见的三种编码方式
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