信息收集
网络搜索
目录遍历:site:域名 intitle:index.of
配置文件泄露:site:域名 ext:xml | ext:conf | ext:cnf | ext:reg | ext:inf | ext:rdp | ext:cfg | ext:txt | ext:ora | ext:ini | ext:git | ext:svn | ext:DS_Store
数据库文件泄露:site:域名 ext:sql | ext:dbf | ext:mdb
日志文件泄露:site:域名 ext:log
备份和历史文件:site:域名 ext:bkf | ext:bkp | ext:bak | ext:old | ext:backup
登陆页面:site:f域名 inurl:login
SQL错误:site:foresealife.com intext:"sql syntax near" | intext:"syntax error has occurred" | intext:"incorrect syntax near" | intext:"unexpected end of SQL command" | intext:"Warning: mysql_connect()" | intext:"Warning: mysql_query()" | intext:"Warning: pg_connect()"
公开文件信息:site:域名 ext:doc | ext:docx | ext:odt | ext:pdf | ext:rtf | ext:sxw | ext:psw | ext:ppt | ext:pptx | ext:pps | ext:csv
phpinfo(): site:域名 ext:php intitle:phpinfo "published by the PHP Group"
Whois(注册人信息)
根据已知域名反查,分析此域名的注册人、邮箱、电话(工具:站长工具、爱站网、微步在线https://x.threatbook.cn、site.ip138.com 、searchdns.netcraft.com)
域名信息
- 对应IP信息(nslookup、http://reverseip.domaintools.com/等)
- 子域名收集(工具:layer、subDomainsBrutes http://dns.aizhan.com/)
- shodan https://www.shodan.io/
- shadan(傻蛋 联网设备搜索系统) https://www.oshadan.com/
- ZoomEy https://www.zoomeye.org/
端口扫描
FTP -21、SSH-22、Telnet-23、pop3-110、SQL server-1433、3306-MySQL、3389-远程登陆
8080-tomcat/jboss、9090-websphere
常用工具:nmap、portscan、ntscan
敏感信息
Robots.txt、后台目录、安装包、上传目录、msyql管理接口、安装页面、phpinfo、编辑器、iis短文件
常用工具:
字典爆破:御剑、dirbuster、wwwscan、IIS_shortname_Scanner等
蜘蛛爬行:爬行菜刀、webrobot,burp、awvs等
整站分析
- 应用入口识别(请求方式、http头信息)
- 服务器类型(平台、版本 httpprint)
- 网站容器(搭建网站的服务器组建iis、apache、nginx、tomcat)
- 脚本类型(asp、php、jsp、aspx)
- 数据库类型(access、sqlserver、MySQL、Oracle、postgresql)
- cms类型(readme.txt)
- Waf
后台
弱口令后台(admin、admin/login.asp,manage,login.asp)
查看网页的链接:一般网站的主页有管理登陆类似的东西,但可能会被删除
查看网站图片的属性
查看网站使用的管理系统,从而确定后台 cms查询yunsee.cn
用工具查找:wwwscan,intellitamper,御剑
Googlehacker Robots.txt
查看网站使用的编辑器是否有默认后台
短文件利用
网站CDN
是否存在CDN检测:站长工具ping检测
获取真实地址:查找二级域名、让服务器给你发包(邮件)、敏感文件泄露phpinfo、查询历史解析IP ip138.com、app的话可以抓包
访问绕过cdn(修改host)
旁站c段
工具:web k8旁站、御剑1.5
端口:portscan
url采集
采集相关url的相关网站(谷歌hacker、url采集器)
信息泄露测试
源代码和注释
名称 |
源代码和注释检查测试 |
描述 |
在浏览器返回页面查看源码有无敏感信息 |
严重级别 |
中 |
备注 |
敏感数据范围(IP、邮件、口令等) |
日志审计
名称 |
日志审计测试 |
描述 |
审查日志是否有敏感信息 |
严重级别 |
中 |
备注 |
敏感数据范围(IP、邮件、口令等) |
认证测试
敏感数据传输
名称 |
敏感数据传输保密性测试 |
描述 |
测试敏感数据是否通过加密通道传输 |
严重级别 |
高 |
备注 |
敏感数据是否使用https协议传输,常见的敏感数据有用户口令、用户个人信息、session ID等,需结合实际判定 |
http方法测试
名称 |
http传输方法测试 |
描述 |
1、测试敏感数据是否已post方法进行提交已防止信息泄露 2、测试系统使用http方法,若包含Trace/Track,测试XST 3、http方法篡改测试 4、测试https安全性强弱(https://myssl.com) |
XST攻击 |
1.“被攻击的服务器”允许 Trace/Track 方法(例如,http://www.example.com这个被攻击的站点允许使用Trace方法) 2.“攻击者”在自己的站点构造一个HTML页面,里面放上一些极具吸引力的内容(图片,文字标题等),点击这些内容就会触发一段恶意JavaScript代码,这段代码主要的作用: (1)以Trace方法向http://www.example.com这个站点发送请求,而“被攻击的用户”也恰恰好是这个站点的用户并且曾经登录站点(意味着会携带着cookie和HTTP认证信息去请求http://www.example.com), (2)然后就会接收到服务器原样返回的请求内容(cookie+http认证信息等) (3)然后将接收的、“被攻击用户”的个人信息保存到自己的站点上(通过请求 save.php 将数据保存起来) (4)最后就能使用这些信息伪装自己,冒充“被攻击用户”去登录访问http://www.example.com上面的内容 注:上面的是需要“被攻击用户”手动触发,当然也可以自动触发(就是用户进入页面的时候自动执行恶意JavaScript代码) |
篡改测试 |
找到您要访问的包含安全限制的网页。它通常会迫使 302 重定向到登录页或迫使直接登入。同许多 Web 应用程序一样,如果获得200 的返回而不是登陆页面,那就有可能绕过验证,得到授权。 如果您认为该系统对这个问题存在漏洞,执行类似 CSRF 攻击以充分挖掘这个问题。: FOOBAR /admin/createUser.php?member=myAdmin JEFF /admin/changePw.php?member=myAdmin&passwd=foo123&confirm=foo123 CATS /admin/groupEdit.php?group=Admins&member=myAdmin&action=add |
测试SSL/TLS |
l nmap识别SSL服务 nmap -F -sV localhost l 使用nessus检查弱类型 l 使用OpenSSL进行人工检查弱密码程度 |
锁定策略
名称 |
账户锁定测试 |
描述 |
锁定策略用来缓解口令等敏感数据被恶意攻击者尝试暴力破解。 |
测试方式 |
1、测试账户是否可以枚举 2、测试账户密码可以暴力破解 |
暴力破解方法 |
hydra用法 hydra <参数> <IP地址> <服务名> hydra的参数是区分大小写的. hydra支持的服务有:telnet ftp ssh mysql mssql vnc pcanywhere RDP(3389)等. hydra的一些参数: -R 继续从上一次的进度开始爆破 -s <port> 指定端口 -l <username> 指定登录的用户名 -L <username-list> 指定用户名字典 -p <password> 指定密码 -t <number> 设置线程数 -P <passwd-list> 指定密码字典 -v 显示详细过程 示例: hydra -l root -P /tmp/passwd.txt -t 4 -v 192.168.57.101 ssh #爆破ssh登录密码 brutus用法 brutus是针对windows的远程密码破解工具,可以破解http、ftp、pop3、telnet、smb等密码。 |
备注 |
1、锁定策略不仅仅是针对账户口令的,而是针对所有可通过暴力破解获得的敏感数据,比如:短信验证码(短信炸弹)、找回密码的问答等。 2、锁定策略不仅仅针对于web接口,同样适用于其它协议的接口,比如:FTP、SNMP等。 |
认证绕过
名称 |
认证绕过测试 |
描述 |
测试访问受限数据时是否需要认证以及是否可以绕过认证 |
复杂度策略
名称 |
口令复杂度策略测试 |
描述 |
测试目标系统是否存在足够安全的口令复杂度策略 |
口令复杂度 |
口令必须包含数字、大写普通字符[A-Z]、小写普通字符[a-z]和特殊字符中的3项。 口令存在一个明确的有效期限,建议3个月。 最近使用过的N个口令不能在新口令中使用,建议N取值8。 口令中不能出现连续N个字符(比如:aaa123),建议N取值3。 口令不存在于常见弱口令列表中(比:abc123、qwerty等)。 口令不能够和用户名以及用户名的反向字符串相同。 使用默认口令登录的用户要求强制或提示修改口令。 |
问答策略
名称 |
修改口令功能安全性测试 |
描述 |
系统存在问答策略时,尝试修改口令功能是否存在缺陷 |
测试方式 |
1、问题的答案和家庭成员或者朋友有关。比如某个家庭成员的名字或者用户本人的生日等。 2、问题的答案容易猜解或通过搜索引擎获得,比如:“我喜欢的颜色/球队”和“我的第一所学校”等。 3、检查问答系统是否实施锁定策略以防止暴力破解答案(参考用例:“锁定策略”)。 4、检查业务系统是否允许自定义问题和答案,如果是,确认是否定义任意简单的问题和答案。比如:“1加1等于几? 5、检查问题是否有绕过的风险 |
短信验证码
名称 |
短信验证码安全性测试 |
描述 |
当业务系统存在短线验证码功能模块时,测试短信验证码的安全性设计是否存在缺陷。 |
测试方法 |
1、开启burp,设置对http请求进行拦截,并在浏览器中配置代理。 2、登录业务系统,进入使用短信验证码的功能模块(比如:找回密码),并提交获取短信验证码的请求。 3、 将拦截到的http请求转入burp repeater,并在burp repeater中反复提交该请求,检查业务系统是否实施锁定策略来防止恶意滥发短信(参考用例:“锁定策略”)。 4、 尝试多次提交获取短信验证码,检查短信验证码是否存在复杂度策略(4-6位长度,由纯数字或者数字加字符组成)。 5、 在获取到短信验证码后,等待30分钟,然后提交使用该短信验证码,检查是否返回类似“短信验证码过期”的信息。 6、 使用burp将提交使用短信验证码的请求拦截并转入burp repeater,在burp repeater中反复重放该请求,检查服务器是否会返回“短信验证码失效”的信息或者相关错误码。 7、 检查短信网关接口是否对外开放,如果是,检查直接在浏览器上输入短信网关地址是否可以向任意号码发短信。比如,网关地址可能如下: http://www.example.com/sms/smsNetgateServlet?phone=xxx&content=xxx |
修改密码
名称 |
修改密码功能安全性测试 |
描述 |
系统存在修改密码模块,测试修改密码功能是否存在安全缺陷。 |
测试方式 |
1、检查是否需要旧密码才能修改新密码。 2、检查旧密码和新密码是否在同一个请求中传输。 3、检查密码是否通过加密进行传输(参考用例:“敏感数据传输”)。 4、检查是否存在密码复杂度策略(参考用例:“口令复杂度策略”)。 5、 反复提交错误的旧密码,检查是否对旧密码提交实施锁定策略(参考用例:“锁定策略”)。 6、检查修改密码的功能页面是否需要认证才能够访问(参考用例:“认证绕过”)。 7、检查修改密码是否对旧密码进行校验(前端和后端,防止任意密码修改) 8、验证修改密码的限制是否可以被绕过(例如两个账号同时修改密码,一个密码正常通过修改限制,测试此时是否对另一密码修改限制有什么影响) |
找回密码
名称 |
找回密码测试 |
描述 |
系统存在找回密码模块时,测试找回密码功能是否存在安全缺陷。 |
测试步骤 |
1、开启burp,设置对http请求进行拦截,并在浏览器中配置代理。 2、登录web应用,并进入到找回密码页面。 3、如果系统要求对用户预设的问题给出答案,则检查是否满足问答系统的安全要求(参考用例:“问答策略”)。 4、如果系统使用短信验证码进行验证,则检查是否满足短信验证码的安全要求(参考用例:“短信验证码”),并检测收取验证码的手机号是否为任意。 5、如果在完成步骤3或者步骤4后,检查系统是否会将原始密码(即用户忘记的密码)返回给用户。 6、如果系统发一个重置密码的链接到用户注册的邮箱,检查该链接是否具有可预测性。比如: http://www.example.com/resetPwd.jsp?token=xxxx,token的值是可预测的,可能是对用户名进行MD5的哈希值等等。 7、如果系统发送一个临时密码给用户,让用户使用该临时密码进行登录,检查该临时密码具有足够的复杂度(参考用例:复杂度策略)。 8、检查用户使用临时密码登录后系统是否强制要求用户修改密码。 9、如果在完成步骤3或者步骤4后,系统要求用户在当前页面内设置新密码,检查新密码和短信验证码或者问题的答案是否在同一个HTTP请求内进行提交。 |
备注 |
步骤6中,重置密码链接的可预测性测试使用黑盒的方式效果并不是特别好,最好是跟研发人员一起确认生成session id的算法(比如:UUID)。 |
图形验证码
名称 |
图形验证码设计测试 |
描述 |
系统存在验证码模块时,测试图形验证码设计是否存在缺陷。 |
测试步骤 |
1、使用浏览器打开目标系统的web登录页面,并激活图形验证码。 2、观察图形验证码字符长度。 3、检查图形验证码的图片背景是否为单一颜色(比如:纯白色、蓝色等,检测能否被脚本识别)。 4、连续20次刷新并记录图形验证码,观察图形验证码的生成规律(检测验证码生成算法)。 5、在存在图形验证码的页面上点击右键,选择“查看源文件”,在源文件中搜索当前显示的图像验证码,并观察结果(检测是否存在跟验证码相关的信息)。 6、在图形验证码图片上点击右键,选择“属性”,复制图形验证码的地址,重新在浏览器上多次刷新访问该地址,观察结果(验证码是否随机变化)。 |
名称 |
图形验证码逻辑测试 |
描述 |
测试图形验证码使用是否存在安全缺陷 |
测试内容 |
1、密码或用户和验证码同时错误,应返回验证码错误; 2、验证码应该有过期机制,每次请求后都应更新,且旧验证码需要失效 |
会话测试
会话复杂度
名称 |
会话复杂度测试 |
描述 |
目标系统使用登陆会话机制时,测试目标系统产生的session id是否具备足够的复杂度。 |
测试步骤 |
1、开启burp,设置对http请求进行拦截,并在浏览器中配置代理。 2、打开目标系统的登录页面,使用正确的用户名和密码提交登录,比如: POST /login.php HTTP/1.1 #登录请求 Host: www.example.com [other HTTP headers] username=admin&password=123456 3、将burp拦截到的登录请求转入burp sequencer。 4、使用burp sequencer向目标系统快速大量地提交登录请求以获得批量session id,并将得到的session id保存到本地。 5、使用文本编辑器打开保存session id的文件。 6、检查所有session id的长度。 7、检查所有session id的构成。 |
备注 |
Session id的长度大于等于16 Session id 由数字、大小写字母和特殊字符组合而成Session id只是所有会话标记的统称,不同系统会话标记名称可能不一样,比如:jssessionid、sid和DDNSCOOKIE等。 |
会话预测
名称 |
会话可预测性测试 |
描述 |
目标系统采用登陆会话机制时,测试session id是否可以预测,避免会话劫持。 |
测试 |
1、利用burp sequencer向目标系统快速大量提交获取session id 2、检查得到的session id是否存在静止不变的部分 3、检查是否存在可预测的部分 4、将可以预测或者静止不变的部分删除,检查剩余部分是否满足会话复杂度要求 |
会话定置
名称 |
会话定置测试 |
描述 |
测试用户成功登陆后系统是否会更新会话标识,若没有重置,则存在会话固定漏洞。 |
测试步骤 |
1、开启burp,设置对http请求进行拦截,并在浏览器中配置代理。 2、打开目标系统的登录页面,使用正确的用户名和密码提交登录。 3在burp拦截到的http请求中检查是否存在会话标记(比如:session id),如果存在则记录下来,如果没有则测试结束(通过),比如: POST /login.php HTTP/1.1 #登录请求 Host: www.example.com Cookie: PHPSESSID=urvo14kd4ke4j5vef07t4edj43; [other HTTP headers] username=admin&password=123456 4、释放提交被拦截的登录请求,直至登录成功。 5、登录成功后,点击目标系统需要带cookie才能访问的任意功能。 6、在burp拦截到的http请求中检查会话标记的值(一般在cookie中)。
|
CSRF
名称 |
跨站伪造请求测试 |
描述 |
目标系统使用登陆会话机制,测试在目标系统上进行关键性或者敏感性操作时,是否携带随机token |
测试 |
测试在进行关键操作时http参数中是否含有不可预测的随机因子 |
备注 |
1、对于关键性或者敏感性操作的判断一般具有较大的主观性,通常来讲,可以从执行该操作后可能造成的结果来判断,但不同的人可能看到的危害程度不一样,最终应当以最严重的情况为标准 2、“写”操作往往是关键性或敏感性操作的特征,比如:增、删和改,对于此类操作应当予以关注 |
会话注销
名称 |
会话注销测试 |
描述 |
目标系统使用登陆会话机制,测试目标系统的会话注销功能是否存在安全缺陷。 |
会话超时
名称 |
会话闲置超时测试 |
描述 |
目标系统采用登陆会话机制,测试会话在限制预设时间后是否被强制销毁。 |
测试步骤 |
1、使用正确账户名和密码登录目标系统。 2、打开任意需要登录才能访问的功能页面。 3、在目标系统上闲置N分钟并且不进行任何操作。 4、刷新步骤2的功能页面,并观察结果。 |
名称 |
会话绝对超时 |
描述 |
安全性要求较高的系统会采用此限制 |
授权测试
路径遍历
名称 |
路径遍历测试 |
描述 |
路径遍历漏洞隐藏一般在文件读取或者展示图片功能块这样的通过参数提交上来的文件名 |
垂直权限提升
名称 |
垂直权限提升测试 |
描述 |
目标系统使用不用等级的角色和权限时,测试用户是否具有超越其角色范围之外的权限。 |
测试步骤 |
1、开启burp,设置对http请求进行拦截,并在浏览器中配置代理。 2、使用高级别权限账号(比如:管理员账号)登录目标系统。 3、访问某个只有该高级别权限账号才能够访问的接口或者资源,比如: POST /admin/addUser.jsp HTTP/1.1 #添加账户接口 Host: www.example.com Cookie: Sessionid = 21232f297a57a5a743894a0e4a801fc3 [other HTTP headers] userName=test&phoneNum=138xxx 4、使用burp拦截该HTTP请求并转入burp repeater。 5、注销高级别权限账号。 6、使用另外一个低级别权限账号(比如:普通用户)登录目标系统。 7、访问任意接口或资源并用burp拦截对应的HTTP请求,比如: POST /commonUser/info.jsp HTTP/1.1 #查询账户信息接口 Host: www.example.com Cookie: Sessionid = fab0ec1c41247e83e2189f2094952eb4 [other HTTP headers] 8、复制该HTTP请求的cookie字段,然后替换掉burp repeater中的高级别账户产生的HTTP请求的cookie字段,比如: POST /admin/addUser.jsp HTTP/1.1 #添加账户接口 Host: www.example.com Cookie: Sessionid = fab0ec1c41247e83e2189f2094952eb4 #替换cookie [other HTTP headers] userName=test&phoneNum=138xxx 9、 在burp repeater中重新向目标系统发送该被替换过cookie的HTTP请求,观察目标系统的返回结果。 |
水平权限提升
名称 |
水平权限提升测试 |
描述 |
目标系统拥有多个不同的账户,并且各自拥有受限访问的资源信息 |
测试步骤 |
1、开启burp,设置对http请求进行拦截,并在浏览器中配置代理。 2、使用账号A登录目标系统。 3、访问某个只有账号A才能够访问的资源,比如: POST /info/Info.jsp HTTP/1.1 #通过userID查询对应的账户信息 Host: www.example.com Cookie: Sessionid = 21232f297a57a5a743894a0e4a801fc3 #账户A cookie [other HTTP headers] userID=111111 #账户A的userID 4、使用burp拦截该HTTP请求并转入burp repeater。 5、记录账户A的资源标签(比如:userID)并注销账户A。 6、使用账号B登录目标系统。 7、访问同样的接口并用burp拦截对应的HTTP请求,比如: POST /info/Info.jsp HTTP/1.1 #通过userID查询对应的账户信息 Host: www.example.com Cookie: Sessionid = fab0ec1c41247e83e2189f2094952eb4 #账户B cookie [other HTTP headers] userID=222222 #账户B的userID 8、使用账户B的资源标签替换掉账户A的资源标签,比如: POST /info/Info.jsp HTTP/1.1 #通过userID查询对应的账户信息 Host: www.example.com Cookie: Sessionid = fab0ec1c41247e83e2189f2094952eb4 #账户B cookie [other HTTP headers] userID=111111 #账户A的userID 9、向目标系统发送该被篡改过的请求,观察目标系统的返回结果 |
业务逻辑测试
名称 |
业务逻辑测试 |
描述 |
业务逻辑可能存在安全漏洞,允许用户做一些业务所不允许做的事情。例如,如果赔偿限额是1000美元, 攻击者是否可能滥用系统并要求更多的赔偿呢 |
例 |
在电子商务网站将产品的数量设置成负数,这样可以导致现金记入攻击者名下。因为应用程序允许在购物车数量字段中输入负数,这一问题的对策是执行更有力的数据验证 |
逻辑测试指导方案 |
1、权限表——在创建应用程序特定逻辑威胁时参考权限表。同城测试每一个管理特权,检测是否可由拥有最小特权或者无特权的非法用户执行管理员权限。 2、特殊用户操作顺序处理不当-以某种方式浏览应用程序或者以非预期的顺序重新访问页面可能产生的逻辑错误,导致应用程序执行其他操作。 3、覆盖所有商业交易路径--当设计测试时,需要查看所有方法以完成同样的业务交易。例如,测试现金或者信用卡支付方式 |
常见业务逻辑漏洞 |
1、订单金额任意修改 2、验证码回传(如果验证码采用前端验证,则有可能存在泄漏风险,一般可以后台验证) 3、未进行登录凭证验证 4、接口无限制枚举 5、找回密码存在设计缺陷 6、cookie设计缺陷 参考https://www.freebuf.com/vuls/112339.html |
验证码类
验证码绕过
图形验证码复用(验证码刷新后历史验证码还是可以继续使用,验证码使用过后,时效性不过期,可以一直复用)
图形验证码易识别(验证码生成算法简单或者可以被机器识别)
短信类验证码过于简单&接口未做限制&验证码发送复用(验证码接口没有做任何限制,或者在一定时间内发送验证码,验证码不变,可以被暴力破解)
万能验证码(许多系统在上线前会加888888、000000这样的万能验证码,上线后又没有删除)
短信/语音验证码重放
短信/语音验证码重放
无限制发送
代码逻辑问题(为了方便用户体验,程序会将用户输入的一些空格及特殊符号删除,如果在删除之前校验手机号是否发送过短信,则相当于对手机号码发送次数没有限制)
手机号可遍历发送
应该限制手机号遍历发送验证码
业务流程绕过
数据验证测试
反射型跨站脚本
名称 |
反射型跨站脚本测试 |
描述 |
非持久性跨站脚本攻击,该攻击不会使用存在漏洞的web应用程序加载,使用受害者载入违规的URL |
预防 |
一是在服务器端通过过滤程序或web应用防火墙阻止,二是在客户端通过在现代的web浏览器中嵌入阻止机制 |