使用搜索引擎的语法来帮助自己快速搜集可能存在漏洞的网站
inurl: #搜索包含有特定字符的URL
intext: #搜索网页正文内容中的指定字符
site: #url+搜索内容
filetype: #搜索指定类型文件
cache: #搜索某些内容缓存
info: #查找指定站点的一些基本信息
link
intitle
……
在非同一局域网内,知晓域名的网站可以先使用nslookup
进行域名解析,得到IP。也可以使用被动信息收集得方式,去第三方网站上通过域名解析IP。也可以简单得ping一下来得到网站得IP
在同局域网内,未知目标主机IP的情况下,使用netdiscover
主机发现获得主机IP地址(或者 nmap -sn <目标网段>)
有很多网站会有CDN加速访问,因此不会显示真实网站IP,因此要对得到得IP地址进行验证
为了检测网站是否使用了CDN,可以利用多地ping服务来检测,若各地回复的IP地址存在多个不同的IP,就能说明网站有CDN(nslookup
返回的IP为多个,也能说明有CDN)
绕过CDN找到真实网站的思路是,查看以前的DNS解析历史,即域名与IP的绑定记录,最早的历史IP很有可能就是真实的原始IP地址
利用SSL证书寻找真实IP
在censysz中搜索参:parsed.names: and tags.raw: trusted
通过子域名不仅可以获得网站的真实IP,还能通过在子域名访问敏感页面
可以利用域传送漏洞,向DNS服务器请求,获取被攻击域下所有的子域名。
域传送:指备份服务器从主服务器拷贝数据,并用得到的数据更新自身数据库,就是主备服务器之前同步数据库,需要使用“DNS域传送”;域传送漏洞会导致一些非公开域名(测试域名、内部域名)泄露
对子域名进行枚举,可以使用Kali中fierce、在线枚举网站
使用网络空间搜索引擎查找子域名(shodan、censys、fofa……)
用搜索引擎语法(site:xxx.com)直接搜目标网站的子域名
其他工具还有layer子域名挖掘机
站是和目标网站在同一台服务器上的其他网站,同服务器不同站点
在主站没有思路时,可以先对旁站进行渗透
可以使用K8_C段旁注查询工具 、在线网站查询……
C段是和目标服务器IP处在同一个C段的其他服务器,同网段不同服务器
可以使用北极熊扫描器、Nmap、在线网站查询(站长之家等)、K8_C段旁注查询工具……
nmap --script http-methods --script-args http-methods.url-path=test 192.168.72.167
# 使用扫描http的方法脚本,扫描ip地址下的test目录,其中--script-args是指后面的使用参数
构造一个使用OPTIONS方法的请求包,在回包处即可看到该页面支持的方法
curl -v -X OPTIONS http://192.168.72.167/test
使用漏扫工具,对网站扫描网站可能存在的漏洞,并进行漏洞的验证
常用的漏扫工具有:AWVS、NESSUS、OWASP-ZAP、Appscan、w3af(kali集成)、nikto
用法:nikto -h target_ip -p 1-1000
-h参数指定一个主机ip地址。-o 后面接文件路径和文件名格式
得到真实的IP地址后,使用masscan
进行快速的端口扫描。根据扫描到的开放端口,使用nmap
进行端口服务以及系统扫描
这里可以先使用超级弱口令检查工具
来快速发现弱密码、弱口令账号
metasploit farmework
的ssh_login模块,对ssh的账号进行暴力破解,也可以使用九头蛇或者美杜莎等爆破工具enum4linux
,枚举主机的samben服务,查找可用连接的用户名和密码,再使用mount
挂载的方式连接web服务器,在web服务器中文件中找有用的信息,比如用户名和密码FTP文件上传服务
,可以用工具进行账号密码暴破扫描网站的指纹信息,使用whatweb
扫描识别web软件、后端服务器、编程语言、CMS。根据找的信息,寻找中间件漏洞、数据库漏洞、搭站的源码。注意网站用的开发语言,在后面的渗透中,需要根据支持的开发语言选择恶意脚本(也可以使用在线网站云析、浏览器插件wappalyzer)
msf
或searchspolit
来查找相关的漏洞并利用,也可以利用搜索引擎来查找复现漏洞的方式在得到用户名和密码后,注意要进行多次尝试在其他地方登陆,因为有可能使用一套账户密码的情况
常见的CMS:Dedecms(织梦)、PageAdmin、Discuz、PHPWEB、PHPWind、PHPCMS、WCShop、Dvbbs、SiteWeaver、ASPCMS、帝国、Z-Blog、WordPress等
获得端口以及服务信息后,使用dirb
行网站目录的扫描,尝试对扫描出的网页进行登陆,寻找有价值的信息(必要时可以使用扫描工具,比如dirburst、御剑)
尝试访问网页目录,收集有用的信息,为爆破整理字典
留心可能存在的sql注入点,命令执行点,文件上传点,文件包含点,XXE,XSS,CSRF,SSRF,逻辑漏洞、解析漏洞等可利用的漏洞点。在登陆界面使用弱口令和万能密码登陆尝试,必要时可以对页面进行元素审查来寻找有用的信息
关于漏洞的详细信息,见漏洞利用部分
包括但不限于如下漏洞
与服务器进行交互的位置都有可能存在SQL注入
可以获取敏感信息、写入脚本文件、执行系统命令、反弹shell
可以使用sql语句的万能密码登陆
漏洞原理
SQL注入就是指web应用程序对用户输入数据的合法性没有判断,前端传入后端的参数是攻击者可控的,并且参数带入数据库查询,攻击者可以通过构造不同的sql语句来实现对数据库的任意操作。
攻击方式
SQL注入的类型分为字符型
和数字型
常用的SQL注入有:报错注入、联合注入、堆栈注入、布尔盲注、时间盲注、cookie注入
绕过方式
可以使用内联注释,将SQL语句的关键字进行注释
如/*!select*/
将SQL语句的关键字进行大小写绕过
可以使用TAB
、%a0
、+
代替空格,也可以将空格复写
对SQL语句进行十六进制的转码
使用转译符号\
对引号进行转译绕过
可以使用宽字节注入,在%27
前拼接%df
(在GBK编码的网站使用)
防御方式
1)严格检查输入变量的类型和格式
对于整数参数,加判断条件:不能为空、参数类型必须为数字
对于字符串参数,可以使用正则表达式进行过滤:如:必须为[0-9a-zA-Z]范围内的字符串
2)过滤和转义特殊字符
在username这个变量前进行转义,对’、"、\等特殊字符进行转义,如:php中的addslashes()函数对username参数进行转义
3)利用mysql的预编译机制
把sql语句的模板(变量采用占位符进行占位)发送给mysql服务器,mysql服务器对sql语句的模板进行编译,编译之后根据语句的优化分析对相应的索引进行优化,在最终绑定参数时把相应的参数传送给mysql服务器,直接进行执行,节省了sql查询时间,以及mysql服务器的资源,达到一次编译、多次执行的目的,除此之外,还可以防止SQL注入。具体是怎样防止SQL注入的呢?实际上当将绑定的参数传到mysql服务器,mysql服务器对参数进行编译,即填充到相应的占位符的过程中,做了转义操作。
XML外部实体化注入 ,libxml低于2.9.0都有可能存在该漏洞
可以用来执行代码、对内网的IP、端口及服务进行探测
漏洞原理
XML是用来对数据进行传输和存储的扩展标记性语言,而XXE是XML对非安全的外部实体数据进⾏行处理时引发的
攻击方式
]>
<hhh>&f;<hhh>
<hhh>&f;<hhh>
]>
<hhh>&f;<hhh>
防御方式
、、SYSTEM
、PUBLIC1
能根据用户输入来返回输入内容的位置,可能存在跨站脚本攻击
可以用来获取用户cookie、重定向、反弹shell
漏洞原理
XSS(Cross-site scripting)是代码注入的一种。 它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。
攻击方式
XSS的攻击方式有三种,反射型、存储型、DOM型
反射型XSS:<非持久化> 攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。
存储型XSS:<持久化> 代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie(虽然还有种DOM型XSS,但是也还是包括在存储型XSS内)。
DOM型XSS:基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。
CSRF(跨站请求伪造)是一种逻辑漏洞,利用了服务端对用户端的信任。
可以利用用户来执行敏感操作,实现攻击者想要的目的
漏洞原理
CSRF则通过伪装来自受信任用户的请求来利用受信任的网站 ,常见于服务器对用户身份验证不严的地方。
攻击方式
可以单独使用,向用户发送恶意的URL,诱导用户点击来完成攻击者想要敏感操作,包括 以用户的身份发送邮件,发消息,改密码,甚至于购买商品,转账等
也可以联合CSRF和XSS使用,可以用XSS重定向到敏感操作的URL使用户在不知情的情况下完成敏感操作,或者可以用XSS获取cookie再用CSRF冒名用户进行敏感操作
SSRF(服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)
可以利用存在SSRF的服务器做代理,进行内网渗透
CRLF是“回车+换行”(\r\n)的简称,其十六进制编码分别为0x0d和0x0a。在HTTP协议中,HTTP header与HTTP Body是用两个CRLF分隔的,浏览器就是根据这两个CRLF来取出HTTP内容并显示出来。所以,一旦我们能够控制HTTP消息头中的字符,注入一些恶意的换行,这样我们就能注入一些会话Cookie或者HTML代码。CRLF漏洞常出现在Location与Set-cookie消息头中。
攻击方式
1.通过CRLF注入构造会话固定漏洞
请求参数:http://www.sina.com%0aSet-cookie:sessionid%3Dwoyun
服务器返回:
HTTP/1.1 200 OK
Location:http://www.sina.com
Set-cookie:sessionid=woyun
2.通过CRLF注入消息头引发XSS漏洞
在请求参数中插入CRLF字符:?email=a%0d%0a%0d%0a
服务器返回:
HTTP/1.1 200 OK
Set-Cookie:de=a
3.浏览器的Filter是浏览器应对一些反射型XSS做的保护策略,当url中包含XSS相关特征的时候就会过滤掉不显示在页面中。
通过在数据包中http头中注入X-XSS-Protection: 0,关闭IE8的XSS Filter功能。
?url=%0aX-XSS-Protection:%200%0d%0a%0d%0a
漏洞原理
服务器端没有过滤\r\n,而又把用户输入的数据放在HTTP头中,从而导致安全隐患。
如果存在webshell界面,可以在wbshell界面在白名单允许的命令后用拼接命令符来拼接恶意的系统命令
也可以通过上传执行系统命令的脚本,通过远程代码执行或者文件包含漏洞执行脚本,在通过传参的方式来执行系统命令
可以反弹shell、查看敏感信息、当存在配置不当的漏洞是可以创建新的root用户
一般在文件上传的地方都用可能存在文件上传漏洞
可以利用上传代码并远程执行
能用来上传反弹shell脚本或一句话木马后门等
防御方法
使用黑名单或白名单对文件进行过滤
对上传的文件进行文件类型的转换和更改名称
隐藏上传路径
绕过方法
可以利用抓包改包的方式绕过对上传文件类型和后缀的过滤
可以生成图片码,来绕过对文件内容的过滤(图片头部:GIF89A)
也可以利用解析漏洞来过滤
apache、IIS解析漏洞
漏洞原理
开发人员为了使代码更灵活,会将被包含的文件设置为变量,用来进行动态调用,从而导致客户端可以恶意调用一个恶意文件,造成文件包含漏洞;在PHP中经常出现文件包含漏洞;
文件包含的特征:?page= 、?home=、?file=
攻击方式
文件包含主要分为远程文件包含和本地文件包含
常见的逻辑漏洞有CSRF、越权、修改数量或金额、短信轰炸、短信验证码暴破、验证码截获
如果通过漏洞获得服务器shell后,就需要进行提权操作
查找配置文件,在管理员的账号和密码
常规的提权思路:可以通过查找系统的漏洞来提权,可以使用msf、searchspolit、搜索引擎,查找提权方法与脚本,这方面window就比较多了。
Linux提权:
Windows提权:
注册表读取管理员密码
使用命令将windows系统中sam与sys文件导出,到本地使用mimikatz解密
reg save HKLM\SYSTEM c:\windows\temp\Sys.hiv
reg save HKLM\SYSTEM c:\windows\temp\Sam.hiv
lsadump::sam /sam:Sam.hiv /system:Sys.hiv
留后门,防杀马,隐藏,清理痕迹,日志信息,历史记录等
在完成以上的五个步骤后,我们需要撰写渗透测试报告,根据模板的要求,在渗透测试报告中需要写明渗透的时间,漏洞的URL以及漏洞的类型、截图和防御方法,审核完成后再交于甲方即可。