2.7 HTTP参数污染(HPP)
参数污染(HTTP Parameter Pollution,HPP),通过下面的例子来看一下参数污染。
假设有个URL:http://www.xxxx.com/search.XXX?id=120&id=110。
- PHP会理解成id=110 #选择了第一个参数,放弃了第二个参数。
- JAVA会理解成id=120 #选择了第二个参数,放弃了第一个参数。
- 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的防护方法主要有以下两点。
- 检查URL格式是否存在多同名参数。
- 根据当前语言如何处理多参数做响响应处理。
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:和后面所跟的关键词之间不要有空格 |
""《》 |
精确匹配,让百度不拆分查询词 |
用""或《》(中英文均可) |
"探索式软件测试" |
书名号会出现在搜索结果中 |
- |
让搜索结果中不含有特定查询词 |
用减号 -语法 |
简历模板 -程序员简历 |
前一个关键词和减号之间必须有空格,没有空格减号会被当成连字符 |
下面介绍几个案例
- site:URL
作用:显实URL内所有收录的网页。
案例:site:www.3testing.com。显示网站www.3testing.com中所有网页。
- intitle: 内容
作用:标题中含有内容所有收录的页面。
案例:intitle: 小猪佩奇。标题中含有“小猪佩奇”的网页。
- 文件后缀 site:URL
作用:URL中指定格式后缀名所有收录的网页。
案例:php site:www.51testing.com。www.51testing.com网站中所有收入的php格式的网页。
- 关键字 inurl:名称
作用:URL中含有指定名称,含有“关键字”所有收录的网页。
案例:渗透测试 inurl:test。URL中含有test且关于“渗透测试”所有收录的网页。
- "关键字"
作用:关键字为“关键字”的查询,且关键字是不可拆分的。
案例:"探索式软件测试"。查询关键字为“探索式软件测试”所有收录的网页,关键字不可拆分,比如“探索式”“软件”“测试”“软件测试”。
- 关键字-去除内容
作用:查询内容为不包含“去除内容”的“关键字”所有收录的网页。
案例:软件测试-软件自动化测试。不包含“软件自动化测试”的“软件测试”的网站。
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. 对于信息侦探的防护方法
只有通过类似防火墙、安装防病毒工具、加强人自身和安全保护等手段才可以部分防止信息侦探。