当前位置:网站首页>[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
至此结束,撒花
边栏推荐
- 冒泡排序与快速排序
- Details such as compiling pretreatment
- A small tool to transfer files using QR code - QFileTrans 1.2.0.1
- Walter talked little knowledge | "remote passthrough" that something
- ASP.NET application--Hello World
- Is your data safe in this hyperconnected world?
- 达梦8数据库导出导入
- (11) Metaclass
- 用Unity发布APP到Hololens2无坑教程
- 十五. 实战——mysql建库建表 字符集 和 排序规则
猜你喜欢
[Software testing] unittest framework for automated testing
[Filter tracking] based on matlab unscented Kalman filter inertial navigation + DVL combined navigation [including Matlab source code 2019]
Shell script: for loop and the while loop
告白数字化转型时代,时速云镌刻价值新起点
This year's Qixi Festival, "love vegetables" are more loving than gifts
论治理与创新,2022 开放原子全球开源峰会 OpenAnolis 分论坛圆满落幕
开发Hololens遇到The type or namespace name ‘HandMeshVertex‘ could not be found..
Developing Hololens encountered The type or namespace name 'HandMeshVertex' could not be found..
Use CH341A to program external Flash (W25Q16JV)
【七夕节】浪漫七夕,代码传情。将爱意变成绚烂的立体场景,给她(他)一个惊喜!(送代码)
随机推荐
Getting Started with Kubernetes Networking
Dive into how it works together by simulating Vite
QT: The Magical QVarient
[Filter tracking] based on matlab unscented Kalman filter inertial navigation + DVL combined navigation [including Matlab source code 2019]
从“能用”到“好用” 国产软件自主可控持续推进
Countdown to 2 days|Cloud native Meetup Guangzhou Station, waiting for you!
How to simulate the background API call scene, very detailed!
毕设-基于SSM房屋租赁管理系统
Native js realizes the effect of selecting and canceling all the multi-select boxes
YYGH-13-Customer Service Center
burp安装及代理设置
Use CH341A to program external Flash (W25Q16JV)
One hundred - day plan -- -- DAY2 brush
[Storage] Dawning Storage DS800-G35 ISCSI maps each LUN to the server
思考(八十八):使用 protobuf 自定义选项,做数据多版本管理
sql怎么找字段里所有数据为空的字段
Everyone in China said data, you need to focus on core characteristic is what?
沃谈小知识 |“远程透传”那点事儿
dmp (dump) dump file
IJCAI2022 | DictBert: Pre-trained Language Models with Contrastive Learning for Dictionary Description Knowledge Augmentation