buuctf easyphp

在这里插入图片描述
我们用这个输出

但我不明白为什么,不能直接把“ P O S T [ ‘ a ’ ] ; ” 全 都 异 或 掉 , 这 多 省 事 儿 了 , 但 好 像 不 行 , 而 且 好 像 还 只 能 是 G E T 型 , 我 尝 试 了 P O S T 类 型 行 不 通 。 目 前 我 就 只 知 道 它 可 以 代 替 " G E T " , 然 后 配 合 _POST[‘a’];” 全都异或掉,这多省事儿了,但好像不行,而且好像还只能是GET型,我尝试了POST类型行不通。目前我就只知道它可以代替"_GET",然后配合 POST[a];GETPOST"GET"{%ff%ff%ff%ff^%a0%b8%ba%ab}{%ff}();&ff=phpinfo,可以执行一些函数。抛开这道题,我们还可以: **http://127.0.0.1/?_=KaTeX parse error: Expected '}', got 'EOF' at end of input: …就可以执行任何函数了。 前面的{%ff%ff%ff%ff^%a0%b8%ba%ab}是 [ G E T ] 的 意 思 , 后 面 是 s y s t e m 的 意 思 连 上 就 是 [_GET]的意思,后面是{system}的意思连上就是 [GET]system{_GET}{system}(“type index.php”)

eval( s t r = " str=" str="{${phpinfo()}}"😉 → 可以执行phpinfo()
KaTeX parse error: Expected '}', got 'EOF' at end of input: {phpinfo()} = {{phpindo()}}

PHP复杂变量 {}不能被转义,其包裹的部分可当作变量 花括号{}只是用于区别变量边界的标识符
所以其实传入的数据的意思就是我们GET的参数,之后传入eval执行system,执行变量

这里第一点我们就已经能够破译了,下面的第二点就到了,上面的方法就是我们使用文件上传方法的引子,下面我们就应该使用文件上传的方式来将文件上传上目标服务器进而获取权限
在这里插入图片描述

不能上传含有.ph后缀的文件,我们开始考虑.htaccess和.user.ini两个形式的文件,
但是这里的.user.ini不太行,上传user.ini需要去访问PHP文件之后目标服务器才回去检测user.ini的设置,而且该目录之下好像必须
所以我们这里使用htaccess这个配置文件,他可以将.jpg图片文件当成目标php文件执行

还有一个文件头 的检测,我们使用GIF89a来绕过,当他将我们限制需要用base64的形式读取文件的时候,我们可以考虑在后面加上两位数12,16,86之类的,作用是补全base64解码需要的8位数
头幻数,为什么是GIF89a?
在这里插入图片描述
对内容进行了过滤,让内容不能包含<? ,一般情况下我们会选择用
这里会出现问题,.htaccess文件会无法生效
我们可以使用#define width 1337 #define height 1337进行绕过,#在.htaccess中表示注释,我们需要备注上宽和高,为啥不太清楚

在这里插入图片描述

用py来写脚本,思路
在这里插入图片描述

1,先将我们要写的脚本写上,后面准备将他们传上去,我们这不就导入requests包准备了,然后一个.htaccess的脚本,后面再写一个传入的木马shell
2,Files是内置函数,第一个参数是文件名称,第二个是对当前区域内的关联映射(就是说这事那个文件),第三个是内置文件类型,
3,Data是上传的方式
4,先将.htaccess上传,我们就能对下面上传的文件进行包含运行了,之后再将木马shell进行上传。完成了操作,b是将数据变成什么b开头的什么格式,估计是为了后台服务端的
5.之后我们发现上传之后用蚁剑连上了,发现不行,有open_basedir的限制,
6.这样就没办法了,只能说就是这个函数能进行文件可读取区域的定义,我们要对他进行绕过在这里插入图片描述

都会进行一次open_basedir的比对,即php_check_open_basedir_ex。由于相对路径的问题,每次open_basedir的补全都会上跳。
比如初试open_basedir为/a/b/c/d
第一次chdir后变为/a/b/c,
第二次chdir后变为/a/b,
第三次chdir后变为/a,
第四次chdir后变为/,
那么这时候再进行ini_set,调整open_basedir为/即可通过php_check_open_basedir_ex的校验,成功覆盖,导致我们可以bypass open_basedir。

7.所以我们这里就是有几级目录就进行几次…的操作,这样的操作实质上是内置函数每一次都仿佛进行了一次cd …/ ,这样在五次之后,我们就成功跳到了根目录之下,这时候我们再进行目录条件的设置就符合了条件,能将当前目录设置成作
8.差不多就是这样了,上传之后我们就能读取到文件,
9.当然,先进行var_dump(scandir("/"))来读取,之后再进行别的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值