[ByteCTF2020] WP e resumo das notas pessoais

Prefácio

这是我第一次参加的比赛,两天时间一道题都没做出来,害有点小难受,希望能够将WP记录好,方便以后的复习查阅

Wallbreaker 2020

A solução esperada oficialmente não saiu e é incômoda. Aguardo a solução esperada após as finais! ! !
No começo eu mesmo abri o título e descobri que Yazi, que não parecia particularmente difícil, primeiro o verificou phpinfo, e Insira a descrição da imagem aqui
então entrei no Ant Sword, mas descobri que além do htmldiretório legível, o tmpdiretório é legível e gravável,
Insira a descrição da imagem aqui
e então pensei em usá-lo globpara arquivar Lendo, http://123.57.91.179:30080/?backdoor=$a=new DirectoryIterator("glob:///*"); foreach($a as $f)%20{echo($f->__toString().' '); }
li um arquivo no diretório raiz readflag, depois pensei em como chamá-lo,
Insira a descrição da imagem aqui
mas acabei com todas as posturas e não consegui ler .
Depois disso, segui o link https://github.com/mm0r1/exploits/blob/ Master / php7-backtrace-bypass / exploit.php é usado, o WP oficial disse que, desde que a linha 24 seja alterada para (new Error) -> getTrace (), ela pode ser usada.
Faça upload do tmparquivo no diretório
Insira a descrição da imagem aqui

Insira a descrição da imagem aqui

douyin_video (sob ataque)

easy_scrapy

Tem um nojento no título MD5截断比较, coloque um script para evitar se perder

# -*- coding: utf-8 -*-
import multiprocessing
import hashlib
import random
import string
import sys
CHARS = string.letters + string.digits
def cmp_md5(substr, stop_event, str_len, start=0, size=20):
    global CHARS
    while not stop_event.is_set():
        rnds = ''.join(random.choice(CHARS) for _ in range(size))
        md5 = hashlib.md5(rnds)
        if md5.hexdigest()[start: start+str_len] == substr:
            print rnds
            stop_event.set()
if __name__ == '__main__':
    substr = sys.argv[1].strip()
    start_pos = int(sys.argv[2]) if len(sys.argv) > 1 else 0
    str_len = len(substr)
    cpus = multiprocessing.cpu_count()
    stop_event = multiprocessing.Event()
    processes = [multiprocessing.Process(target=cmp_md5, args=(substr,
                                         stop_event, str_len, start_pos))
                 for i in range(cpus)]
    for p in processes:
        p.start()
    for p in processes:
        p.join()

Ahhhh, por que fiz assim no início mas não deu resultado. Peguei, mas não posso fazer mal nenhum, sei que a primeira etapa é apenas
um arranhão. Depois de enviar o url, ele irá rastrear e a página irá Os links internos rastejam novamente. A tag a solicitará uma vez e o scrapy suporta o protocolo de arquivo, considere usar o protocolo de arquivo para ler arquivos. Um teste simples descobrirá que o rastreador pegará o link href na página e o rastreará.
Insira a descrição da imagem aqui
Depois de usar /proc/self/environo caminho do código de leitura, environpode-se ver pwdse o /code
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
comando de início de leitura é:
/usr/local/bin/python /usr/local/bin/scrapy crawl byte
ou seja python scrapy crawl byte. Este é scrapyo comando para iniciar o rastreador. Lendo o documento, você verá que ele precisa carregar scrapy.cfgesse arquivo de configuração, então vamos ler o arquivo de configuração e file:///proc/self/cwd/scrapy.cfg
Insira a descrição da imagem aqui
organizá-lo um pouco.

# Automatically created by: scrapy startproject
#
# For more information about the [deploy] section see:
# https://scrapyd.readthedocs.io/en/latest/deploy.html
[settings]
default = bytectf.settings
[deploy]
#url = http://localhost:6800/
project = bytectf

Os projetos criados por scrapy por padrão têm a mesma estrutura e, em seguida, leia a configuração: Bem, vamos dar uma olhada na estrutura do projeto.
Insira a descrição da imagem aqui
Agora que você sabe, leia o settingsarquivo.Insira a descrição da imagem aqui

BOT_NAME = 'bytectf'
SPIDER_MODULES = ['bytectf.spiders']
NEWSPIDER_MODULE = 'bytectf.spiders'
RETRY_ENABLED = False
ROBOTSTXT_OBEY = False
DOWNLOAD_TIMEOUT = 8
USER_AGENT = 'scrapy_redis'
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
REDIS_HOST = '172.20.0.7'
REDIS_PORT = 6379
ITEM_PIPELINES = {
    
    
   'bytectf.pipelines.BytectfPipeline': 300,
}

Ah, embora tenhamos visto o endereço do redis e tenhamos um SSRF sem eco, definitivamente tentaremos o redis, mas ele não pode ser usado. Basta tentar descobrir que ele não consegue passar e continuar a ler o código-fonte do rastreador

Link de referência

ByteCTF 2020 conversações oficiais writeup
sobre vários métodos de disable_functions Bypass
XSLeaks atacar análise HTTP cache de cross-site vazamentos para
quebrar as restrições de segurança iframe
[Tradução] Introdução ao XSLeaks atacar
Característica-Policy
scrapy para criar uma estrutura de diretório do projeto e do projeto Apresente o
diretório Linux / proc para explicar
a comparação do truncamento MD5 do CTF

Acho que você gosta

Origin blog.csdn.net/solitudi/article/details/109372670
Recomendado
Clasificación