作为一名Web渗透测试人员,我们应该如何更好地学习这些“漏洞”呢?想起了一句老话:黑客都是程序员,但程序员不一定是黑客。从某个角度来说,渗透测试人员其实就是一名黑客,这是不可否认的事实。但黑客也有好坏之分,俗话说:黑客是好的,骇客才是真正的攻击者。但貌似很多人对“骇客”一词并不熟悉,特别是一些安全研究者,反而用白帽子和黑帽子来区分。黑帽子即利用利用黑客技术实施攻击,进行网络犯罪和牟利的人群,而白帽子则是利用手中的技术进行反黑客的人群。
渗透测试人员与攻击者的性质不一样,攻击者只需要找到程序的一个突破口,拿到权限即可,而渗透测试人员或“白帽子”则不一样,渗透测试人员必须找到系统所有的漏洞,才能保证系统的安全。然而真正想做到对这些漏洞知其所以然,必须学习编程技术。虽然现在各种利用工具层出不穷,但想要在这条路上走得更远,必须有编程基础,甚至要有比程序员更强的功底。
本节的内容与笔者的职业有关,笔者曾经是一名培训师,所以习惯尽可能地把内容写过的更明了。笔者接触过太多刚踏入安全领域或者在安全领域有一段工作经验的人,但事实上并不是每个人都懂得编程技术,很多人都会问:到底学习哪门语言好?这一直是初学者学习编程的第一个问题。很多人都认为先学精一门,然后学其他的,当你学习完一门语言之后,其他语言就变得简单了。“一门通,门门通”这就话固然不错,但根据笔者的经验,笔者认为能够用到的语言就是你应该学习的语言,每门语言所擅长的领域不一样,你的领域适合什么语言,就选择哪门语言。下面列举一些笔者认为不错的语言及其应用领域。
——————————————————————————————————————-
C/C++:永远不会衰败的语言,适合偏底层,比如,Windows操作系统80%以上都是由C/C++完成的,C/C++也经常用于应用层C/S架构的软件。如果想研究缓冲区溢出,或者针对底层协议写一些软件,那么非C/C++莫属。例如:NC、LCX、DNSSniffer、Hydra、溢出程序、远程控制等。
——————————————————————————————————————-
Java:真正跨平台的语言,“一次编译,到处运行。”即是Java的口号。Java适合应用层的开发,无论是C/S架构还是B/S架构,Java都能做到,但在国内使用Java(JSP)做B/S架构居多,很多大型企业都采用了Java作为Web开发的首选。例如:Burp Suite、reDuh、Paros proxy、WebScarab、Owasp Zap等。
——————————————————————————————————————-
C#:与Java有70%的雷同,同样适用于开发应用层程序,无论是C/S架构还是架构B/S,C#都可以做到,拥有强大的.NET Framework支持,但是不能跨平台。例如:Pangolin、Jsky、微软官网等。
——————————————————————————————————————-
PHP:跨平台的语言,脚本语言,无需编译,但PHP的能力仅限于Web,速度较慢,也不支持多线程。作为一名Web安全研究者,几乎所有的人都会学习它。
——————————————————————————————————————-
Python:号称“大蟒蛇”,跨平台,脚本语言,无需编译,适用于一些Shell操作,最近Python也在Web领域取得了一些成就,开发较快,运行速度较慢(相对于C/C++来说),不过很多安全研究者都比较喜欢Pyhon。例如:SQLMap、W3af、Python编写的安全工具太多了,在渗透测试平台“Backtrack”下到处都可以看到Python的身影。
——————————————————————————————————————-
HTML:属于前端语言之一,是渗透测试人员必备的语言。
——————————————————————————————————————-
JavaScript:属于前端语言之一,掌握JavaScript后,可以帮助渗透测试人员更好的理解XSS跨站脚本攻击。
数据库:数据库分为很多种,有Oracle、MySQL、SQL Server、DB2等,操作数据库的语言即SQL语句,掌握一门SQL语言是必须的,因为几乎没有网站不适用数据库。
——————————————————————————————————————-
各位可以根据实际需求选择一门适合自己的语言,这里并不是让安全研究人员去写代码,一般要达到能通读代码的要求即可,当然能写是最好的。如果不去做代码审计工作,一般一门语言就足够了,但单本着学习Web的目标去学习HTML、Javascript、SQL,以及任意一门Web语言,这样的搭配是比较合适的。
虽然说渗透测试时,没有代码基础也能出色地完成任务,但相对来说,掌握语言的基础是非常有帮助的,因为在渗透过程中有时无法避免有针对性地写一些代码,代码功底是“菜鸟”和“大牛”一个明显的分水岭。