CTF之web入门--什么叫做HTTP(下)

700 阅读8分钟

故事承接上一篇,我们知道了HTTP的基础,那么今天我们就来学习一下HTTP在ctf中具体的题目以及应用类型。

注:这篇文章可能会有点长。

这算什么办法

UA头的伪造漏洞的概念及利用方法

首先我们要知道UA什么东西,UA全称是User-Agent。每一个HTTP请求中都有UA头,上面通常会包含我们当前浏览器,系统版本,CPU等。

在web开发中,一般会根据UA头来判断客户端是否适配,这就相当于我们的浏览器和系统就是一把钥匙,如果我们的钥匙匹配,则会进入网页,反之不行,即禁止访问。在现实生活中就是部分网页会提示“请从xxx客户端进入。

至于怎么获取这些UA头呢,我们可以使用 BP(BurpSuit)或者ncat(瑞士军刀),具体工具使用我会在之后发送的内容中涉及,而我们在之后的实验中主要是使用BP为主。(跟我一起呐喊!BP!BP!BP!)

image.png

这里我们收集了一点UA头:

百度:Mozilla/5.0 (Linux; Android 8.0; MI 6 Build/OPR1.170623.027; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/48.0.2564.116 Mobile Safari/537.36 T7/10.3 SearchCraft/2.6.3 (Baidu; P1 8.0.0)
微信:Mozilla/5.0 (Linux; Android 6.0; NEM-AL10 Build/HONORNEM-AL10; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/043906 Mobile Safari/537.36 MicroMessenger/6.6.1.1220(0x26060133) NetType/WIFI Language/zh_CN
IE浏览器:Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)
360SE:User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)
Chrome:Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36(windows)
Chrome: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3451.0 Safari/537.36(Mac)
firefox: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2(Mac)

返回头分析方法

在BP中我们在抓包之后会看见网站的返回头,返回头上会有很多信息,比如HTTP的状态码,中间件信息。还有就是cookie值需要我们格外去注意,因为有很多的内容需要注意用户的要求,一般都是admin=1类似的便是我们是admin身份。

来源伪造漏洞的概念及利用方法

HTTP请求头中还会携带一个Referer的头,这个头的作用就是用来告诉用户从哪个页面过来的,就像是你去一个地方旅游一样,与目的地相对的总有一个始发地,而Referer正是那个始发地,你从哪个页面跳转到当前页面的一目了然。

实例演示

ctfhub--请求方式

第一题咱们实验的就是请求头,这次我们请求的就是GET头,立体则是CTFhub上的web技能树中的web前置技能--HTTP协议--请求方式。以下是CTFhub的网址:CTFHub

好现在咱们来看一下题目,就运用我们目前所学的知识将题目解出来。

image.png 我们仔细查看这个主页面,我们可以从中知道很多信息,首先它的通过要求是什么?就是请求方式用CTFHUB代替。这里我们可以使用两种方式,一是用BP,二是用curl。这里我们就简略的讲述curl,主要讲述BP的做法。(curl的使用和安装,pmmo会单独写一篇文章进行讲述,就当是多混几篇文章吧,如果有兴趣的可以去看看pmmo之后关于curl的文章。)而curl的做法就如下图显示。

image.png

我们现在就来看看BP对这类题目的做法,首先我们先对这个网页进行抓包,具体样貌如下。这里我们看到他的返回头,按照原本网页上的要求,我们将修改目标放在第一行中,首先就是请求方式,在图中我们可以看到这里的请求方式是GET(第一行开头),而我们需要的请求方式是CTFHUB,那么我们就用CTFHUB代替GET。之后我们把这段内容发送到重发器中,在里面我们点击sent,就会得到以下图片。 image.png

image.png 这时候可能很多小明就会问了,为什么我们两个人重发出来的内容会不一样呢,为什么我的状态码是4xx,而这里却又flag呢?这里就是我们故意这么做得(其实是忘记截图,然后又不舍得再花50金币开一次环境),最开始的网页就告诉我们一个信息。【if you got (HTTP Method Not Allowed) Error,you should request index.php】,这句话是什么意思【提示:如果你得到HTTP方法不允许错误,你应该请求index.php】。ok,既然如此,我们就知道为什么出现错误了,当即就在第一行HTTP前加上这次的请求目标,index.php 当然后面的内容不能做修改,这样子我们就得到了正确的解法,成功如上图拿下flag。

至于我为什么不详细讲解curl的做法相信各位也有点了解,毕竟那种做法会让我们忽略掉index.php这个文件,这就会让我们错过一个知识点。当然在这里还是要提醒的是,后缀index.php是在我们访问到网页的时候才会出现的,单纯使用原先靶机提供网址,是没有加上index.php的。

