CTF——web安全——php弱类型

 题目来源:首页 - Bugku CTF

一、php代码基础

1、简介

php的变量不需要先声明再调用,以$开头,后面直接接变量名,例如&a表示变量a。

$a='a';

$b="aaa";

echo $b[1];//输出结果为a

php8种变量类型

标量类型:布尔 boolean ,整形 integer ,浮点 float ,字符 string
复杂类型:数组 array ,对象 object
特殊类型:资源 resource ,空 null

2、php弱类型问题

= 赋值;

== 弱类型比较(先将两端数值转换再比较)ctf常在这里出题

=== 强类型比较(不转换,直接比较)

“0e+纯数字”,结果为0,例如“0e123”按照科学计数法处理(0e123=0*10的123次方=0)

于是有:“0e123”==“0e456”  //true

               “0e123a”==“0e456”  //false(0e之后非全数字,当做字符串比较)

所以前人为我们有一些总结如下表:

字符串md5值
QNKCDZO0e830400451993494058024219903391
s878926199a0e545993274517709034328855841020
s155964671a0e342768416822451524974117254469
s214587387a0e848240448830537924465865611904
s214587387a0e848240448830537924465865611904
s878926199a0e545993274517709034328855841020
s1091221200a0e940624217856561557816327384675
s1885207154a0e509367213418206700842008763514

显而易见,依据上述规则,表中字符串MD5值相同,字符串不同

2、我们以一道题目的php代码开始(题目参考:备份是个好习惯):如下

题目如下,是一段编码,解码也没有发现什么提示,考虑其他办法

懵逼了,怎么办,后台扫一扫把,扫描发现有个bak文件,bak正好是备份文件,这不就是题目吗?点进去看看,发现是段代码。

代码如下:

<?php
/**
 * Created by PhpStorm.
 * User: Norse
 * Date: 2017/8/6
 * Time: 20:22
*/

    include_once "flag.php"; 引入一个名为flag.php的外部文件,这个文件可能定义了变量$flagini_set("display_errors", 0); 设置PHP配置,关闭错误显示,这样如果代码执行出错,错误信息不会显示在页面上。
    $str = strstr($_SERVER['REQUEST_URI'], '?'); 从请求的URI中查找?字符及其之后的字符串。
    $str = substr($str,1); 去掉字符串的第一个字符(即?字符)。
    $str = str_replace('key','',$str); 删除字符串中的所有key字样。
    parse_str($str); 将字符串解析成变量,例如a=1&b=2会被解析为$a=1$b=2echo md5($key1); 输出变量$key1的MD5散列值。
    echo md5($key2); 输出变量$key2的MD5散列值。
    if(md5($key1) == md5($key2) && $key1 !==$key2){ 判断$key1$key2的MD5散列值是否相等,并且$key1$key2本身不相等。
    echo $flag."取得flag"; 如果条件成立,输出变量$flag的值和字符串取得flag。
}
?>

上述代码,最后能够输出的要求是$key1和$key2的MD5值相等,但是$key1和$key2不等。

这样,那我们在url中构造:key1=QNKCDZO&key2=s878926199a

输入发现没弹回flag,我们再看代码,发现代码还要求在?之后,还要删除字符串中的key,那么怎么能在删除key之后得到?key1=QNKCDZO和key2=s878926199a,必然是在这之中在写一个让他删除呗,所以构造

?kkeyey1=QNKCDZO和kkeyey2=s878926199a

在你的url中直接写上,得到flag了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值