掌控安全Web安全微专业笔记 (12)

iShot2020-10-14 00.22.06

第7题是在User-Agent注入

第8题在Referer注入

第9题是将IP放入数据库,可以注入到X-Forwarded-For: 中

4-4盲注 一、盲注介绍

所谓的盲注就是在服务器没有错误回显的时候完成的注入攻击。
服务器没有错误回显,对于攻击者来说缺少了非常重要的“调试信息”。

布尔盲注
只会根据你的注入信息返回Ture跟Fales,也就没有了之前的报错信息
时间盲注
界面返回值只有一种,true无论输入任何值返回情况都会按正常的来处理。加入特定的时间函数,通过查看web页面返回的时间差来判断注入的语句是否正确

二、盲注需要掌握的几个函数

length() 函数 返回字符串的长度

substr() 截取字符串 (语法:SUBSTR(str,pos,len);)

ascii() 返回字符的ascii码 [将字符变为数字wei]

sleep() 将程序挂起一段时间n为n秒

if(expr1,expr2,expr3) 判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句

三、盲注靶场的做法

猜解当前数据库名称长度:

id=1\' and (length(database()))>9#

利用ASCII码猜解当前数据库名称:

and (ascii(substr(database(),1,1)))=115--+ 返回正常,说明数据库名称第一位是s

and (ascii(substr(database(),2,1)))=101--+ 返回正常,说明数据库名称第二位是e

猜表名:

and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))=101--+ 返回正常,说明数据库表名的第一个的第一位是e

猜字段名

and (ascii(substr((select column_name from information_schema.columns where table_name=\'zkaq\' limit 0,1),1,1)))=102--+ 返回正常,说明zkaq表中的列名称第一位是f

猜内容

and (ascii(substr(( select zKaQ from zkaq limit 4,1),1,1)))=122--+返回正常,说明zKaQ列第一位是z

四、延时注入(时间注入)靶场做法

if(expr1,expr2,expr3) 判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句

and if(ascii(substr(database(),1,1))>120,0,sleep(10)) --+

4-5宽字节注入 一、魔术引号是什么?

我们现在要了解一个PHP的防御函数

magic_quotes_gpc(魔术引号开关)

magic_quotes_gpc函数在php中的作用是判断解析用户提交的数据,如包括有:post、get、cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的污染而出现致命的错误。

单引号(’)、双引号(”)、反斜线(\)与 NULL(NULL 字符)等字符都会被加上反斜线

magic_quotes_gpc的作用:当PHP的传参中有特殊字符就会再前面加转义字符\'\',来做一定的过滤

单引号和双引号内的一切都是字符串,那我们输入的东西如果不能闭合掉单引号和双引号,我们的输入就不会当作代码执行,就无法产生SQL注入,那我们该怎么办?

二、什么GBK编码格式

尽管现在呼吁所有的程序都使用unicode编码,所有的网站都使用utf-8编码,来一个统一的国际规范。但仍然有很多,包括国内及国外(特别是非英语国家)的一些cms,仍然使用着自己国家的一套编码,比如我国的gbk,作为自己默认的编码类型。也有一些cms为了考虑老用户,推出了gbk和utf-8两个版本(例如:dedecms)

我们就以gbk字符编码为例,拉开帷幕。GBK全称《汉字内码扩展规范》,gbk是一种多字符编码。他使用了双字节编码方案,因为双字节编码所以gbk编码汉字,占用2个字节。一个utf-8编码的汉字,占用3个字节。我们可以通过输出来验证这句话。

例如:0xD50×5C 对应了汉字“誠”,URL编码用百分号加字符的16进制编码表示字符,于是 %d5%5c 经URL解码后为“誠”。

三、宽字节SQL注入的原理

​ 前面讲到了GBK编码格式。GBK是双字符编码,那么为什么他们会和渗透测试发送了“巧遇”呢?

​ 宽字节SQL注入主要是源于程序员设置数据库编码为非英文编码那么就有可能产生宽字节注入

例如说MySql的编码设置为了SET NAMES \'gbk\'或是 SET character_set_client =gbk,这样配置会引发编码转换从而导致的注入漏洞。

宽字节SQL注入就是PHP发送请求到MySql时使用了语句
SET NAMES \'gbk\' 或是SET character_set_client =gbk 进行了一次编码,但是又由于一些不经意的字符集转换导致了宽字节注入。

上一个讲到了宽字节SQL注入的根本原因是

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzpdzz.html