当前位置:网站首页>[GYCTF2020]EasyThinking
[GYCTF2020]EasyThinking
2022-08-05 03:25:00 【New Reading of the Classic of Tea.】
[GYCTF2020]EasyThinking

Feel free to test to discover web frameworksthinkphp v6.0.0,Arbitrary file manipulation vulnerabilities may exist
![]()

Other than that, nothing was found,f12也没有发现什么异常,dirsearch扫描一下发现了www.zip

Access the download file
![]()
在web/home/controller有一个Member.php,得到网页源码:
<?php
namespace app\home\controller;
use think\exception\ValidateException;
use think\facade\Db;
use think\facade\View;
use app\common\model\User;
use think\facade\Request;
use app\common\controller\Auth;
class Member extends Base
{
public function index()
{
if (session("?UID"))
{
$data = ["uid" => session("UID")];
$record = session("Record");
$recordArr = explode(",", $record);
$username = Db::name("user")->where($data)->value("username");
return View::fetch('member/index',["username" => $username,"record_list" => $recordArr]);
}
return view('member/index',["username" => "Are you Login?","record_list" => ""]);
}
public function login()
{
if (Request::isPost()){
$username = input("username");
$password = md5(input("password"));
$data["username"] = $username;
$data["password"] = $password;
$userId = Db::name("user")->where($data)->value("uid");
$userStatus = Db::name("user")->where($data)->value("status");
if ($userStatus == 1){
return "<script>alert(\"该用户已被禁用,无法登陆\");history.go(-1)</script>";
}
if ($userId){
session("UID",$userId);
return redirect("/home/member/index");
}
return "<script>alert(\"用户名或密码错误\");history.go(-1)</script>";
}else{
return view('login');
}
}
public function register()
{
if (Request::isPost()){
$data = input("post.");
if (!(new Auth)->validRegister($data)){
return "<script>alert(\"The current username is already registered\");history.go(-1)</script>";
}
$data["password"] = md5($data["password"]);
$data["status"] = 0;
$res = User::create($data);
if ($res){
return redirect('/home/member/login');
}
return "<script>alert(\"注册失败\");history.go(-1)</script>";
}else{
return View("register");
}
}
public function logout()
{
session("UID",NULL);
return "<script>location.href='/home/member/login'</script>";
}
public function updateUser()
{
$data = input("post.");
$update = Db::name("user")->where("uid",session("UID"))->update($data);
if($update){
return json(["code" => 1, "msg" => "修改成功"]);
}
return json(["code" => 0, "msg" => "修改失败"]);
}
public function rePassword()
{
$oldPassword = input("oldPassword");
$password = input("password");
$where["uid"] = session("UID");
$where["password"] = md5($oldPassword);
$res = Db::name("user")->where($where)->find();
if ($res){
$rePassword = User::update(["password" => md5($password)],["uid"=> session("UID")]);
if ($rePassword){
return json(["code" => 1, "msg" => "修改成功"]);
}
return json(["code" => 0, "msg" => "修改失败"]);
}
return json(["code" => 0, "msg" => "原密码错误"]);
}
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"]);
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");
}
}
}Audit code foundsession:ThinkPhP6 会默认在 /runtime/session 创建一个sess_xxxx格式的session文件,这里的xxxx就是PHPSESSID(32位),And the content of the file issession的内容,也就是key的内容.并且发现了:
if ($userId){
session("UID",$userId);
return redirect("/home/member/index");
}这里把uid写入当前的session中,That is what we originally constructedPHPSESSID=1111111111111111111111111111.php的session是没有uid的,没办法实现search功能,这里可以把uid赋给session,That is, you can write horses in the search page(Put the package there to modify and put the package,This will upload the horse)


蚁剑连接:http://xxxxxx.node4.buuoj.cn:81/runtime/session/sess_1111111111111111111111111111.php

use on connectiondisabled_functions插件获取flag


至此结束,撒花
边栏推荐
- ASP.NET application--Hello World
- Developing Hololens encountered The type or namespace name 'HandMeshVertex' could not be found..
- [论文笔记] MapReduce: Simplified Data Processing on Large Clusters
- Android实战开发-Kotlin教程(入门篇-登录功能实现 3.3)
- 包拉链不可用,但是是被另一个包。
- Solve the problem of port occupancy Port xxxx was already in use
- ffmpeg 像素格式基础知识
- Why is the pca component not associated
- Mathematics - Properties of Summation Symbols
- [Qixi Festival] Romantic Tanabata, code teaser.Turn love into a gorgeous three-dimensional scene and surprise her (him)!(send code)
猜你喜欢

今年七夕,「情蔬」比礼物更有爱

冒泡排序与快速排序

public static <T> List<T> asList(T... a) 原型是怎么回事?

【滤波跟踪】基于matlab无迹卡尔曼滤波惯性导航+DVL组合导航【含Matlab源码 2019期】

2022-08-04T17:50:58.296+0800 ERROR Announcer-3 io.airlift.discovery.client.Announcer appears after successful startup of presto

Why did they choose to fall in love with AI?

Walter talked little knowledge | "remote passthrough" that something

Kubernetes 网络入门

Countdown to 2 days|Cloud native Meetup Guangzhou Station, waiting for you!

The second council meeting of the Dragon Lizard Community was successfully held!Director general election, 4 special consultants joined
随机推荐
How to sort multiple fields and multiple values in sql statement
通过模拟Vite一起深入其工作原理
Increasing leetcode - a daily topic 1403. The order of the boy sequence (greed)
十五. 实战——mysql建库建表 字符集 和 排序规则
Step by step how to perform data risk assessment
Why did they choose to fall in love with AI?
【滤波跟踪】基于matlab无迹卡尔曼滤波惯性导航+DVL组合导航【含Matlab源码 2019期】
Call Alibaba Cloud oss and sms services
ASP.NET application--Hello World
token、jwt、oauth2、session解析
[Software testing] unittest framework for automated testing
From "useable" to "easy to use", domestic software is self-controllable and continues to advance
Physical backup issues caused by soft links
剑指Offer--找出数组中重复的数字(三种解法)
毕设-基于SSM房屋租赁管理系统
This year's Qixi Festival, "love vegetables" are more loving than gifts
YYGH-13-Customer Service Center
XMjs cross-domain problem solving
After the large pixel panorama is completed, what are the promotion methods?
Object.defineProperty monitors data changes in real time and updates the page