CTFHUB-技能树-Web-Web前置技能-HTTP协议

地址:https://www.ctfhub.com/#/skilltree

请求方式

预备知识

1.http请求样式以及服务器响应包的样式

具体可以在菜鸟教程中了解一下https://www.runoob.com/http/http-messages.html

2.curl命令的使用

这里简单列举几个:

①curl -i http://ip  查看http响应头

②curl -v http://ip  查看交互过程

③curl -X GET http://ip或者curl -X http://ip  GET请求(发起http请求时默认是GET型)

④curl -X POST http://ip -d "参数"  POST请求

注:这里的请求方式可以是常规的请求方式如GET、POST,也可以是自己定义的,前提是被服务端允许,区分大小写!

这里给出两个学习地址,根据需要自行了解

Windows中的curl命令:https://blog.csdn.net/wangjunji34478/article/details/35988223

Linux中的curl命令:https://www.cnblogs.com/duhuo/p/5695256.html

 

题解payload:curl -v -X CTFHUB http://challenge-74da4bfe747dae2a.sandbox.ctfhub.com:10080/index.php

 

302跳转

预备知识

 

 

 意思就是该URI中的资源被临时移动,但URI不变

 

题解:直接抓包在重发器里发送就可以看到URI里面的内容了

 

cookie

预备知识

cookie:由后端服务器端创建保存在客服端一种数据库结构。浏览器请求和后端服务端响应都会携带创建的cookie来回传输。cookie在传输时存储在请求头和响应头中。

作用: 保存用户与后端服务器的交互状态。
 
这里顺便讲一下cookie和session的比较
cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。
具体了解:https://blog.csdn.net/weixin_44303465/article/details/89523719
 
题解:直接抓包,然后看到cookie: admin=0,在重发器中将0改为1就可以了,意思就是你的登陆状态为管理员
 
基础认证
预备知识
(1)HTTP基本认证
  桌面应用程序也通过HTTP协议跟Web服务器交互, 桌面应用程序一般不会使用cookie, 而是把 "用户名+冒号+密码"用BASE64算法加密后的字符串放在http request 中的header Authorization中发送给服务 端, 这种方式叫HTTP基本认证(Basic Authentication)
 
(2)HTTP基本认证的过程
  第一步:  客户端发送http request 给服务器,
  第二步:  因为request中没有包含Authorization header,  服务器会返回一个401 Unauthozied给客户端,并且在Response的 header "WWW-Authenticate" 中添加信息。
  第三步:客户端把用户名和密码用BASE64加密后,放在Authorization header中发送给服务器, 认证成功。
  第四步:服务器将Authorization header中的用户名密码取出,进行验证, 如果验证通过,将根据请求,发送资源给客户端
 
题解:随意填写一个用户名和密码,如admin和admin,然后抓包,看到Authorization中的信息是一段base64的密文,解密后看到admin:admin,结合题目给的txt文件想到爆破
这里给出两种爆破方式
:将给出的密码进行统一的base64加密,并另存为一个新的txt文件,代码如下:
import base64

dic_file_path = r"C:\Users\asus\Desktop\Else\10_million_password_list_top_100.txt"# 字典文件路径
with open(dic_file_path, 'r') as f:
password_dic = f.readlines()

username = 'admin:' # 用户名,默认admin
for password in password_dic:
str1=str.encode(username + password.strip())
encodestr = base64.b64encode(str1)
encodestr=str(encodestr)
encodestr=encodestr.strip('b\'')
#encodestr=encodestr.replace("=","\=") #避免“=”被转译 #这一句我觉得不需要就注释掉了
print(encodestr)
注意:

 

 这个地方要取消勾选!!!

 

:爆破点选择46后面的

 然后载入题目给的密码,并且勾选base64加密

 

响应包源代码
题解:F12查看源码或者抓包都可以直接看到flag
 
总结知识点:
1.http的请求方式,客户端请求包格式,服务端响应包格式,curl命令的使用。
2.响应包中的状态码对应的信息
3.了解cookie是什么,以及cookie和session机制的区别
4.http基本认认证
 
参考:
 

转载请注明出处✔

posted @ 2020-04-28 18:24  Web_Fresher  阅读(283)  评论(0编辑  收藏  举报