2020 ISG“观安杯”最高分值web题的解题思路大放送
背景
前天下午临时收到通知,要昨天安排打一场观安组织的ISG比赛,一次都没打过CTF的我属实有点慌...因为技术能力范围有限,开启任务后分配了web和misc给我,每题都过了一遍之后感觉都很懵...就直接先上了这个500分的大题(毕竟领导交代过,做不出来没事)。
webshell is very danger
进入访问地址,啥都没有。
查看源码后发现注释file.php?f=index.php,访问之后发现还是上面这个页面,那一看这个url就肯定试一下文件读取了。尝试一下发现还真的可以,读了/etc/passwd
看了一遍之后好像也读不了其他文件了,目前来看这个页面除了一个hacker账户有点可疑,其他的好像也没什么了。
既然感觉没啥做的了,我们尝试利用伪协议读取一下file.php源码,
php://filter/read=convert.base64-encode/resource=file.php
将源码base64解码后,提示我们看bash_history这个文件夹
这个时候突然想到了开头查看passwd文件的hacker用户,那么我们直接查看hacker的历史记录
根据经验猜解到在/home/hacker/.bash_history
发现webshell文件,可以看到被改名为server.php
根据bash_history提供的线索,访问server.php果然是一个后门文件
提示要密码,尝试输了几次弱口令后又懵逼了,没办法,只能再次尝试伪协议看看了
似乎又发现了线索,用在线的运行php代码的网站执行该文件
成功发现密码,终于搞定,登进server.php后,脸黑了==
说好的flag呢???????没办法,继续找呗,写了格式化的脚本,要不然眼都看瞎了,多次尝试后发现在/tmp目录下
把log文件下载下来,删选内容发现upload文件夹,尝试访问一波
发现上传点,伪协议访问发现可以上传php,直接传了冰蝎的码
访问IP/shell.php,获得flag(忘了截图了)
flag{fMsugzWqFAjSdDL8mKonk5VGJ2lTBX4t}
赛后总结
因为一上来就做的这个500分大题,题目又比较绕,还要写脚本格式化日志,一来二去花了有1个多小时在这道题上,然后后续乱七八糟的东搞一下西搞一下,不过好在做出来了,逆向的500分没人解出来,这道web的500分就占了我们小队近1/3的分了,最后竟然还整了个小组第一,属实没想到....。
总结:CTF果然是需要靠脑洞的==
- 阿里程序员2017年终总结:web前端最有效学习方法!让你少走弯路
- 《关于深化“互联网+先进制造业”发展工业互联网的指导意见》的系列解读 解读二:打造平台体系
- 2018最火的AI丶云计算丶大数据丶物联网丶量子计算五大热门之间的关系
- 人工智能或能帮助揭示永葆青春的秘密 寻减缓衰老药物
- 近百万的“荣耀”域名遭仲裁 两个终端的对决
- IT专业人员如何看待软件定义的数据中心市场
- 安正平:网络隐私保护不能止于关闭直播平台
- 摩拜与武汉地铁深度合作,网上买地铁票又多了一种渠道
- 从零推导神经网络之入门篇
- 支付宝红包到底是谁挣了?
- 计算机行业2018年度投资策略报告:人工智能为主线,关注行业落地
- 闪电网络原理通俗解释
- AI、机器学习和深度学习的关系及区别
- 145号文下发:摸底互联网平台与交易所合作
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Kubernetes K8S之通过yaml文件创建Pod与Pod常用字段详解
- Kubernetes K8S之kubectl命令详解及常用示例
- Kubernetes K8S之Pod 生命周期与init container初始化容器详解
- Kubernetes K8S之Pod生命周期与探针检测
- Kubernetes K8S之Pod 生命周期与postStart、preStop事件
- Kubernetes K8S之资源控制器RC、RS、Deployment详解
- python教程 | 最标准的地图调用方式(国家测绘局提供数据)
- Kubernetes K8S之资源控制器StatefulSets详解
- Kubernetes K8S之资源控制器Daemonset详解
- Kubernetes K8S之资源控制器Job和CronJob详解
- Kubernetes K8S在IPVS代理模式下Service服务的ClusterIP类型访问失败处理
- Kubernetes K8S之Pod跨namespace名称空间访问Service服务
- Kubernetes K8S之Service服务详解与示例
- Kubernetes K8S之Ingress详解与示例
- Kubernetes K8S之存储Secret详解