@1kbfree
2018-03-23T00:07:39.000000Z
字数 8560
阅读 1458
渗透
这笔记,完完全全是我按照Web安全深度剖析打字打下来的(没有复制粘贴的~),主要就是写了一些精辟,如果您们想分享,请给我一方展示名字之地,我的汗水,也一定会感激您的~~~
Author:iamfree
本书的核心是从原理到实战案例的剖析,很多时候,工具只是起到辅助的左右,而最重要的是姿势要骚,姿势骚的人具备着经验、思路、工具反而只是其次的,不要太依赖所谓的"神器",工具会让我们方便,高效,但工具都是死的,目前渗透测试工具的开发水平还达不到智能化,所以,我们完全依赖的是自己的大脑,让自己的姿势骚起来吧。
编程对安全的联系
程序员不一定是黑客,但是有一定水平的白帽子,黑客一定是程序员,在安全行业中,会代码的人往往比不会代码的人学习安全快很多很多,因为安全的问题就是出自代码的不足,我相信各位老司机肯定深有体会吧。
如何才能学好安全
在学习时,原理性的知识就比如为内功,具体的实操、技术点就是招式,如果一个人只有招式而没有内功那么是不能称为高手的,内功+招式=高手。
安全利弊
安全是把双刃剑,剑在手中,好与坏只在一念之差。我们可以看下某位表哥给的名言警句:
看到注册,抓包修改
如果不行,待会改名
上传文件,大马走起
收货地址,见框就插
网站链接,改改ID
找到后台, 试试爆破
123456,用的真多
评价建议,拿拿cookie
没有存储,来点套路
下单支付,改改数字
web渗透,诱惑真多
保持本心,漏洞提交
一旦黑产,连累全家
倒霉被抓,供出老大 --诚殷网络论坛"陆军菜鸟"大佬所写
永远保持警惕
在这个网络世界中,不存在绝对的安全,只有你值不值得被黑,所以我们需要时刻警惕!
我为什么要写这个笔记
当你们拿原书和我对比的时候,你就会发现,这本书的作者没有补充的,我都在笔记里补充了。
加油
书中有一句很棒的话:路虽艰,行则必达、是虽难,做则必成。
加油各位,说不定几年后的你们,站在世界的顶峰~
服务器是如何被入侵的
我想这个问题是很多人都好奇的,包括我刚学安全的时候也是这样的,现在,我们就来了解一下一台在互联网中的服务器是如何被攻击入侵的。
服务器被入侵,有一个必要的条件,就是服务器必须与计算机能够正常通信的。服务器提供各种服务给客户端使用。那么服务器是如何与客户端通信的?就是依赖端口来通信的,黑客入侵服务器也是靠端口,或者是计算机提供的服务。但是也不排除有"物理黑客",自接来到实地渗透,使我们在同一局域网下。
过去的黑客攻击方式都是直接针对目标进行攻击的,比如对端口扫描,对服务密码爆破 ( FTP、数据库等)、缓存区溢出攻击(缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上。理想的情况是:程序会检查数据长度,而且并不允许输入超过缓冲区长度的字符。但是绝大多数程序都会假设数据长度总是与所分配的储存空间相匹配,这就为缓冲区溢出埋下隐患。操作系统所使用的缓冲区,又被称为“堆栈”,在各个操作进程之间,指令会被临时储存在“堆栈”当中,“堆栈”也会出现缓冲区溢出。) 等方式直接获取目标权限,但随着安全的迅速发展,这种直接对服务器进行溢出攻击方式越来越少了,因为系统的溢出漏洞太难挖掘了,新的战场已转移到了Web上了。
早起互联网都是非常单调的,一般只有静态的文档(就是没有与数据库交互的网站称为静态网站),随着技术的发展,互联网慢慢的多姿多态,每个人都可以在互联网中遨游,小学课本上所谓的"地球村"也真正实现了。
如今的Web
如果的Web应用成为Web应用程序,与早期的Web很非常大的区别,现在的Web可以购物、玩游戏、看电视、社交等都可以实现,而使用的人只需要下载一个浏览器就可以使用了。
现在的Web为何如此强大?这是因为ta有4点是非常重要的:
我们还可以怎么理解:把服务器比喻作星球,容器比喻生态环境,数据库比喻人的大脑,脚本比喻成中国人、美国人、英国人、汪星人(滑稽)
Web默认是运行在服务器上的80端口。
以往,甚至如今,Web都不是非常安全的,我们可以时常看到哪个厂商被某某某入侵什么什么的,这是为什么?原因如下:
说了那么多,那么到底攻击者是如何攻陷服务器的,我们看如下的图:
如果攻击者在渗透服务器时,直接对目标下手,那么一般都有这三个手段:
如何更好的去学习Web安全
作为一名Web渗透测试人员,开发是必须理解的,你要简单的知道运行原理,实现原理,比如什么是GET什么是POST之类的。从某个角度上来讲Web渗透测试人员就是一名黑客,但黑客也有好坏之分的,但是一般黑客都是好的,骇客才是搞破坏的,但很多人不明白什么是"骇客",甚至有些安全研究者,都用白帽子黑帽子来区分,其实黑帽子是利用黑客的角度来实施攻击和牟利的人群,而白帽子则是利用手中的技术进行反黑客的人群
渗透测试人员和攻击者性质不一样,攻击者只需要一个突破口,拿到shell即可,而白帽子就不一样了,要做全面的检测,才能保证系统的安全,然而做到这些,必须学习编程,甚至要有比程序员更强的功底。
编程语言如何学习
其实说真的,这是我个人经验,学语言之真的在精不在多的,只要学好一门语言,基本上其他语言也对你来说没有什么难度了,这是因为语言具有相同性的。
随着Web2.0时代的到来,互联网从C/S(客户端/服务的)架构转变到B/S架构(浏览器/服务器),如果我们访问一个网站,只需要在浏览器中输入URL即可。
那么当客户端(浏览器)与Web服务器进行交互的时候,就存在Web请求,这种请求给予统一的应用层协议(HTTP协议)来交互数据。
如何发起一个HTTP请求?我们只需要打开浏览器然后回车,并输入URL就可以发起HTTP请求了,我们就可以在页面上看到请求的结果。
URL是什么?URL就是统一资源定位符,也可以称为网页地址,域名,URL的格式如下:
协议://域名[:端口]/路径/[?传参]
[]里表示的值是可填可不填的,像[:端口]
我们是可以不填的,因为这默认就是80端口了,比如我们访问https://www.baidu.com与https://www.baidu.com:80效果是一样的。
我们知道,只要借助浏览器可以快速发起一次请求,那么我们不使用浏览器呢?其实我们还可以用很多工具来发起HTTP请求,比如,在Linux中的curl命令,我特意弄了一个Linux环境来给你们演示一下:
我们可以看到这里返回了很多HTML代码,其实这就是完成了一次请求,只是展示的地方不同,前者在浏览器,而这个在终端。我们还可以来返回这个网站的响应头:
HTTP是一种无状态的协议。无状态是指Web浏览器与Web服务器之间不需要建立持久的连接,这意味着当客户端向服务端发送请求,然后Web服务器放回响应,连接就关闭了,在服务端不保留与连接有关的的信息,也就是说HTTP请求只能由客户端发起,服务器不能主动向客户端发送数据。
HTTP遵循发出请求->响应请求的模型,浏览器向服务器发送请求时,服务器处理请求并返回数据给客户端,如图:
<1>.HTTP请求
HTTP请求包括三部分,分别为请求头(消息报头)、请求行(请求方式)和请求正文。下面是一个HTTP请求的一个例子:
这个请求哪里看呢?可以在我们的审查元素中的网络可看,如下图:
POST /index.php HTTP/1.1 # 这是请求行,这里的POST是请求方式。
HOST: www.xxx.xxx # 请求头
User-Agent:Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/59.0 # 空白行,这个User-Agent是浏览器标识
Name=free&pwd=iamfree # 请求正文
与请求头对应的是HTTP响应,HTTP响应也由三部分内容组成,分别为响应行、响应头(信息报头)和响应正文(消息主题),下面是一个HTTP的响应:
HTTP请求的方法有很多,其中GET、POST是最常用的,我们来列举一下这2个的区别:
GET:
POST:
当客户端发出HTTP请求,服务端接收后,会向客户端发送响应信息,状态码就是服务端返回的数据,比如像这样的:
状态码的类别:
303 See Other 该状态码表示由于请求对应的资源存在另外一个URI,应使用GET方法定向获取请求的资源。 303状态码和302状态码有着相同的功能,但303状态码明确表明客户端应当采用GET方法获取资源。 当301,302,303响应状态码返回时,几乎所有的浏览器都会把POST改成GET,并删除请求报文的主体,之后请求会自动再次发送。 301,302标准是禁止将POST方法改变成GET方法的,但实际上使用时大家都会这么做
304 Not Modified 该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。304状态码返回时,不包含任何响应的主体部分。304虽然被划分在3XX类别中,但是和重定向没有关系。
307 Temporary Redirect 临时重定向。该状态码与302 Found有着相同的含义。307会遵照浏览器标准,不会从POST变成GET。
400 Bad Request 该状态码表示请求报文中存在语法错误。当错误发生时,需要修改请求的内容后再次放松请求。
401 Unauthorized 该状态码表示发送的请求需要有通过HTTP认证的认证信息,另外若之前已进行过1此请求,则表示用户认证失败。
403 Forbidden 该状态码表明对请求资源的访问被服务器拒绝了。
404 Not Found 该状态码表明服务器上无法找到请求的资源。除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。
500 Internal Server Error 该状态码表明服务器端在执行请求时发生了错误。
503 Service Unavailable 该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求
前面只讲了请求头的数据,并没有仔细拆分开来讲,现在我们来看下:
请求头只出现在HTTP请求中,请求报头允许客户端向服务器传递请求的附加信息和客户端自身的信息,讲几个常用的HTTP请求头,如下:
HTTP请求头:
1. HOST:
HOST请求报头域主要用于指定被请求资源的Internet主机好端口号,例如:HOST:www.chengyin.org
2. User-Agent:
请求报头域允许客户端将它的操作系统、浏览器和其他属性告诉服务区,形成了浏览器标识
3. Referer:
Referer包含一个URL,表示用户是从什么地方来到本页面的,比如我们刚刚在www.baidu.com,然后我们访问了www.chengyin.org,那么请求头中就会返回一个Referer:www.baidu.com,表示我们是从百度过来的。
4. Cookie:
Cookie相当是重要的请求头,他用来表示请求者身份,在后面的攻击中,如果攻击者获取了受害者的Cookie,那么攻击者不用输入登录的账号密码,凭借着受害者的Cookie就可以直接登录了。
5. Range:
Range可以请求实体的部分,多线程下载一定会用到此请求。
HTTP响应头:
响应头是服务器根据客户端发送过来的请求来向客户端发送的HTTP头,有点绕。
HTTP实体头:
Content-Type:
用于向接收方指示实体的介质类型。
主要区别:
写了那么多废话,我们来实战一下吧!
大部分网站为了减少服务器的压力,将所有的验证都交给JavaScript来进行验证,殊不知这样大大增加了安全隐患。
在渗透测试的过程中,我们经常会对HTTP请求的截取来发现一些隐秘的漏洞。比如利用抓包来修改前端对我们输入的限制等(因为我现在列太多你们也还不懂,就先例举一点点)。
什么叫抓包呢?抓包就是我们当客户端给服务器发送数据的时候,我们把包抓取了,我们可以修改包,可以丢弃包,可以做一些前端限制我们做的事情,可以通过抓包来修改,有些人会问,为什么可以抓包,这是因为JavaScript属于前端认证,在浏览器未提交数据时进行验证,而我们是通过验证,并拦截HTTP请求后修改数据,所以JavaScript的验证根本起不到什么作用,由此可见,前端验证是不可靠的。
那我们用什么来抓包呢?这里我们是使用的Burp Suite简直是渗透神器!如图:
Burp使用
这也是我写的笔记,可以大概看一下,因为工具性这样的东西,实在很难写,如果有空的话,我可以录制下视频~:https://www.zybuluo.com/1kbfree/note/1067234
SEO(Search Engine Optimization)搜索引擎优化,简单来说,就是让网站的排名更高,比如,搜索"博客"这个关键字,那么排名第一的网站可能就是做了SEO优化,排名越高,网站流量越多,利益越大。
黑帽SEO就是指通过作弊的手段欺骗搜索引擎,来获取非正常的排名,让网站更靠前,流量更大。
之前我也很好奇为什么讲web安全要讲黑帽SEO,这是因为在安全领域,凡是有利益的东西,都是攻击的动机,SEO行业就是一个典型的例子。
黑帽SEO中一个提升排名的手段就是友情链接,但是比较大的网站凭什么与你做友情链接呢?那么这个时候,黑帽SEO就会对网站进行入侵,然后偷偷的挂友情链接(黑链),从而得到更好的排名(这个世界的可怕之处,就是人有思维)。
搜索引擎劫持也是黑帽SEO手段的一种,什么是搜索引擎劫持呢?就是当你直接输入域名可以正常进入自己网站,而使用百度,谷歌,必应等搜索引擎打开自己的网站就会跳转到其他的网站。
其实这都是黑帽SEO利用HTTP协议搞的鬼
现在来讲解一下:在HTTP中有个请求头叫做Referer(上面讲了),还有一个叫做User-Agent(浏览器标识),黑帽SEO就是利用这两个头来欺骗搜索引擎的,Referer头告诉Web服务器,用户从哪个页面过来的,而User-Agen头则用于告诉Web服务器用户使用的浏览器和操作系统。当用户通过搜素引擎打开此网站时,一般数据包中的Referer头都会为Referer https://www.baidu.com/xxxxxxxx
或Referer https://www.google.com.hk/xxxxxxxx
,确定是搜索引擎过来的,就可以通过Web语言来跳转到攻击者设置好的地址。
小结:掌握HTTP协议是一个合格的渗透测试人员的基本功。
在渗透之前,有一步非常重要的就是信息渗透了,有一句话叫,知己知彼,百战不殆。说的就是这么个意思。
那么在渗透的时候应该收集哪些资料呢?比如:
Goole,应该无人不知把,全球最大的搜索引擎,没有之一。由于Google的强大,他也变成了黑客必备的秘密武器,它 能搜索到一些你意想不到的信息。
利用Google来搜索网站子域名是一件简单但又繁琐的事情,简单主要是只需要输入关键字然后搜索,繁琐的主要是要在海量的信息中搜找子域名。