这里是西工大-信息安全基础能力训练(Information Security Fundamental Ability Training)课程的实验报告!敬请参观与指正!请勿直球抄袭!本人不对任何抄袭借鉴行为及其后果负责。
题目来源是 CTFHub 中的技能树-Web-Web前置技能-HTTP协议,网上 Writeup 满天飞好吧。
实验一
实验目的
搭建 DVWA 靶机环境。
实验过程
- 配置代理,使用 NAT 模式,安装 proxychains 并配置。
- 下载 DVWA 到本地:输入
proxychains git clone https://github.com/digininja/DVWA.git
,再输入sudo mv DVWA /var/www/html
移动到相应文件夹中。 - 开启 apache2 服务:
sudo service apache2 start
- 拷贝配置文件:
cp config/config.inc.php.dist config/config.inc.php
- 开启数据库:
service mariadb start
- 配置数据库,在 root 用户下创建用户,验证创建成功。
- 在最新版本(8.2)中开启 PHP function allow_url_include、安装 php-gd 模块、设置文件夹的写权限、在 dvwa/config/config.inc.php 中设置 reCAPTCHA key。
- 在 security.php 中设置安全等级,在此设置为 Low。
网络配置(重要)
- 编辑-虚拟网络编辑器-更改设置-还原默认设置(记得备份),之后添加enth0、1、8(NAT)
- 虚拟机-设置-网络适配器-NAT模式
- 在 Kali Linux 中,右键“网络管理器”-启动联网。打开终端并输入以下命令:
1 | sudo vim /etc/network/interfaces |
- 在打开的文件中,将以下行添加到文件的末尾:
1 | auto eth8 |
-
保存并关闭文件(在 Nano 中,按下 Ctrl+X,然后输入 Y 并按下 Enter)。
-
重启网络服务,使新的配置生效:(
reboot
也行)
1 | sudo systemctl restart networking |
- 安装 proxychains,更改
/etc/proxychains4.conf
配置信息,添加sock5 <IP> <port>
、http <IP> <port>
。(宿主机(WLAN的) IP 更改需要更改这些项) - 终端中的任何命令,只要是想经过代理,都需要在前面添加
proxychains
。启动mariadb
和apache2
似乎需要经过代理,打开http://localhost/DVWA/setup.php
似乎不能经过代理。火狐需设置为“使用系统代理设置”。
下面是 AI 跑出来的连接宿主机的 Clash 代理的方法,未经尝试验证,谨慎试用:
要在 VMware 中的 Kali Linux 2022.3 虚拟机中连接宿主机的 Clash 代理,您需要执行以下步骤:
-
在宿主机上安装 Clash 代理并启动。确保您已经设置好了代理服务器的端口和密码。
-
在 VMware 虚拟机中,选择“NAT 模式”,这将允许您的虚拟机与宿主机使用相同的 IP 地址。
-
在 Kali Linux 中,打开终端并输入以下命令:
1 | sudo nano /etc/environment |
- 在打开的文件中添加以下行:
1 | http_proxy="http://<宿主机 IP 地址>:7890" |
请注意将 “<宿主机 IP 地址>” 和 “<Clash 代理端口>” 替换为您实际使用的值。
-
保存并退出文件(在 Nano 中,按下 Ctrl+X,然后输入 Y 并按下 Enter)。
-
重新启动 Kali Linux,以便它能够读取新的环境变量。
现在您的 Kali Linux 虚拟机应该能够连接到宿主机上运行的 Clash 代理。您可以尝试在终端中运行以下命令来测试代理是否正常工作:
1 | curl https://www.google.com |
如果一切正常,您应该能够看到 Google 的 HTML 代码。如果出现错误,请检查代理服务器的设置和连接。
参考资料
- https://customerconnect.vmware.com/cn/downloads/#all_products
- Get Kali | Kali Linux
- VMware 中安装 Linux-kali.2021(详细图文教程)
- Install Kali Linux 2022.2 – Step by Step with Screenshots
- VMware 虚拟机网络配置-NAT 篇 - 知乎
这其中提到的“虚拟网络编辑器”中的“子网 IP”,在掩码为 255.255.0.0 的情况下,IP 第三部分可以一样。(宿主机 IP 更改需要更改这些项) - Ubuntu22.04 vm 虚拟机使用宿主机 Clash for Windows - 知乎
前半段 VM 中的配置可参考。 - 在 VMware ubuntu 18.04虚拟机中使用主机clash for window代理上网 - 知乎
同样是参考。 - Kali 虚拟机使用 proxychain4通过主机代理上网 - 简书
/etc/proxychains4.conf
配置信息中,除了需要添加sock5 <IP> <port>
之外,还需要添加http <IP> <port>
。(宿主机 IP 更改需要更改这些项)
终端中的任何命令,只要是想经过代理,都需要在前面添加proxychains
。 - Kali Linux 科学上网
查看“通过已经可以科学上网的电脑实现科学上网”一章节即可。 - 简单的 Kali 虚拟机代理配置教程
- Kali Linux 虚拟机连宿主机代理配置!
后续题目参考资料
HTTP
curl
Burp Suite
- BurpSuite_pro_v2.1
- burp suite 1.7安装教程 2.1版本也能使用这个步骤
- java 环境配置(详细教程)
- Burp破解及代理抓包.mp4_哔哩哔哩_bilibili
- 黑客工具之BurpSuite详解
CTFHub
- CTFHUB-WEB 前置技能-HTTP 协议-请求方式
- CTFHub-web(基础认证)
- CTFHub - Web(一)
- CTFHuB-技能树-Web前置技能-HTTP协议
- CTFhub-WEB前置-http协议闯关 | HTTP
- CTHub–ctf–web–http(1.请求方式2.302跳转3.cookie4.基础认证5.响应包源代码)
- NANXmm的博客_CSDN博客-writeup,学习笔记领域博主
实验二
实验目的
请求方式:HTTP 请求方法, HTTP/1.1协议中共定义了八种方法(也叫动作)来以不同方式操作指定的资源。
使用某一请求方法对某网页请求以得到 flag。了解 HTTP 消息、HTTP 的八种请求方法;学习 curl、Burp Suite 的使用方法。
实验过程
1. 理论学习
HTTP 消息分为请求 Request 和响应 Response。请求报文包括以下格式:请求行 Request line、请求报头 Request header、消息正文 body;响应报文包含:响应行 Response line、响应报头 Response header、消息正文 body。
在请求报文的请求行中,第一个字段是请求方法。HTTP/1.1协议的八种请求方法为:GET
、HEAD
、POST
、PUT
、DELETE
、CONNECT
、OPTIONS
、TRACE
。可以使用 curl -X
指定请求方法。
2. curl 方法
启动环境,打开给出的网页链接,发现网页内容如下:
可以看到,网页提示使用 CTF**B
方法,而非上述八种方法的任何一种。若提示 HTTP Method Not Allowed
错误,需要请求 index.php
。可以很明显地猜出,该方法是 CTFHUB
方法。
在终端输入 curl -X CTFHUB http://challenge-4c545ef0343a22ef.sandbox.ctfhub.com:10800
,结果如下:
可以看到,返回了错误命令 405 Not Allowed
,因此我们需要请求 index.php
。使用 curl -X CTFHUB http://challenge-4c545ef0343a22ef.sandbox.ctfhub.com:10800/index.php
,结果如下:
得到 flag:ctfhub{e84096dc8207f72c5bf5d28b}
3. 抓包方法
使用 Burp 抓取请求包,发送到 Repeater 之后,修改请求方法为 CTFHUB
,再重新请求,得到 flag:ctfhub{3f0a1e15bc79949eceb40623}
。(重开环境了)
实验三
实验目的
302跳转:HTTP 临时重定向
分析网页发生的重定向,规避重定向并获取 Flag。了解 HTTP 消息、状态码、重定向;学习 curl、Burp Suite 的使用方法。
实验过程
1. 理论学习
在响应报文中,响应行包含状态码 Status code。1 开头的状态码表示请求已被接受,需继续处理,这类响应是临时响应;2 开头表示请求已被服务器成功接收;3 开头表示重定向,客户端须采取更多操作来实现请求;4 开头表示客户端出现错误;5 开头表示服务器出现错误。
HTTP 重定向(redirect)操作由服务器向请求发送特殊的重定向响应而触发,该响应中包含着 3 开头的状态码,和保存重定向 URL 的 Location 字段。浏览器接收到重定向响应后,立刻加载 Location 标头中的新 URL。重定向包含永久重定向、临时重定向、特殊重定向,其中 302 状态码属于临时重定向,表示由于不可预见的原因请求的页面暂不可用。
在 curl 中,-L
参数可以让请求跟随重定向,而 curl 默认不跟随重定向。
2. curl 方法
启动环境,访问链接,在该网页中点击 Give me Flag 链接,发现该网页好像发生了重新加载,根据题目推测发生了 302 重定向。
打开开发者模式,选择“网络”,再次点击链接,发现确实发生了 302 重定向。查看响应头,发现重定向到 /index.html
,即为当前打开的 URL,如图所示:
使用 curl 直接请求 Give me Flag(即 /index.php
)而不加 -L
参数 ,可得到 Flag:
ctfhub{9234a08cb18828605359a3db}
3. 抓包方法
使用 Burp 抓取请求包,发送到 Repeater 之后,修改 URN 为 /index.php
,再重新请求,得到 flag:ctfhub{0e41b55522fbb7b454eed21b}
。(重开环境了)
实验四
实验目的
Cookie:Cookie 欺骗、认证、伪造
发送修改过 cookie 的请求报文,以获得 Flag。了解 HTTP 消息、cookie;学习 curl、Burp Suite 的使用方法。
实验过程
1. 理论学习
Cookie 由服务器端创建后返回给浏览器。cookie 以字符串的形式存储,其表示形式为键值对。客户端发送请求时,请求报头携带了在 Path 属性中包含了请求的 URL 的 cookie。curl 中 -b
参数可用来向服务器发送 cookie。
2. 开发者模式方法
打开环境给出的链接,发现网页提示 only admin can get flag.
进入开发者模式,选择“网络”,刷新网站后查看请求头,发现 cookie 中 admin=0
:
右键该消息,选择“编辑并重发”,输入网址,在消息头中添加 Cookie
项,写入 admin=1
,再点击“发送”,可以在右侧的“响应”中看到 Flag:ctfhub{50624786f30f02058e228bb3}
3. curl 方法
使用 -b
或 --cookie
参数,使用双引号包含 Cookie 键值对 admin=1
,可得到 flag。
$p.s.$ -H
参数同样可以用来添加请求的 Cookie 标头来实现同样的功能:-H "Cookie: admin=1"
4. 抓包方法
抓取请求包,Repeater 中将请求报头里的 admin=0
改为 admin=1
,点击“Go”发送即可。
实验五
实验目的
基础认证:在 HTTP 中,基本认证(英语:Basic access authentication)是允许 http 用户代理(如:网页浏览器)在请求时,提供 用户名 和 密码 的一种方式。详情请查看 https://zh.wikipedia.org/wiki/HTTP基本认证
使用字典爆破账号密码,得到 Flag。了解 HTTP 消息、基础认证;学习 Burp Suite、Python requests 和 urllib 库的使用方法。
实验过程
1. 理论学习
在进行基本认证的过程里,请求的HTTP 头字段会包含
Authorization
字段,形式如下:Authorization: Basic <凭证>
,该凭证是用户和密码的组和的base64编码。基本认证 并没有为传送凭证(英语:transmitted credentials)提供任何机密性的保护。仅仅使用 Base64 编码并传输,而没有使用任何 加密 或 散列算法。因此,基本认证常常和 HTTPS 一起使用,以提供机密性。
2. Burp Intruder 方法
打开链接,点击 click,抓包发现网站提供一个认证域,其中验证的模式为 Basic
,保护域为 realm="Do u know admin ?"
由此猜测用户名为 admin
。
用户名中输入 admin
,随便输入一个密码,抓取请求包,送到 Intruder 中:
选择用户名密码键值对对应的位置,即 Basic
之后的 Base64 密文,点击 Add §
将其添加为 Payload 插入点。
导入附件中的密码表,添加前缀 admin:
,设置编码方式为 Base64 加密,取消选择 URL 加密。
点击界面最上方的“Start attack”,开始破解,在结果中找出状态码为 200 的项目,选择并查看 Response 即可得到 Flag。(下下图中是将包含正确密码的请求在 Repeater 中发送后得到的响应。)
Flag 为:ctfhub{ace6aaaabe1550889c9266d5}
3. Python 方法
使用 requests 库,有两种方法。
auth=HTTPBasicAuth()
1 | import requests |
headers
1 | import requests |
得到正确的密码为 000000
,认证得到 Flag:
实验六
实验目的
响应包源代码:HTTP 响应包源代码查看
查看网页源码,找出 Flag。学习开发者模式的使用和网页源码的查看方法。
实验过程
- 打开环境给出的链接,使用 F12 打开开发者模式:
- 使用 Ctrl+U 查看网页源代码:
上述两种方法都可以得到 Flag:ctfhub{89157a9d287bd09afd7db2ca}
彩蛋
- 彩蛋图片:
- 作者:羽々斬 twi@u_u_zan,pid:2179695
- 来源:Touhou Gensou Eclipse Files