文章导航:
- 1、什么是kali linux web 渗透测试
- 2、fortify sca及webinspect分别做哪一方面的安全测试
- 3、如何进行web渗透测试
- 4、web渗透测试之攻破登录页面
- 5、渗透测试报告自动生成工具
- 6、如何进行Web渗透测试
什么是kali linux web 渗透测试
就是用Kali Linux上面的工具对某个Web网站进行渗透,这个渗透的过程是一个完整的入侵的过程,从而测试Web网站是否有被入侵的可能,并找出网站所存在的漏洞,最后可能还要向对方提交一份渗透测试报告。
fortify sca及webinspect分别做哪一方面的安全测试
fortify sca是做源代码扫描的,白盒工具
webinspect是做WEB应用扫描的,渗透测试,黑盒工具。
如何进行web渗透测试
Web应用的渗透测试流程主要分为3个阶段:信息收集、漏洞发现、漏洞利用。
一、信息收集
在信息收集阶段,我们需要尽量多的收集关于目标web应用的各种信息,比如:脚本语言的类型、服务器的类型、目录的结构、使用的开源软件、数据库类型、所有链接页面,用到的框架等
二、漏洞发现
在这个阶段我们在做测试的时候要对症下药,不能盲目的去扫描,首先要确定目标应用是否使用的是公开的开源软件,开源框架等、然后在做深一度的漏洞扫描。
三、漏洞利用
针对不同的弱点有不同的漏洞利用方式,需要的知识点也比较多。一般这个阶段包括两种方式,一种是手工测试,一种是工具测试。
手工测试
手工测试是通过客户端或服务器访问目标服务,手工向目标程序发送特殊的数据,包括有效的和无效的输入,观察目标的状态、对各种输入的反应,根据结果来发现问题的漏洞检测技术。
工具测试
网络上有很多好用的免费利用工具,比如针对sql注入的sqlmap、针对软件漏洞的matesploit等。
web渗透测试之攻破登录页面
当我们在做渗透测试时web渗透测试常用工具,无论厂商项目还是src众测项目,都会遇到给一堆登录系统web渗透测试常用工具的URL,然后让我们自己去测,能不能进去全看天的状况,本文将讲一下怎么突破这种封闭的web系统,从而进行更深层次的渗透 ,学完后web渗透测试常用工具你会发现,其实你就是系统管理员。
如果能直接绕过登录系统界面,后面的就比较好做web渗透测试常用工具了,目前常见的登录系统绕过方法有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="984d-49a0-519b-4d21 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文件,就会发现其实自己就是系统管理员,只是我把密码忘了,现在我要用上面的方式进入。
渗透测试报告自动生成工具
公众号web渗透测试常用工具:白帽子左一
领取配套练手靶场、安全全套课程及工具...
在安服仔的日子里web渗透测试常用工具,发现其他人输出的渗透测试报告结果不规范,主要在报告质量、内容、字体、及修复方案中存在诸多问题,而且 大部分安服仔需要对每次的项目结果进行统计整理,方便后续跟踪复测。
因此研发了 Savior—渗透测试报告辅助生成系统 , 起这个名字也是为了拯救大多数渗透测试工程师,
告别繁琐的渗透测试报告编写过程及漏洞统计过程。
前端 : Ant Design Pro
后端 : Django REST Framework
数据库 : Mysql
用户管理 : 主要是方便统计漏洞的发现者,后续可能大概也许会添加漏洞统计模块,根据提交数据、漏洞类型、时间等进行统计报表,当前用户管理模块仅允许通过Django后台进行修改,前端只负责展示,主要是web渗透测试常用工具我太懒了。
项目管理 : 根据项目的不同可上传项目的专属渗透测报告模板,并可以根据需要进行模板自定义模板(/Demo/demo.docx);
模板自定义 : 不用修改源代码,仅需修改word即可进行模板自定义;
整改建议管理 : 此平台主要就是为了体现标准化输出,因此可通过内置漏洞描述及修复建议进行快速输出,并支持自定义修改(/Demo/常规WEB渗透测试漏洞描述及修复方法.docx);
一键生成: 通过提交报告模块,内联项目模板,快速生成渗透测试报告,真正达到了一键生成,并确保报告内数据准确、字体统一、格式标准;
自动邮件: 在生成报告后可通过用户管理配置的自动邮件发送功能进行邮件通知,可自定义邮件模板,这样再报告给客户的时候就可以直接转发了(暖男功能);
漏洞统计: 每次渗透过后,需要挨个查找报告进行统计整理,现在只要提交报告后,后台会自动联动;
漏洞报表一键导出
漏洞跟踪: 增加了漏洞状态字段,创建报告后,漏洞状态默认为新增,漏洞管理模块可进行复测,包括已整改、未整改两种状态;
Demo :
演示账号 :admin
演示密码 : Savior@404
首先将代码clone到本地:
Docker部署
我们推荐使用Docker进行部署,相对于源码部署更为简单和快速。
部署前请务必先安装 Docker 及 docker-compose 。
修改配置文件
首先复制根目录的 .env.docker 并重命名为 .env , 修改其中的Email Settings和initial Administrator配置。
这两个配置分别控制邮件提醒,以及初始管理帐号密码及邮箱。
同时需要注意以下两点:
1. 务必把邮箱修改为自己邮箱,不然可能会出现非预期错误web渗透测试常用工具!
2. 如果使用阿里云、腾讯云服务器,请使用smtp的ssl协议,两家云厂商默认封禁了25端口。
一键启动
访问 即可看到页面。
修改启动端口
如果想修改启动端口,可以修改docker-compose.yaml文件中web容器的ports。
默认为8000:8000,比如要修改为8080端口可改为8080:8000。
所需环境:
前端环境
环境变量设置 创建字符集为utf-8编码的数据库。
复制**.env.docker为.env**,并配置数据库、邮箱、管理员等信息。
后端环境
源码部署环境:
前台页面 :
Django管理后台:
其中Savior平台包含两个后台页面。考虑到安全性,目前用户管理、项目管理托管于Django管理后台(主要是这两个模块不会写),其余功能均可通过前台页面实现。
前台页面 :
Django管理后台 :
访问Django管理后台: ,
请完善API用户的Name、Avatar、Autosentmail三个字段,分别控制报告的作者、头像(图片Url)、生成报告后自动发送渗透测试报告到邮箱。
访问Django管理后台:
请通过APIProjects进行添加项目,可根据不通项目选择不通的渗透测试报告模板。
参数说明:Project logo(项目Logo)、Project center(项目名称)、Project description(项目描述)、Project template(渗透测试报告模板,目前标准模板可使用Demo/demo.docx,如需自定义模板,请参考模版自定义部分)
访问 可进入Savior平台,通过个人设置整改设置添加漏洞模板可进行设置漏洞类型、漏洞描述、修复建议从而达到标准化。
目前整理了一些通用的修复建议模板,请参考Demo/常规WEB渗透测试漏洞描述及修复方法.docx。
目前根据我经常使用的渗透测试报告模板生成了一个demo版本(请参考/Demo/demo.docx)。
当然您也可以根据自己的需求进行模板自定义,其中仅需在WORD模板中进行参数替换,目前Savior中具体参数如下:
以下漏洞详情请利用{%tr for vuls in vuls %}{%tr endfor %}进行循环遍历。
如想列出所有漏洞URL,则使用参数{%tr for vuls in vuls %}{{item.vul_url}}{%tr endfor %}
注: Savior平台渗透测试模板遵循Jinja2语法,更多内容请参考
如果我们完善了用户信息、项目管理、整改设置后,就可以通过前端页面进行创建报告,其大概流程如下:首先完善报告的基本信息。
选择漏洞管理的添加漏洞功能。选择漏洞类型后,漏洞名称、漏洞描述、修复建议会根据整改设置进行自动联动,并可根据需求进行自定义修改。
需要注意的是漏洞详情处如果需要插入XSS语句,请进行url编码后进行输入web渗透测试常用工具!
注: 未提交前请勿刷新页面,此时漏洞详情保存为前端。提交后会自动生成渗透测试报告并进行下载。
打开报告会提示更新域,更新请选择是,再选择更新整个目录,此问题主要是为了更新目录,不然渗透测试报告中目录无法自动更新。
如果在用户管理打开了Autosentmail功能,渗透测试报告会自动发送至我们邮箱,方便转给甲方爸爸。
访问Savior平台,选择漏洞列表可进行漏洞统计并进行漏洞复测。
其中漏洞包含三个状态(新发现、已修复、未修复)。
通过选择导出数据功能,可将漏洞列表导出为Excle。
用户管理、项目管理迁移至前端
大数据看板
感谢 echo503 提供的项目帮助
感谢 lp0int 提供的项目帮助
项目框架及 Docker 部署参考 Github-Monitor:( )
原文地址:
如何进行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="9db5-8f47-0742-f4f2 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)如何预防?
测试人员在进行需求检查时,应该对出错信息 进行详细查,比如是否给出了出错信息,是否给出了正确的出错信息。
发布于 2023-01-26 13:04:31 回复
发布于 2023-01-26 09:46:07 回复
发布于 2023-01-26 18:15:37 回复
发布于 2023-01-26 11:24:27 回复