干货 | 渗透测试全流程归纳总结

avatar
作者
筋斗云
阅读量:9

nmap -p port --script=http-waf-detect ip

wafw00f -a example.com

sqlmap-u “http://www.vxxxx.org/ex.php?id=1” --identify-waf

bypass: 手工注入,详见笔记

1.4目录、后台和敏感路径文件扫描

御剑目录(土司专版,笔记里有)、后台扫描(图片属性地址暴露),

完善目录和账密字典方法:

基础字典包合并去重

  dymerge.py -u

  python pydictor.py -tool uniqbiner /my/dict/dirpath --output uniq.txt

  python pydictor.py -tool uniqifer /tmp/dicts.txt --output /tmp/uniq.txt

2.人工浏览\逐个请求burp

非常重要,有必要手动去浏览每个页面,点击页面上每一个跳转,这样在Burp的sitemap里面就可以出现这些请求和响应。

图片后台地址\图片后面的信息

跳转参数\奇怪的参数

泄露邮箱等社工信息

业务逻辑\架构

3.自动化

自动化渗透测试框架:(待补充)

Sn1per

Ary

自动化信息收集效率较高,从github上多找一找,也可以自己写

0x02 漏洞挖掘1.漏洞扫描工具

注意:登录类网站扫描要带cookies扫才能扫到

1.1Nikto Web服务漏洞扫描器

Tips:利用-Format选项来导出特定格式的扫描结果,使扫描结果更容易阅读和分析。

nikto -host http://example.com -output ~/nikto.html -Format html

NIKTO使用方法:1、命令:nikto -update #升级,更新插件;2Nikto-list-plugins #查看插件;3Nikto-host http://1.1.1.1 #扫描目标:域名方式;4Nikto-host http://1.1.1.1 -output #扫描并输出结果5Nikto-host 1.1.1.1-port 80#扫描目标:ip地址加端口号6Nikto-host www.baidu.com -port 443-ssl #扫描https网站7Nikto-host 文件名.txt #批量扫描目标8、nmap -p80 192.168.1.0/24-oG - | nikto -host -      #利用nmap扫描开放80端口的IP段并且oG(nmap结果输出并整理)通过管道的方式“|”用nikto进行扫描9、nikto -host 192.168.0.1-useproxy http://localhost:8070      #利用代理进行扫描10、-vhost     #当一个网站存在多个端口时可以使用-vhost遍历所有网站进行扫描或一个ip对应多个网站11Nikto交互形参数配置文件:路径:/etc/nikto.confUserAgent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本;在nikto中最好修改成别的浏览器user agent;设置cookie:在配置文件中找到cookie进行设置(#STATIC-COOKIE= "cookie1"="cookie value";"cookie2"="cookie val"IDS逃避技术:主要为了躲避IDS、IPS检测告警-evasion #此参数使用方式(Nikto -host http://1.1.1.1 -evasion 1234)逃避方式共8种:1、随机url编码,2、自选路径,3、过早结束的URL4、优先考虑长随机字符串5、参数欺骗6、使用TAB作为命令的分隔符,7、使用变化的URL8、使用Windows路径分隔符

1.2AWVS漏扫

这个没什么好说的,破解版到处都是。

1.3NESSUS

实时更新插件的漏扫,很好用,就是激活流程麻烦。

1.4Xray自动化的漏洞挖掘

burp+xray:

BurpSuite + Xray 被动扫描配置 - Ritte - 博客园

或者直接挂浏览器,点到哪里,扫到哪里

xray+各种漏扫联动

1.5Fuzz

Fuzz可以发现应用程序中没有被引用但是确实是可以访问的页面。

Discover Content是Burp中专门用于此目的的工具。

Burp Intruder也可以通过字典攻击来实施强制浏览(通常是在url参数和文件路径部分进行修改),爆破、注入等。

FuzzDB包含一些用于此目的的非常牛逼的字典。

2.挖掘漏洞2.1SQL注入:

初步测试:见框就上,加' " ) ))% and 1=1 and 1=2and2-1 or ,

抓包爆破常用SQL注入payload字典,上burp intruder

纯手工注入和手工绕过waf,详见笔记。

通过搜索引擎,批量查找注入点,详见笔记。

然后用傀儡注入点批量搜集工具

