前言
在众多的ctf平台当中,作者认为ctfhub对于初学者来说,是入门平台的不二之选。ctfhub通过自己独特的技能树模块,可以帮助初学者来快速入门。具体请看官方介绍:CTFHub。
作者正在更新ctfhub系列,希望小伙伴们多多支持。
注:CTFHub是动态flag,每个人每次都不一样,要自己动手哦。
请求方式
一、wp(write up题目解析)
<法一>、题目显示现在的HTTP方法是get,让我们使用CTF**B方法就可以获得flag,要猜到其实就是CTFHUB;直接抓包改请求方法,点击go,返回200ok.
<法二>、curl的使用:cmd输入:
curl -v -X CTFHUB url/index.php
得到flag。
二、考点
对HTTP请求方法的应用
curl的使用
三、相关知识
1、curl的应用
Web安全常用工具 (持续更新)-CSDN博客(具体内容请看作者另一篇文章)
(参考文献:http://www.ruanyifeng.com/blog/2019/09/curl-reference.html)
curl是一种命令行工具,作用是发出网络请求,然后得到和提取数据,显示在"标准输出"(stdout)上面。Curl不只是一个编程用的函数库,这个命令本身,就是一个无比有用的网站开发工具。
它支持多种协议,下面举例讲解如何将它用于网站开发。
1)查看网页源码
直接在curl命令后加上网址,就可以看到网页源码。我们以网址www.sina.com为例(选择该网址,主要因为它的网页代码较短)。
2)显示头信息
`-i`参数可以显示http response的头信息,连同网页代码一起。
3)显示通信过程
`-v`参数可以显示一次http通信的整个过程,包括端口连接和http request头信息。
4)发送表单信息
发送表单信息有GET和POST两种方法。GET方法相对简单,只要把数据附在网址后面就行。
curl example.com/form.cgi?data=xxx
POST方法必须把数据和网址分开,curl就要用到--data参数。
curl -X POST --data "data=xxx" example.com/form.cgi
如果你的数据没有经过表单编码,还可以让curl为你编码,参数是`--data-urlencode`。
5)HTTP动词
curl默认的HTTP动词是GET,使用`-X`参数可以支持其他动词。
6)cookie
使用`--cookie`参数,可以让curl发送cookie。
curl --cookie "name=xxx" www.example.com
至于具体的cookie的值,可以从http response头信息的`Set-Cookie`字段中得到。
`-c cookie-file`可以保存服务器返回的cookie到文件,`-b cookie-file`可以使用这个文件作为cookie信息,进行后续的请求。
7)HTTP认证
有些网域需要HTTP认证,这时curl需要用到`--user`参数。
2、HTTP协议(详细内容请看下文)
HTTP的工作原理-CSDN博客
HTTP属于无状态协议,有get、post等请求方法
1)HTTP包组成
由起始行、头部、实体(协议包要传输的内容)组成。
上述图片第1行为起始行:内容是请求方法、uri、HTTP协议版本
2-8行为head头部;
头部下来空一行为实体所在,上述图片为get包,所以实体为空
2)HTTP回包(response)的状态响应码
图片上箭头所指为状态响应码所在位置;
常见状态码对应的意思总结如下:
302跳转
一、wp
<法一>
bp拦截,点击give me flag,重发,得到flag。(挂上 BurpSuite 之后访问 index.php )
<法二>使用curl:直接用 curl 访问 index.php 即可得到 flag
因为curl默认是不跟随重定向的,所以可以直接通过F12访问出现302的url,放进cmd里即可得到flag。写法:
curl -v url/index.php
二、考点
HTTP状态码(见上文),302重定向
三、相关知识
1、302
302是HTTP协议中的一个状态码(Status Code)。可以简单的理解为该资源原本确实存在,但已经被临时改变了位置。因此说明在我们抓取的包里会出现一个新的url链接来进行跳转
2、302与301的区别
302跳转是暂时的跳转,服务器返回302代码,搜索引擎认为新的网址只是暂时的。301重定向是永久的重定向,搜索引擎在抓取新内容的同时也将旧的网址替换为重定向之后的网址。
3、 HTTP中的重定向和请求转发的区别
转发是服务器行为,重定向是客户端行为。为什么这样说呢,这就要看两个动作的工作流程:
1)转发过程:客户浏览器发送http请求——>web服务器接受此请求——>调用内部的一个方法在容器内部完成请求处理和转发动作——>将目标资源发送给客户;
在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。
2)重定向过程:客户浏览器发送http请求——>web服务器接受后发送302状态码响应及对应新的location给客户浏览器——>客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址——>服务器根据此请求寻找资源并发送给客户。
在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。
重定向,其实是两次request。第一次,客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。
也就是说在这个题中我们要获取第一次从服务器得到的信息,即index.php,而不是重定向后的跳转到的index.html。
Cookie
一、wp
<法一>提示中说,只有admin身份可以获得flag,抓包,cookie信息的admin=0(false),我们尝试将其改为1(true),扔进repeater模块,进行改包,将cookie身份改为admin,得到flag。
<法二>Web控制台修改
打开开发者工具并选择控制台,修改管理员 admin 的 Cookie 值为 1(True),刷新浏览器网页,得到此题flag
<法三>存储探查器修改
打开开发者工具并选择存储,列表选择Cookie存储,修改admin值0为1,刷新浏览器网页,得到此题flag
<法四>用curl:
curl -v -b ‘admin=1’ url
二、考点
Cookie欺骗、认证、伪造
三、相关知识
1、cookie
HTTP Cookie 又称饼干 ,是服务器发送给用户浏览器并保存在本地的一个数据,如果下一次访问浏览器向服务器发送请求时就会被传送到服务器中。经常用于浏览器网页保持登录或记录数值,例如账户密码、用户行为需求等。
简单的理解:cookie是一个key-value结构的文本信息,他的作用就类似于"身份证",我们通过浏览器向服务器发起请求,如果服务器需要记录用户的状态,他就会给该用户发送一个cookie,浏览器会把它保存下来,等下次我们要再次访问这个服务器的时候,他就会直接带着cookie过去,完成用户认证。
简单的例子:我们要访问一个资源,该网站让我们进行登录,当我们登录成功后,浏览器会记录下该网站颁发给用户的cookie,当用户再次访问这个网站时,浏览器会携带着cookie一起发送给服务器,服务器完成验证,我们直接进去了,不需要在登录页面再登陆一次。
详细信息还是作者的HTTP的工作原理-CSDN博客
2、admin(管理员)
管理员跟普通用户相比具有更高的权限,在渗透测试中获取管理员权限是我们的目标之一。
基础认证
一、Wp(密码爆破题)
首先,打开题目所给界面。这里他给了我们一个题目附件。
下载后解压缩,发现是一个密码本(常用密码)。
点开题目链接,这里提示我们,这是你的flag,还有一个可以点击的选项。
点击,然后弹出来了一个登陆界面,这里老规矩,打开burpsuite,进行抓包。
思路是好的,但没什么用,抓不出来有用的东西。
再到登录页面看看
然后进行一下测试,因为目前没有更多的思路,所以先随便输入用户名和密码,这里输的是admin和admin(要爆破就爆破有价值的账号,管理员账号是必尝试的,admin是管理员的意思,许多开发人员为了方便,就以admin为管理员账号名)
然后进行抓包,发现了Authorization:后面有一串BASE64的编码(要注意base64的格式,以后需能准确判断出来)
尝试进行解码,看看到底是啥。随便找个base64的在线解码平台,如Base64 在线编码解码 | Base64 加密解密 - Base64.us
解码这个base64后,发现是我们刚才输入的用户名和密码,用:进行了隔开,即admin:admin。
Repeater后,给了提示“admin”,这里应该模拟的是我们爆破admin账户的过程,所以我们一开始的思路是对的,我们继续猜测用户名是admin,所以我们得用字典爆破出管理员账号的密码。
再回到bp界面。
把抓到的包发送到爆破模块intruder。选择刚才的base64字符串点击add(add选项在右边),记住,不要吧“basic”也选上了,只有admin:admin(用户名、密码所在位置)是我们需要攻击的位置。
选择sniper(狙击手)。
然后点击上面的payloads。(payload是有效载荷的意思,我的理解是攻击语句)
这里又是常规的爆破选项,导入密码本。点击payload options的Load…,选择刚刚下载并解压的密码本。
因为这里我们假定用户名是admin,所以应该在下面payload processing(载荷处理)里加上前缀admin:,切记要加 : ,因为要爆破的base64字符串是“用户名:密码”, 点击payload processing里的add,选择Add prefix(添加前缀)。
写上admin:
添加完前缀,这还不够,大家还记得之前用户名、密码都是base64编码的吧。但密码本是正常的字符串,如果会python可以试一下重新生成密码本,把密码本编码一下。
不会python也不要紧,大家同上一步再去添加。这里选择encode(编码),选择base64。然后OK。
搞完这个,再记得去掉payload encode(有效载荷编码),不然又爆不出来
然后就可以起飞了。
出现了出现了(没出现也有可能是超时了,作者就因为写文档超时,又花了50金币重开了,哭)。
然后复制粘贴,到数据包的base64编码位置,再send,直接OK。
要是想体验登录的感觉,base64解码后也可以登录
二、考点
- HTTP 基础认证
- 脚本编写
- 密码爆破
三、相关知识
1、基础认证(basic认证):
Basic认证是一种较为简单的HTTP认证方式,客户端通过明文(Base64编码格式)传输用户名和密码到服务端进行认证,通常需要配合HTTPS来保证信息传输的安全。
当request第一次到达服务器时,服务器没有认证的信息,服务器会返回一个401 Unauthozied给客户端。认证之后将认证信息放在session,以后在session有效期内就不用再认证了。
2、bp爆破的使用
(后续会有ctfhub技能树的密码口令专门讲bp的爆破,那时候会系统阐述)
又发现了burp的新功能,可以增加爆破字典的规则,增加前缀、后缀、编码…等
响应包源代码
一、wp
具体请看作者发布的攻防世界的题view-source,解法相同。
二、考点
HTTP响应包源代码查看