本文来自作者 肖志华 在 GitChat 上分享「Web 渗透测试入坑必备指南」,「阅读原文」查看交流实录
「文末高能」
编辑 | 黑石
由于本人技术性受限制,可能部分内容显得不那么清晰,如有疑问请读者圈联系我。再者,内容不会完全讲清楚,因为本身话题的原因,部分会一笔带过。
小白该如何踏入 Web 安全这个坑呢?我的经历是,兴趣所在。我是野路子,全靠兴趣来自学。
现 Web 安全如果要讲入门,要求并不高,两三天就能入门,而我也仅在入门级别。
我接触这个比较早,最初是在10年还是09年来接触到一份网传 Web 渗透课,后沉迷于此。
期间玩的第一个靶机是 dedecms5.7 最新 sql 注射漏洞利用,当时并不懂什么技术性的东西。然后一直没怎么学过,学习资源有限也就停了。
安全问题都体现在输入输出的问题上,能够分析数据流就有迹可循了。先学会用工具,工具报什么漏洞你就应该学着去百度这个漏洞,了解并且复现它。
在复现的过程中,势必会遇到很多以前从未遇到的问题,这时候就要学着用谷歌去解决问题。你能遇到的问题,别人也许也遇到了,并且做了记载。
向记录学习过程中的问题并解决的博主致敬!
Web 知识本身就非常丰富,覆盖范围也非常广泛:
从浏览器到服务器、数据库;
从 HTML、JavaScript 和 CSS 到 PHP、Java、ASP(.net);
从页面加载到 DOM 渲染;
从静态页面到 MVC;
从 URL 协议到 HTTP 协议。
我相信大多数人如果没有前端的经验,想入这个坑,先学前端就已经要崩了,但是并不需要一次性学这么多。
了解基本攻击类型,再去复现它,不断学习,不断进步,在疑惑中解决问题,在解决问题中成长并积累经验,这就是我告诉大家的方法,无捷径可走。
请务必实战,不实战,单理论的话,容我说一句放屁!再牛的前端,不关注安全技术,也能倒在前端 Xss 攻击上。
Web 安全高手都是实战练出来的,漏洞喂出来的。切莫想快速入门。快速如果定义在三个月,每天12小时用来研究 Web 安全,我估计也够入门了。
安全圈特别浮躁,很难有一个静心的交流环境,无数交流环境都是被发表情混水坑死的。所幸有 Gitbook 这样技术氛围丰厚的社区,很实在。
摸漏洞摸久了,经验自然也就丰富了,前些天我挖了 Csdn 一波储存性XSS,危害是劫持任意用户登陆会话,已经上报并修复。
出于原则不能公开漏洞详情,留个链接做证明吧。http://my.csdn.net/rNma0y 访问此条链接即可。
最后一句话做总结:“整就牛!”
Nmap 作为一款端口扫描软件,可以说是目前最强大的端口扫描工具,更是很多安全从业者所必备的工具。
Nmap的安装教程请自行安装,有 Windows 系统的也有 Unix 以及 Mac。
Nmap的扫描方式有很多,包括 TCP Syn TCPACK 扫描等,使用也比较简单,仅仅需要几个参数。扫描指定IP开放的端口:
nmap -sS -p 1-20000 -v 220.176.172.178
表示使用半开扫描,系统很少会保存日志。扫描C段主机:
nmap -sP 220.176.172.178/24
这里给出的结果是C段存在256个主机,方便我们后期对目标进行C段渗透。指定端口扫描 :
nmap -p 80,8080,22,445 220.176.172.178
指定端口扫描和半开结果类似,故不贴图。扫描主机操作系统:
nmap -o 220.176.172.178
扫描全部端口:
nmap -v -A 220.176.172.178
这里可以看到初步就已经判断出来了 23端口和8888端口都是使用tcp协议。后面他会自行进行Syn的扫描,结果较慢,故不在等待。
这是全端口扫描得出的结果,但是要注意的地方是,他只是默认的1000个高危端口扫描,若要检测全部端口,还需要加入-P-这个参数才行。
Namp 的命令很多,我这里只是列举了常用的几个命令,需要查看更多命令的请百度 namp 的官网进行命令手册翻阅。
Safe3 作为一个国产的漏洞扫描工具,和 Appscan 来做比较还是有些不足。虽有不足,但依然无法阻止众多安全从业者的使用。我用 safe3 第一个印象就是觉得,快。
在 Windows 平台下,打开速度和扫描速度是非常之快的。
这就是 safe3 的全面貌,中文界面,做用户的友好性十分的强。操作也比较傻瓜的,填入扫描的网站地址后,选择需要扫的漏洞就行。
由图可见,扫描结果显示的是sql注入的漏洞,但是safe3这款工具误报性个人觉得是相当的高,笔者也很少使用,只是有时候拿来扫个后台地址而已。
qlmap 作为一款强势的 sql 注入攻击工具,其功能性之强是其他 sql 注入工具所无法比拟的。如果要说缺陷,那就是众多的参数以及英文界面。
sqlmap 是一款非常强大的开源 sql 自动化注入工具,可以用来检测和利用sql注入漏洞。它由 python 语言开发而成,因此运行需要安装 python 环境。
我这里是 KaliLinux2.0 系统,已经集成了 sqlmap,所以 Windows 平台的朋友需要安装 Python 环境才能运行。检测注入点是否可用:
这里需要用到参数:-u
-u:指定注入点URL
这里是在进行注入测试了,如果存在注入,那么应该返回该网站的应用程序详:
这里返回了服务器系统2008 ,web 容器为 IIS7.5,脚本语言是 asp 的,数据库为 SQLserver 2005 版本。
参数: —dbs
上图所显示的就是我们在输入了 —dbs 参数后,sqlmap 列出的所有数据库,也叫做爆库。
由于我 Kali 下开的 sqlmap 太多了,我又找不到那个命令窗口,就拿个新的网站来做接下来的例子。
参数:—current-db
图中已经列出了当前应用程序所使用的数据库是“vps415”。列出指定数据库的所有表。
sqlmap -u “http://www.hkmsedu.com/class.php?id=121“ -D vps415 —tables
—tables 参数便是用来获取数据库表,-D参数为指定的数据库,结果如下:
sqlmap -u “http://www.hkmsedu.com/class.php?id=121“ -D vps415 -T book —columns
参数为:—columns
结果如下:
参数为:-C 指定字段名称,-T指定表名,-D指定数据库名,—dump 为保存数据。
Sqlmap 会把数据保存在文件夹下,已cvs文件后缀。
到此,就已经完成了用 sqlmap 进行 sql 注入的一个完整过程,sqlmap 参数还有很多,如需深入了解,请自行查阅官方命令手册。
APPscan 的界面如下,很简洁
进入配置向导界面,如下所示。
选择 WEB 扫描,同时他也可以扫描 Web Services,我们选一个 Web 站点进行扫描。
然后一路回车即可。扫描专家建议就是一个建议程序,可开可不开。扫描过程如下:
APPScan 的界面非常简单,左上角是基于 URL 的爬行参数,左下角仪表盘是总的安全报告。又侧则是风险详情信息。下面便是扫描结果,可以看到这个站已经存在 SQL 盲注以及 SQL 注入等网站安全问题。
旁边可执行一些手动语句的测试来验证漏洞是否存在。以上漏洞可一个一个的去手动复现,到此,AppScan 就已经完成了一次自动化的扫描过程。
Appscan 和 WVS 类似,不过是英文界面,所以我选了 AppScan 来做实例,并不是 WVS 不及 Appscan。
重点来喽,作为一名渗透测试人员,Burpsuite 工具可以说是在众多工具中位列榜首可是神器呢,基本以后的安全测试之路都需要用这款工具去操作。所以学好 Burpsuite 的使用是非常重要的。
有两个版本,一个是免费版,一个是Pro(Professional)版,相比只有一个功能差距,免费版不带扫描功能,Pro版则有扫描功能,但是,作为一个优秀的安全工具,Pro版则是太贵,我记得正版需要 2000 来块人民币(买不起),所以就自然有了破解版,我手中这款 1.7.11就是Pro破解版(羞耻)。
首先,界面如上,功能模块包括 taeget、proxy、spider、Scaneer、intuder、Repeater 等模块。
由于1.7.11版本字体设计有些许问题,所以下面用1.58版本展示。
首先,选入“Options”模块,进入“Display” Display 模块,找到第二栏,“Http Message Display”,选择字体为“微软雅黑”,改这个设置的原因是,后面的 HTTP 请求消息如果中文可能会乱码。
然后,进入“proxy”,遂“options”,第一栏,设置你的代理IP地址,因为他本质就是个浏览器操作后截获数据进行分析,需要用代理来。
具体代理信息可以转到浏览器代理 IP 设置的方法。我这里以 Edge 为例。
设置-高级设置-代理设置-打开代理设置即可。如下图:
这个代理设置要和 burp 上的设置一样才能抓到HTTP响应哦~
接下来,我们看 intercpt 功能,也就是最基础的功能,抓取当前页面的http请求。
如果以上设置没有问题了,那么你应该会成功访问该目标地址,我这里测试的是“gitbook.cn”。
访问的同时,我点击了 intercept is 模块 Is off Is on 分别关,开两种状态。我这里选择了on,那么这个页面的 HTTP 请求将被显示到 burp 中的这个模块下。
上面就是显示的内容了,可以看出上面信息呢?请求来自http://gitbook.cn:80,开放了80端口,IP地址为[123.59.80.114.]。
请求是GET的,协议是 http1.1 而不是 http2.0,http状态码是200,表示返回成功。请求页面是 http://gitbook.cn/。
下面较为重要的信息就是 cookie 等登陆信息。通过对截获的http信息,一般就能看出一些安全问题。下面用实例+抓包请求信息来介绍,我经常用到的 intruder 模块使用。
Intruder,字面解释为入侵者,解释完美的诠释了这个模块是多么的爆炸。案例诠释 Burp 的爆炸功能。
我的测试目标是一所高校,拿到所在的域名之后,首先进行了扫描器的自动化扫描,并且我自己也开始进行手动测试,从该高校的官网,爬到了一处OA系统,OA系统为自主开发,并不是什么市面上的A8之类。
访问到这个页面的时候,我的第一想法是,应该可以成功渗透。
因为无验证码,无权限控制,这样也就提供了爆破的信息,爆破也就恰恰是我所要讲的 burp 中的 intruder 模块功能之一。
随便输入账号密码后,我们来看看网页访问请求。
可以看到,截获到的 http 请求页面如上,aspx(Asp、net)的脚本语言。
账号和密码ID分别都是 6666,明文传输。我就很奇怪,为什么要很多涉及到登陆的网页,不肯做一点点加密?
哪怕是 base64 编码后再传入也好啊。但事实就是这样,明文传输。
我们右键,选择 Ctrl+R,发送到 Repeater 模块来分析登陆响应。点击左上角 GO 即可。
在 params 模块下,可以更改你的输入参数,用于测试不同的参数会返回什么内容,但是需要每次修改后都点击 Go,用于测试。
如上图,我修改了 txtuserld 为 admin password 保持了 6666 不变 点击 GO 后的结果。一串乱七八糟的,待会我们再提。
回到 intercept 模块下,我们选择 Ctrl+I,发送到 intruder 模块下,进行猜解用户名和密码。
上图所示,positions 模块下显示具体参数,标黄的(用黄色字体颜色显示出来的)都是变量参数,我们猜解用户名和密码则需要指定一些参数。
右边的“clear”,则是清除所有参数,清除后会去掉所有变量(颜色),选中你需要的参数,然后选择“Add”就可以指定该参数为变量。
我指定了用户名作为变量参数,其余不变。意味着 txtuserld:admin txtpassword:123456 其中 userld 中的 admin 参数为变量。
有的读者可能奇怪,为什么我这里要设置用户名为变量呢。
因为考虑到我的测试目标是 OA 系统,OA 系统为多人办公系统,在线人数几百人。用户名不止一个 admin,如果选择 admin,可能会出错。
所以我的思路是爆破他的账号,所以我选中了 admin 做变量,而不是爆破他的密码。相比之下去选择一批账号进行爆破,成功率远远比一个账号成功率高了太多。
也要结合实际环境来测试,比如网站后台,只有一个 admin 管理员账号的情况下,显然我这种情况是不合适的。
变量设置完毕后,选择 payloads,来进行字典的配置,payload Sets 就是攻击类型,有多重变量的情况下,可以选择。
比如账号和密码都为变量,如果测试一个字典则不显得那么机智,需要字典在两个变量之间相互测试,就用到这个功能模块,这里我们不做测试,遂跳过,保持默认就好。
在字典装好后,在这个模块的旁边有个options模块,这里用来更改类似于线程的参数。
在第二栏有个 Request Engine 参数,这里第一栏是 Number of threads 默认是5。
这个意思是,线程。默认5线程进行攻击,这个更改需要根据网站的配置和字典的数量,如果网站配置好,请往上加,如果不好,跑一跑就会跑坏,那么就默认。
我设置的线程为50,设置完了后,就可以点击左上角的 intruder,选择第一个了。
开始进行爆破,我这里导入的是弱账号 top500,通过几秒钟的碰撞后, length 的返回数字头中,包含了 2910-2973. 唯独出现了一个“liujuan”的 ID 返回了 3391 数字头。
这个账号有点可疑,我们放到前面所讲的 Ctrl+R 中来分析一下。
更改 uid 后,点击 Go,返回了 http 信息,如上图,基本可以判断这个账号就是正确的账号,已经成功爆破出来,为了验证猜想,我们使用该ID进入网页。
如上图,测试已经成功,burpsuite 就是这么暴力的一个安全测试工具,这只是其中几个模块,真正玩的转的人,很少。
个人觉得能玩转 burp 的所有功能,得花好几个月来专门学习 burp 这方面的资料,遗憾的是市面上还没有一本关于 burp 的工具书,如果有大神愿意写,那是自然最好的。
通过以上学习,能基本掌握这几款工具的用法了,当然不能说之能成功渗透目标了,因为这只针对无访问控制,无验证码,存在弱口令的网站情况。
通过案例学习,开发者也应该明白,怎样去做才能更加安全,为用户保驾护航。
案例是哪个高校,我就直说了,属于云南大学主站,这个漏洞,我在80天前就已经提交给漏洞平台了,他们也整改了,今天写下这篇文章的时候是2017年11月1日22:11:05,我万万没想到,整改是指哪改哪的姿势。
安全问题万万不可指哪改哪,我当时提交的另一个账号的弱口令,但是我明明确确的是写了属于逻辑漏洞,整改意见清清楚楚写上了“增加验证码效验机制防止爆破”。
但他们只改掉了出问题的那个账户的密码……
所以我很多时候不能理解厂商的态度,加个验证码效验如此简单的事情,非得让攻击重新发生一次。
是不是一定要等用户数据泄露,企业等遭受致命打击才能明白信息安全的重要呢?
相信这是很多人都关心的问题,从白帽子袁炜的事件来说(该白帽子挖世纪佳缘的漏洞并通知该厂商后被世纪佳缘起诉),白帽子的的边界在哪?
严格来讲,只要没有授权的测试,都是违法的,属于未授权访问,如果追究这罪名就可以吃。
授权测试比如什么呢?漏洞平台的 SRC,比如京东,小米等 SRC 是鼓励白帽子挖洞提交的,确认后甚至会送你小礼物,这些厂商建立的 SRC 平台,是有些许合法授权的意思。(个人认为)
白帽子做测试都应当遵守一个原则,点到为止,即:我只证明漏洞的存在,不会真正的实施破坏或者利用。未修复的漏洞,不应当公开其详情。所以我想厂商不会通过司法途径解决。
但是,如果你在找到SQL注入点后,进行了数据修改读取并且下载到本地,这就是脱库行为,有这种行为,就触犯了边界,那么厂商可以报警了,并且你也存在犯罪行为。
有时候,厂商也不必这么小气,不存在边界行为就不用报警,不要人家证明了你网站有漏洞后,你悄悄修复了,然后报警。
网站有漏洞是好事,一般来说白帽子的检测并没有给厂商带来多大损失,入侵本身也没有明显恶意,还主动告知漏洞及修补方案,大多数通情达理的厂商都不会选择走法务。
白帽子并不是一个人在战斗,随意抓人的后果可能会触怒其他白帽子,对厂商些许会带来相应损失。
比如,挖到洞后不再提交,直接互联网匿名公开呢?送个小礼物表示一下是不是比冰冷手铐好太多了?
找好边界,尤其重要。
官方网址可以看这里:https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project
2017年的十大风险已经选出来了。分别是:
攻击注入漏洞
失效的身份认证和会话管理
跨站脚本 Xss
失效的访问控制
安全配置错误
敏感信息泄露
攻击检测与防范不足
跨站请求伪造(CSRF)
使用含有已知漏洞的组件
未受保护的 API。
这些内容我就不贴出来了,我把官方的 PDF 文档发送到读者圈提供阅读理解。
相信官方的解释也比我解释的更好。
挖到洞该怎么办?
很简单,0day 就刷一波积分,不是通用性就上交国家啦~
练手靶机
本地环境推荐使用DVWA进行模拟攻击操作练手,该系统包含了很多Web漏洞,便于复现。
真实环境请用谷歌hack语法搜索网站程序进行实机攻击。
个人推荐书单
学安全务必啃书,书中的知识结合实战经验会让你了解的更彻底也更快。
这是我目前在看的一系列丛书,要推荐大概就这些吧。《Web 安全深度剖析》是本好书,入门就靠这书带。《黑客攻防技术宝典 Web 实战篇第二版》也值得看,就是内容太多,歪果仁写的。
接着就是道哥的《白帽子讲 Web 安全》啦~前端黑客可看余弦大大的 Web 前端黑客技术揭秘。双十一我自己入了 Python 和几套散文集。
最后,需要用到以上工具的读者圈联系我,链接不放了。祝大家想往这条路上走的人越走越远。
近期热文
《前端工程师“应试”指南》
《如何用 Node.js 爬虫?》
《两款敏捷工具,治好你碎片化交付硬伤》
《改做人工智能之前,90%的人都没能给自己定位》
《想入行 AI,别让那些技术培训坑了你...》
通知
个人和企业的信息泄露到今天已经严重到了什么程度?
严重到只要想查,就可以用各种社会工程学的方式来了解你的大部分信息。
在网络环境里,如果不会用手段保护自己,那和“透明人”没什么两样。
「阅读原文」看交流实录,你想知道的都在这里