2.7 HTTP参数污染(HPP)
参数污染(HTTP Parameter Pollution,HPP),通过下面的例子来看一下参数污染。
假设有个URL:http://www.xxxx.com/search.XXX?id=120&id=110。
l PHP会理解成id=110 #选择了第一个参数,放弃了第二个参数。
l JAVA会理解成id=120 #选择了第二个参数,放弃了第一个参数。
l ASP会理解成id=110,120 #两个参数同时选择。
1. PHP参数污染
先来看一下PHP,index.php代码如下。
<?php
$str = $_REQUEST['str'];
echo $str;
?>
当URL为“http://..../index.php?str=hello&str=world”,页面显示“world”字符串。
当URL为“http://..../index.php?str=hello&str=<script>alert(1)</script>”,JavaScript代码“<script>alert(1)</script>”被激活。
2. JAVA参数污染
Jsp的index.jsp代码如下。
<%
Stringusername=request.getParameter("username");
%>
<%=username%><br>
当URL为“index.jsp?username=hello&username=world” ,页面显示“hello”字符串。
3. HPP的威胁
HPP的威胁主要在于它可以绕过前端代码的检查。下面这段代码通过JavaScript通过黑名单的方法,来检查参数中是否含有不允许出现的字符,代码如下。
function GetQueryString(name)
{
var reg = newRegExp("(^|&)"+ name +"=([^&]*)(&|$)");
var r =window.location.search.substr(1).match(reg);
if(r!=null)return unescape(r[2]); return null;
}
function checkQueryString(){
if(GetQueryString("id")=="script")
alert("参数不可以为script");
else{
window.location.href="wellcome.html";
}
}
</script>
</head>
<bodyonload="checkQueryString()">
如果URL为“http://www.mydomain.com/index.html?id=script”,页面会弹出提示框,内容为“参数不可以为script”。但是当URL为“http://www.mydomain.com/index.html?id=1&id=script”,JavaScript认为id=1,系统就进入到wellcome. html页面中了。
同样在WAF防火墙中选择的是第一个参数,比如系统中仍旧不允许出现script参数,对于URL为http://www.mydomain.com/index.jsp?id=1&id=script,WAF防火墙不会拦截,交给后端index.jsp去处理,script就被获取,这样黑客就可以采取行动了。
如果对于前面的,进行一下如下改动就可以防止HPP了,代码如下。
function checkurl(){
var test = window.location.href;
var url = test.split('?')[1];//获取所有参数
var myarray = url.split("&");//分离每个参数
var key="";
var prm="";
for (i=0;i<myarray.length;i++ )
{
key = myarray[i].split('=')[0]; //获取当前参数
value = myarray[i].split(‘=’)[1]; //获取当前值
if ((key=="id") &&(value.indexOf("script"))){
alert("参数不可以为script");
break;
}else{
window.location.href="wellcome.html";
}
}
}
4. HTTP的参数处理
28是各种常用的HTTP的参数处理情况(来源于网络)。
28 常用的HTTP的参数处理情况
5. HPP的防护方法
HPP的防护方法主要有以下两点。
l 检查URL格式是否存在多同名参数。
l 根据当前语言如何处理多参数做响响应处理。
2.8信息侦探
1. Baidu Hack
如果你的产品可以通过Internet访问,就可能被类似Google、百度等搜索工具搜索到,搜索工具给学习和生活带来了方便,同时也暴露了产品的信息。这里我们以百度作为例子进行介绍。9为Baidu Hack信息。
9 Baidu Hack
关键字 | 作用 | 使用方式 | 例子 | 注意事项 |
---|---|---|---|---|
intitle | 把搜索范围限定在网页标题中 | 关键的部分用intitle:开头 | 照片intitle:小猪佩奇 | intitle:和后面的关键词之间没有空格 |
site | 搜索某个网站中有想要的内容 | 插叙内容后面加上 site:网站域名 | php site:www.51testing.com | site:和后面的网站域名之间不要带空格,也不要带"http://" 。 |
inurl | 把搜索范围限定在特定url中 | 用inurl:,后面跟着url中出现的关键词 | 渗透测试 inurl:test(url里面含test) | inurl:和后面所跟的关键词之间不要有空格 |
""《》 | 精确匹配,让百度不拆分查询词 | 用""或《》(中英文均可) | "探索式软件测试" | 书名号会出现在搜索结果中 书名号括起来的内容不会被拆分 |
- | 让搜索结果中不含有特定查询词 | 用减号 -语法 | 简历模板 -程序员简历 | 前一个关键词和减号之间必须有空格,没有空格减号会被当成连字符 |
下面介绍几个案例
l site:URL
作用:显实URL内所有收录的网页。
案例:site:www.3testing.com。显示网站www.3testing.com中所有网页。
l intitle: 内容
作用:标题中含有内容所有收录的页面。
案例:intitle: 小猪佩奇。标题中含有“小猪佩奇”的网页。
l 文件后缀 site:URL
作用:URL中指定格式后缀名所有收录的网页。
案例:php site:www.51testing.com。www.51testing.com网站中所有收入的php格式的网页。
l 关键字 inurl:名称
作用:URL中含有指定名称,含有“关键字”所有收录的网页。
案例:渗透测试 inurl:test。URL中含有test且关于“渗透测试”所有收录的网页。
l "关键字"
作用:关键字为“关键字”的查询,且关键字是不可拆分的。
案例:"探索式软件测试"。查询关键字为“探索式软件测试”所有收录的网页,关键字不可拆分,比如“探索式”“软件”“测试”“软件测试”。
l 关键字-去除内容
作用:查询内容为不包含“去除内容”的“关键字”所有收录的网页。
案例:软件测试-软件自动化测试。不包含“软件自动化测试”的“软件测试”的网站。
2. nmap
nmap是一个信息侦探的工具,在本书下篇6.3.1中将会详细介绍。
3. DirBuster
DirBuster DirBuster是OWASP开发的一款专门用于探测WEB服务器的目录和隐藏文件的工具,在本书下篇6.3.2中将会详细介绍。
4. 指纹识别
指纹识别是将识别对象的指纹进行分类比对从而进行判别,指纹识别具有终身不变性、唯一性和便利性。计算机的指纹识别与人的指纹识别具有相同处。
1)通过截包工具获得
如29是通过截包工具Fiddler获取的一个HTTP请求包头,由此可以知道发起请求的客户端是64位的Windows 10操作系统。
29 常用的HTTP的参数处理情况
2)通过其他信息侦探工具获取的指纹信息
下面是通过nmap工具获得的
C:\Users\Jerry>nmap -O www.3testing.com
Starting Nmap 7.40 ( https://nmap.org ) at 2019-02-20 17:25?D1ú±ê×?ê±??
Nmap scan report for www.3testing.com (123.56.135.186)
Host is up (0.037s latency).
Not shown: 995 filtered ports
PORT STATE SERVICE
21/tcp open ftp
80/tcp open http
443/tcp open https
1433/tcp closed ms-sql-s
3306/tcp closed mysql
Device type: general purpose|storage-misc|broadbandrouter|router|media device|WAP
Running (JUST GUESSING): Linux 2.6.X|3.X (94%), HPembedded (91%), MikroTik RouterOS 6.X (90%), Infomir embedded (90%), Ubiquitiembedded (90%), Ubiquiti AirOS 5.X (90%)
由此可获知网站www.3testing.com所用的操作系统内核为Linux 2.6.X|3.X (94%)、 HP embedded WEB服务器等其他信息。
3)指纹识别工具
当然也可以使用一些专业的指纹识别工具进行指纹识别。
5. 对于信息侦探的防护方法
只有通过类似防火墙、安装防病毒工具、加强人自身和安全保护等手段才可以部分防止信息侦探。