实操案例: sql注入思路(登录界面)和网络常用端口_u011975363的专栏-CSDN博客

超级SQL注入工具(github)

sqlmap一把梭:注意:命令为kali linux中运行的 (windows中用python sqlmap.py执行)注入六连:1.sqlmap-u  "http://www.xx.com?id=x"查询是否存在注入点2.--dbs         检测站点包含哪些数据库3.--current-db    获取当前的数据库名4.--tables -D "db_name"获取指定数据库中的表名 -D后接指定的数据库名称5.--columns  -T "table_name"-D "db_name"获取数据库表中的字段6.--dump-C "columns_name"-T "table_name"-D "db_name"获取字段的数据内容COOKIE注入:sqlmap -u "http://www.xx.com/xxx.asp"--cookie "id=XXX   cookie"--level 2cookie注入 后接cookie值POST注入:1)目标地址http:// www.xxx.com /login.asp2)打开burp代理3)点击表单提交4)burp获取拦截信息(post)5)右键保存文件(.txt)到指定目录下6)运行sqlmap并执行如下命令:用例:sqlmap -r okay.txt  -p  username// -r表示加载文件(及步骤(5)保存的路径)-p指定参数(即拦截的post请求中表单提交的用户名或密码等name参数)7)自动获取表单:--forms自动获取表单例如:sqlmap -u www.xx.com/login.asp --forms8)指定参数搜索:--data例如:sqlmap -u www.xx.com/login.asp --data "username=1"常用指令:1.--purge      【重新扫描(--purge 删除原先对该目标扫描的记录)2.--tables      【获取表名3.--dbs         【检测站点包含哪些数据库4.--current-db    【获取当前的数据库名5.--current-user  【检测当前用户6.--is-dba   【判断站点的当前用户是否为数据库管理员7.--batch      【默认确认,不询问你是否输入8.--search  【后面跟参数 -D -T -C 搜索列(C),表(T)和或数据库名称(D)9.--threads 10【线程,sqlmap线程最高设置为1010.--level 3【sqlmap默认测试所有的GET和POST参数,当--level的值大于等于2的时候也会测试HTTP Cookie的值,当大于等于3的时候也会测试User-Agent和HTTP Referer头的值。最高为511.--risk 3【执行测试的风险(0-3,默认为1)risk越高,越慢但是越安全12.-v   【详细的等级(0-6)0:只显示Python的回溯,错误和关键消息。1:显示信息和警告消息。2:显示调试消息。3:有效载荷注入。4:显示HTTP请求。5:显示HTTP响应头。6:显示HTTP响应页面的内容13.--privileges  【查看权限14.--tamper xx.py,cc.py   【防火墙绕过,后接tamper库中的py文件15.--method "POST"--data "page=1&id=2"【POST方式提交数据16.--threads number  【采用多线程 后接线程数17.--referer  ""【使用referer欺骗18.--user-agent ""【自定义user-agent19.--proxy “目标地址″   【使用代理注入sqlmap常用路径:1.添加表字段的目录在/usr/share/sqlmap/txt/common-tables.txt2.存放扫描记录的目录在/root/.sqlmap/output高阶玩法:自己写tamper.py

2.2XSS:

xss漏洞原理分析与挖掘方法 - 知乎

web漏洞 | XSS(跨站攻击脚本)详解

XSS汇总

XSS小结 - 先知社区

2020跨站点脚本[xss]速查表|雨苁

XSSer自动化工具

XSStrike 自动化绕过WAF

客服对话系统上XSS打cookie

2.3文件上传

字典生成

文件上传绕过总结,详见笔记

目录穿越

上传后如果没有被文件重命名,可以在文件名值做目录跳转

注意一些像目录的参数名

dir path location url

文件头绕过

修改上传类型 Content-Type

双文件上传

截断

长文件名长Content-Disposition%00截断

特殊文件

svg / html / htm / swfxsspdfchrome 里可以跳转cer / asa / spx / php5 / phtml

可能会被当做动态语言解析

.htaccess / .user.ini / web.config / web.xml

修改解析规则

.xls / .xlsx

POI Excel XXE

.tar / .tar.gz / .zip

可能存在文件释放目录跳转问题

.pkl

python反序列化文件

.xml

可能有 XXE

.yaml / .yml