ctfhub--302跳转

接下来,我们要看的就是302跳转这类题型,当然我们要清楚,这里的302指的是状态码。具体内容参见上一篇文章。

Snipaste_2023-06-19_11-09-29.png ok,现在我们看到题目,一个明晃晃的Give me flag写在这里,这样一想,诶呦,这题这么简单!然后咱们兴致勃勃的点了一下。发现了如下的场景。

Snipaste_2023-06-19_11-09-45.png 诶嘿,奶奶的,这不是没有变化吗?其实不然,咱们可以看一看网站的后缀是不是多了一个index.html,然后我们在迷迷糊糊中带有目的性的打开F12,就会看到以下内容。

Snipaste_2023-06-19_11-10-17.png 这里我们看到了什么?其实flag在index.php里,但是当我们进入index.php时,他就会自动跳转到index.html中,这个就是请求目标的问题了,我们只要放在BP中抓包就行。

Snipaste_2023-06-19_11-06-08.png 抓包之后我们发现好像也不用修改了,这个请求木匾就是index.php,那么我们就用这个发送到重发器内,看看结果是咋样的。

Snipaste_2023-06-19_11-06-24.png 看样子这一道题目咱们就解决了,还是蛮简单的,但是我们还是需要注意,我们抓包的网页其实是带有后缀的,如果抓的是最开始的那个,我们可以尝试手动添加请求目标,毕竟咱们是知道请求目标的。这一道题目呢,其实用curl也可以做,但是这里就不做分析了。

ctfhub--Cookie

现在我们再来看第三道巩固题型 cookie,

image.png 上面的意思我想大家都能翻译出来,他说我们只有拿到admin权限才能拿到flag。那么还是那个工具,打开我们亲爱的BP。

image.png

image.png 对网页进行抓包之后我们就看到了这样子的返回头,正如我们在上文说到的那样,如果我们想成为admin那么我们admin的值就要等于1。

image.png 如图我们只要把cookie里面的admin改成1,就得到了我们的flag。

ctfhub--基础认证

OK,我们在题目中其实对于BP的了解也多了很多,那么正好借着复习,我们来看看BP的爆破用法。首先我们看看题目。

Snipaste_2023-06-19_11-06-24.png 这里有一个附件,这个是我们所必须的,解压缩出来就是一个小字典,在题目中会用上,否则用我们自己的字典不知道猴年马月可以爆破出来。

3c615bde2844d00a49a4e5514477fc1.png 打开题目我们可以看到这样子的场景,然后我们点击进去就是以下画面。

f5ee1906bd52bddadd7c957fa050286.png 好的,现在我们就来抓个包,发送到重发器中看看有没有什么线索。

7e269707ccb14a16e733859ea5a7ad6.png 我们注意划线的那句话,它问我们知不知道admin,那么我们就可以判断他的用户名可能是admin,

我们就再回到那个登录界面,对输入了用户名和密码的网页重新抓包,什么你问我不知道密码是啥!好吧,我也不知道,但是我们爆破就是为了爆破这个密码呀,所以咱们随便输一个密码,不管是123还是321都行(这里我数的密码是admin),随后我们得到内容的内容发送到intruber中,获得以下内容。

image.png 全部选定我们将要进行的爆破目标,随后点击ADD进行添加$符号,完成后,我们进入爆破的定义界面。

Snipaste_2023-06-19_19-09-54.png 这里最上面的地方没有框定,咱们注意一下,那是选定使用那种方式爆破的,不同的方式使用方法也不同。接着就是跟着步骤一次次操作,2是提那家密码,1是提那家用户名。(注意这里用户名要加上冒号,否则无法爆破成功)

Snipaste_2023-06-19_19-22-34.png

Snipaste_2023-06-19_19-22-00.png 因为在返回头中我们知道他的编码形式是base64,所以我们要将我们的payload转换为base64的形式。

Snipaste_2023-06-19_19-11-29.png 最后再点击页面右上方的按钮,开始进行爆破。在爆破结果中我们要选取长度与其他不同的payload,那个才是正确的爆破结果。之后查看回应,就能得到flag。

Snipaste_2023-06-19_19-20-03.png

较为复杂的巩固

完成了这些之后,有兴趣的师父们可以再去尝试一下一道题目,buuctf里面的极客大挑战http,里面会有服务器和浏览器更改的内容,如果做不出来可以私信pmmo加入cf学习群聊,有时间的话pmmo会在群里进行解答,或者让群里其他成员进行解答。