宣传一波 更好的阅读体验 👉 个人blog
Web
Web前置技能
HTTP协议
1.请求方式
题目
本人英语不行>﹏<
但是大概的意思就是这个HTTP请求的方式是GET,要我们使用CTFHUB的方式请求才能给我们flag
我们可以打开F12看网络监听看到index.php,改变请求方式有两种
1.curl
使用cmd的curl去请求界面
输入
curl -v -X CTFHUB http://challenge-35ed37f948637891.sandbox.ctfhub.com:10800/index.php
返回了一个flag
当然后面的网站我们应该不一样不能偷懒直接复制
2.burp
过程就是用proxy模块抓包,然后seng到repeater模块进行修改methed,最后send就能得到flag
2. 302跳转
前置知识
- HTTP重定向
服务器无法处理浏览器发送过来的请求(request),服务器告诉浏览器跳转到可以处理请求的url上。(浏览器会自动访问该URL地址,以至于用户无法分辨是否重定向了。)
重定向的返回码3XX说明。Location响应首部包含了内容的新地址或是优选地址的URL。
- 状态码
- 301 redirect: 301 代表永久性转移(Permanently Moved),在请求的URL已被移除时使用。响应的Location首部中应该包含资源现在所处的URL。
- 302 redirect: 302 代表暂时性转移(Temporarily Moved ),与301状态码类似,但是,客户端应该使用Location首部给出的URL来临时定位资源,将来的请求仍然使用老的URL。
- 304 redirect: 如果客户端发送了一个带条件的GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个304状态码。简单的表达就是:服务端已经执行了GET,但文件未变化。
-
301和302状态码都表示重定向,就是说浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取(用户看到的效果就是他输入的地址A瞬间变成了另一个地址B)——这是它们的共同点。他们的不同在于。301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。
-
HTTP中的重定向和请求转发的区别
转发是服务器行为,重定向是客户端行为。为什么这样说呢,这就要看两个动作的工作流程:
转发过程:客户浏览器发送http请求——>web服务器接受此请求——>调用内部的一个方法在容器内部完成请求处理和转发动作——>将目标资源发送给客户;
在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。
重定向过程:客户浏览器发送http请求——>web服务器接受后发送302状态码响应及对应新的location给客户浏览器——>客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址——>服务器根据此请求寻找资源并发送给客户。
在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。
客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。
这些在浏览器或者burp里面抓的包都能看到
先看题目
点击 Give me flag后
可以看到链接进行了跳转,这时候我们打开f12发现302
发现获取favicon.ico时出现的302
同时我们去看burp,发现当我们在在第一个页面访问第二个页面时抓包,发现最初访问的是index.php而不是出现的是index.html,(下面第一个图是点击了Give me flag去第二个页面,第二个图是在第二个页面刷新了一下)这就是暂时性跳转302,原网址依然保留,接着直接请求它
1.curl
因为curl不会进行跳转,curl -L会跟随跳转
直接抓取出现302的域名(注意别输入错误)
2.burp
老样子转给repeater处理
把index.html换成index.php即可
3.Cookie
所谓“cookie”数据是指某些网站为了辨别用户身份,储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。Cookie是一段不超过4KB的小型文本数据,由一个名称(Name)、一个值(Value)和其它几个用于控制Cookie有效期、安全性、使用范围的可选属性组成。
简单介绍一下cookie和session
-
session
简单的说,当你登陆一个网站的时候,如果web服务器端使用的是session,那么所有的数据都保存在服务器上,客户端每次请求服务器的时候会发送当前会话sessionid,服务器根据当前sessionid判断相应的用户数据标志,以确定用户是否登陆或具有某种权限。由于数据是存储在服务器上面,所以你不能伪造。 -
cookie
sessionid是服务器和客户端连接时候随机分配的,如果浏览器使用的是cookie,那么所有数据都保存在浏览器端,比如你登陆以后,服务器设置了cookie用户名,那么当你再次请求服务器的时候,浏览器会将用户名一块发送给服务器,这些变量有一定的特殊标记。服务器会解释为cookie变量,所以只要不关闭浏览器,那么cookie变量一直是有效的,所以能够保证长时间不掉线。
如果你能够截获某个用户的cookie变量,然后伪造一个数据包发送过去,那么服务器还是 认为你是合法的。所以,使用cookie被攻击的可能性比较大。
如果cookie设置了有效值,那么cookie会保存到客户端的硬盘上,下次在访问网站的时候,浏览器先检查有没有cookie,如果有的话,读取cookie,然后发送给服务器。
所以你在机器上面保存了某个论坛cookie,有效期是一年,如果有人入侵你的机器,将你的cookie拷走,放在他机器下面,那么他登陆该网站的时候就是用你的身份登陆的。当然,伪造的时候需要注意,直接copy cookie文件到 cookie目录,浏览器是不认的,他有一个index.dat文件,存储了 cookie文件的建立时间,以及是否有修改,所以你必须先要有该网站的 cookie文件,并且要从保证时间上骗过浏览器.
- 共同点
cookie和session都是用来跟踪浏览器用户身份的会话方式。
- 区别
cookie数据保存在客户端,session数据保存在服务端。
然后就是关于本题
大意是只有admin才能获取flag,这个时候我们直接去找cookie就行了
1.burp
使用burp发现admin=0,改成1就行
2.f12
去找浏览器的cookie值,并改成1
直接去存储里面去找
或者用document找cookie
记得刷新。
4.基础认证
题目介绍:在HTTP中,基本认证(英语:Basic access authentication)是允许http用户代理(如:网页浏览器)在请求时,提供 用户名 和 密码 的一种方式。详情请查看 https://zh.wikipedia.org/wiki/HTTP(维基百科需要翻墙)基本认证
下面是维基百科内容(简单摘了一点)
在HTTP中,基本认证(英语:Basic access authentication)是允许http用户代理(如:网页浏览器)在请求时,提供 用户名 和 密码 的一种方式。
在进行基本认证的过程里,请求的HTTP头字段会包含
Authorization
字段,形式如下:Authorization: Basic <凭证>
,该凭证是用户和密码的组和的base64编码。优点:HTTP基本认证 是一种十分简单的技术,使用的是 HTTP头部字段 强制用户访问网络资源,而不是通过必要的cookie、会话ID、登录页面等(非获取访问控制的)手段。
基本上所有流行的网页浏览器都支持基本认证[2]。基本认证很少在可公开访问的互联网网站上使用,有时候会在小型私有系统中使用(如路由器网页管理接口)。之后诞生的 HTTP摘要认证 用于替代基本认证,允许密钥以相对安全的方式在不安全的通道上传输。
程序员和系统管理员有时会在可信网络环境中使用基本认证。由于,基本认证使用的是Base64,可解码成明文,因此使用Telnet等网络协议工具进行监视时,可以直接获取内容,并用于诊断。
缺点:基本认证 并没有为传送凭证(英语:transmitted credentials)提供任何机密性的保护。仅仅使用 Base64 编码并传输,而没有使用任何 加密 或 散列算法。因此,基本认证常常和 HTTPS 一起使用,以提供机密性。
现存的浏览器保存认证信息直到标签页或浏览器被关闭,或者用户清除历史记录。[3]HTTP没有为服务器提供一种方法指示客户端丢弃这些被缓存的密钥。这意味着服务器端在用户不关闭浏览器的情况下,并没有一种有效的方法来让用户退出。
同时 HTTP 并没有提供退出机制。但是,在一些浏览器上,存在清除凭证(credentials )缓存的方法。
说实话,第一次见,完全摸不着头脑,下载了附件,看到了是密码字典,感觉确实是利用burp进行爆破字典,但由于接触burp时间甚少,只知道有这个模块
虽然网上也有很多教程,但是毕竟我都跟着做了一遍,这里就记录一下吧
1.burp
首先还是经典burp抓包
首先进入链接,点击click
如果直接取消会进入,在此之前我们先抓包
send后发现“Do u know admin ?”推断用户名应该是admin
然后再次去输入账号用户名和密码后进行抓包发现了一串base64编码,随便去个网站)进行解码
发现刚好是我刚才输入的账号密码,注意这里有个:
然后就是利用burp进行爆破
首先将刚才获取的包send 给Intruder模块,选择Sniper(狙击手)模式,然后选择Basic后面那一串,然后点击Add,然后两边就会出现“§”这种字符
接着转入到payloads进行设置 在Payload Options上点击Load打开刚刚下载的附件密码包
然后设置rule,add选择add prefix(添加前缀),即我们刚才的admin:
再次add添加encode解码部分选择base64
最后记得取消下面的√(机翻:这个选择能在最终payload(有效负载)中对选定的字符进行url编码,以便在HTTP请求中安全传输)
最后得到的样子是
最后点击右上角的start attack进行爆破
等它跑密码,记得开跑前把代理关掉,然后跑的过程中会发现有一条的Status和Length不同,点开这个复制Basic值,然后到Decoder进行编译,得到用户名和密码,然后拿着用户名和密码去登录,得到flag。
总结
1.了解burp的新功能,可以增加爆破字典的规则,增加前缀、后缀、编码…等
2.基础认证(basic认证):
Basic认证是一种较为简单的HTTP认证方式,客户端通过明文(Base64编码格式)传输用户名和密码到服务端进行认证,通常需要配合HTTPS来保证信息传输的安全。
当request第一次到达服务器时,服务器没有认证的信息,服务器会返回一个401 Unauthozied给客户端。
认证之后将认证信息放在session,以后在session有效期内就不用再认证了
5.响应包源代码
1.f12
顾名思义,在发送request后得到的response里面直接看源码就行了我还以为是要玩贪吃蛇
有什么系统性的学习路线和资料吗,作为大一完完全全的网安小白对ctf感兴趣,却连学什么和从哪开始学都不清楚。。。
感谢师傅~