YAML 反序列化

.jar / .class

上传到 java classpath 的目录下,类被加载时执行代码

无大小和次数限制

无限上传制造垃圾数据堵死硬盘

有图片加工的地方可以注意一下imagemagick命令执行

文件读取

读取系统敏感文件

文件包含

可读取文件或代码执行

文件删除

删除配置文件可破坏网站删除安装锁可重装

文件解压

如果上传文件为 tar / tar.gz 类型,可以尝试构压缩包内文件名为../../../../xxx 的tar包

文件导出

如果是CSV 或者 Excel可以注意一下CSV注入 =2222-1 -1+1=2222-1 @=2222-1 \r\n=2222-1 111,=2222-1,

2.4命令执行

命令注入

--xxxx 参数注入| 和 | | 与符号& 和 && 与符号; 分号${}

代码执行

表达式freemarkerOGNLSpeljsel

非表达式(php)

evalassertcall_user_func() / call_user_func_array()preg_replace()create_function()array_map()array_filter()usort() / uasort()

反序列化

php 源文件拼接写java反序列化远程 jar 加载反射机制jsp 源文件拼接写入

2.5弱口令及字典破解

后台弱口令爆破撞库

(尝试万能密码、特定资产常用密码、弱口令后再撞库、有的数据库要输对用户名再注释

我的github有收集的字典)

asp aspx万能密码1"or "a"="a2')or('a'='a3or1=1--4'or 1=1--5:a'or'1=1--6"or 1=1--7'or'a'='a8"or"="a'='a9'or''='10'or'='or'11: 1or'1'='1'=112: 1or'1'='1'or1=113: 'OR 1=114: "or 1=115: 'xor16: 新型万能登陆密码用户名 ' UNION Select 1,1,1 FROM admin Where ''='(替换表名admin)密码 1Username=-1%cf' union select 1,1,1 as password,1,1,1 %23Password=117..admin' or 'a'='a 密码随便PHP万能密码'or'='or''or 1=1/* 字符型 GPC是否开都可以使用User: somethingPass: ' OR '1'='1jsp 万能密码1'or'1'='1  admin' OR 1=1/*用户名:admin 系统存在这个用户的时候 才用得上密码:1'or'1'='1pydictor、cupp、crunch字典生成工具、自写字典生成py(小黑的人名字典py);dymerge字典合并去重工具、自己写去重py;hydra爆破工具

tips:

超级弱口令检验工具

burpsuite 爆破

使用弱用户名对密码进行暴力破解

使用弱口令密码对用户名进行暴力破解

2.6逻辑漏洞

Cookie

一些网站会利用 Cookie 是否为空、Session 是否为 true 来判断用户是否可以登录,只要构造一个 Cookie 或 Session 为 true 就可以绕过认证登录

通过修改 Cookie 中的某个参数来实现登录其他用户,要抓包具体分析

数据篡改

数量、金额、ID、邮箱等数据:最大超过限制、负数、0、其他用户数据,提交后查看是否进入正常业务流程,是否存在越权

例子:修改普通用户密码,抓包Referer和 POST 中的普通用户改成 admin提交数据后,直接返回了 admin 的密码修改页面,利用逻辑漏洞获取超级权限抓包修改手机号参数为其他号码进行尝试,例如办理查询页面,输入自己的号码然后抓包,修改手机号为他人号码,查看是否可以查询他人业务手机号 篡改邮箱或者用户 篡改订单ID 篡改商品编号 篡改用户ID 篡改金额 篡改商品数量 篡改

验证码绕过

drop掉页面

返回包里可能就有验证码

一次验证码多用

验证码识别插件,burp

注册界面:

任意用户注册

可爆破用户名

注入

XSS

登录界面:

爆破用户名、密码

注入

万能密码

Xss Xss+Csrf

修改返回包信息,登入他人账户

修改cookie中的参数,如user,admin,id等

忘记密码界面:

任意密码重置概要:

1.重置一个账户,不发送验证码,设置验证码为空发送请求。

2.发送验证码,查看相应包

3.验证码生存期的爆破

4.修改相应包为成功的相应包

5.手工直接跳转到校验成功的界面

6.两个账户,重置别人密码时,替换验证码为自己正确的验证码

7.重置别人密码时,替换为自己的手机号

