作者:Terry Zhang
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
国内学习漏洞挖掘习惯先进行所谓的“打基础”,啃各种编程书,然后再去学习漏洞挖掘,这样的问题在于无法控制好学编程的程度,而且先单纯的学习编程也是极其枯燥的,可能很多人无法坚持。下面来说下国外同学一般得学习过程:
既然我们不是要去深造编程技术,而主要为了学习漏洞挖掘。我建议首先先把编程打个底子,底子的概念是:“掌握该语言的基本语法,常用函数,写几个demo即可。”有了底子再去看以前的漏洞分析文章,看的过程中会发现吃力的点,这样再有目的的去跟进相关的编程技术点。而不是先一味的去啃编程书。
比如学习PHP漏洞挖掘:
先掌握php基本语法,常用php函数,对常用的php函数写一些demo。然后开始看以前php应用漏洞分析的文章,开始的一些基本漏洞比如简单的纯get,post没有intval或者强制转换造成的sql注入,比如没有htmlspecialchar造成的简单xss。看这些基本的东西我们之前打的底子就完全够用了。
然后我们看一些较高级漏洞的利用,比如各种变量覆盖漏洞,比如unserialize造成的代码执行,我们开始看的时候可能会觉得吃力。那就需要回过头去先看看extract等函数具体用法,for each对$_REQUEST进行变量生成的过程是怎样的,unserialize函数的执行流程是怎样的。然后再去看之前的技术文章就会豁然开朗了。这只是基本的php漏洞挖掘,熟练了之后尝试着去看一些框架的漏洞分析,比如thinkphp,这些又涉及到OOP的相关知识,那么再回过头去学习PHP OOP编程,然后再继续。如此循环下来,边学习漏洞挖掘边学习编程,这样的效率和效果都要比先单纯的啃编程书要强很多。这也是国内外技术人员做研究的一大差异,国内喜欢先学习理论基础,而国外注重先应用,应用的过程中遇到困难再去学习理论基础。