8.重置自己的成功时,同意浏览器重置别人的,不发验证码

9.替换用户名,ID,cookie,token参数等验证身份的参数

10.通过越权修改他人的找回信息如手机/邮箱来重置

用户凭证暴力破解(验证码)

绕过的话,这里可以考虑一个现状:

例如:phone=18888888888abc国内很多情况下都没有过滤字符和限制输出长度,验证很有可能只是简单的处理只要更换手机号后面的字符,就可以绕过请求过于频繁的限制但是校验时,手机号后面的字符会被过滤,也就是可以利用暴力破解验证码(不计入次数)所以只要在暴力破解的同时,改变手机号后面的字符即可达到漏洞效果根据手机号找回密码,但是验证次数被限制,抓包可以尝试在手机号后面添加不为数字的字符,查看是否过滤根据手机号找回密码,随便输个验证码,抓包暴力破解验证码(假如只有四位),很快就可以破解出来四位或六位纯数字,验证码次数未限制例如:如果验证码次数限制,破解一会就会提示请求过于频繁,这时就需要绕过限制例如:通过密保问题找回密码,查看源码,密保问题和答案就在源码中显示

返回凭证(验证码 及 token)、邮箱弱 token、用户凭证有效性、重新绑定

抓包,可以发现返回的数据中有一个加密的字符串(token),先记录下这个加密字符串

继续按照正常流程,登录邮箱获得验证码,返回填写验证码后,进入下一个填写新密码页面,发现 URL 后新增了一个加密验证的字符串

这个字符串就是之前数据包中记录的字符串,所以邮箱验证码这个环节可以绕过,直接用他人邮箱抓包获得加密字符串就可以重置他人密码

根据手机号找回密码,抓包,可以发现验证码直接显示 verifycode=xxxx,或者由 md5 加密后显示,解密即可(同理,有的时候输入用户名,抓包可以看到返回的手机号等其他信息)

根据邮箱找回密码,抓包直接返回,密码找回凭证可能在页面中

例如:利用两个帐号同时点击找回密码,去邮箱查看找回密码的链接,发现两者的随机 token 只差 1-2,而且可以猜测出为服务器时间所以可以用一个未知帐号和一个已知帐号同时点击找回密码,稍微遍历一下随机 token,就可以构造出未知帐号的密码找回链接例如:通过邮箱找回密码,正常流程去邮箱查看重置密码链接,发现链接处有一串 md5 加密字符串字符串解密,类似 149129327710位),可以判断为 Unix时间戳,(可能md5)重置他人密码只需要利用他人邮箱发送重置密码邮箱,在短时间内对 Unix时间戳 进行暴力破解,即可获得重置密码的链接重置密码链接直接使用用户名来区别,改变用户名即可更改他人密码

绕过token

正常流程下,对每个功能模块进行抓包,分别是发送验证码,验证验证码是否正确,获取 token,重置密码

接下来,用他人帐号通过邮箱验证,抓包,将其中 Cookie 内从 JSESSIONID 开始的内容替换至正常流程的发生验证码包内,同时替换自己接受验证码的邮箱,提交

通过邮箱获取验证码后,将验证码、Cookie、他人帐号、自己邮箱替换至验证验证码模块,提交(不用在意返回是否错误)

继续替换内至获取 token 模块,提交获取 token

最后将获取的 token 和上面的内容替换至最后的重置密码模块,提交成功修改密码

例如:通过邮箱找回密码,访问链接重置密码,输入新密码后提交时抓包,虽然有 token,但是依然可以直接修改 用户ID 进而修改他人密码例如:通过他人手机号找回密码,抓包,将他人手机号替换成自己的手机号,获取验证码,提交后修改密码通过自己手机号找回密码,获取验证码后抓包,将数据包中的 username 改为他人用户名,提交后成功修改他人密码

短信验证码、邮箱 token、重置密码 token

例如:通过邮箱找回密码,URL 链接中修改 用户ID 为他人,邮箱不变,之后通过链接可以将他人账户绑定为自己的邮箱,之后通过邮箱找回密码例如:给已知账户绑定手机,发现绑定手机的 URL 链接中有 uid 参数,修改 uid 参数为他人的,即可实现将他人的账户绑定上自己的手机,之后通过手机来修改密码修改个人资料处抓包,修改 userId 为他人,修改 mobilePhone 为自己的手机,即可实现将他人的账户绑定上自己的手机,之后通过手机来修改密码

手机绑定、邮箱绑定

例如:通过密码保护问题找回密码,抓包,将密码保护问题删除,直接修改密码,提交注:此处密保问题和新密码在同一页面例如:正常流程,通过手机号提交验证码找回密码处抓包,记录下这个包的内容通过已知用户名找回密码,查看源代码可以发现用户其他信息(比如:手机号、邮箱)通过发现的手机号选择通过手机找回密码,随便输入短信验证码,抓包修改之前记录下的包的内容,将其中 Session id、用户ID 修改为刚刚从其他用户名抓包获得的内容,提交这个包,即可成功修改他人密码

最终提交步骤

例如:通过邮箱找回密码,最后通过链接至修改密码页面,修改密码后提交,抓包,获得 Uid参数,修改为他人,即可修改其他用户密码

服务器验证的验证逻辑为空(绕过认证)

例如:通过邮箱找回密码,点击请重新发送邮件处抓包,将邮箱改为自己的邮箱,通过链接成功修改密码例如:通过手机找回密码,输入验证码和新的密码,F12 审查元素,修改自己的手机为他人手机,提交成功修改他人手机(也可以抓包修改)例如:正常流程下,密码找回,查看最后设置新密码页面的 URL,记录下来继续返回密码找回处,输入其他用户名,提交找回申请,直接访问上面记录下的修改密码页面,成功修改密码也可以正常流程下,修改密码页面抓包,修改其中的 USERNAME_COOKIE 为其他用户(有可能会经过编码,比如 base64),提交即可修改其他用户密码如果抓包其中有 step 参数,可以修改这个参数为最后一步(比如:5),提交便可略过之前的步骤跳过验证步骤、找回方式、直接到设置新密码页面例如:通过用户名找回密码,提交后会自动发送验证码到手机中,所以抓包,修改手机为自己的手机(如果其中有 type 之类的参数,也可以尝试修改,有 email之类的参数,可以尝试删除内容)发送修改后的包,手机成功接收验证码输入验证码,继续发送,抓包,如果有 type 之类的参数,可以继续尝试修改,发送就可以成功修改密码例如:通过手机找回密码,随便输入验证码,抓包,发送,拦截返回包修改返回包中的返回码,继续发送,说不定就可以绕过验证,直接跳到修改密码的页面通过手机找回密码,正常流程下到重置密码页面,抓包查看返回数据中有一段加密字符串利用他人手机找回密码,URL 跳转到验证身份页面,链接中就有一段加密字符串,记录下,随便输入验证码抓包,修改包中数据为正常流程下的数据,替换加密字符串,Forward发送,就可以绕过验证码,直接修改密码

输入用户名,加个单引号报错,说明可能存在报错,抓包,保存为 txt 文件,导入 Sqlmap 中跑一遍

找回密码处存在注入漏洞(见框就×)

通过邮箱找回密码,正常流程下,抓包查看提交验证码后返回的数据,发现有加密字符串,这个加密字符串和后面重新设置新密码 URL 链接中的加密字符串一样,所以可以利用这个加密字符串

根据上面提交验证码的抓包,修改其中的 User 为其他用户(User 有可能会使用 md5 加密),发送,就可以返回其他用户的加密字符串

重新返回到找回密码首页,利用其他用户找回,点下一步,到输入验证码处(也有可能需要点击发送验证码),直接修改 URL 链接,加入加密字符串,可以直接绕过验证码,重置密码

session覆盖漏洞

注册重复的用户名,例如 admin,相当于修改了密码

同一浏览器,首先输入自己的账户进行邮箱密码找回,进入邮箱查看链接,接着输入他人账户,进行密码找回,返回刚刚自己的邮箱点击链接,由于 session 覆盖导致了,这个链接成为了修改他人密码的链接,成功修改他人密码

尝试正常密码找回流程

选择不同的找回方式,记录所有数据包

邮箱找回密码

根据密码保护问题找回密码

根据手机号找回密码

分析数据包,找出敏感部分

分析后台找回机制所采用的验证手段

修改数据包进行验证是否存在密码找回漏洞

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!