文件包含漏洞基础

发布于 2022-08-06  400 次阅读


lfi靶场搭建

  • 文件名:lfi-labs-master,拷贝到phpstudy的www目录下
  • 访问方式与uploadlabs类似
  • phpstudy打开阿帕奇和mysql

漏洞与利用

  1. os命令执行函数:如system()能够执行系统命令

    代码执行函数能够将字符串作为os命令执行,而且自带输出功能。如exec()函数能将字符串作为os命令执行,需要输出执行结果,但是只能显示命令的最后一行

  2. ../表示上一级目录

  3. cmd1|cmd2:无论cmd1是否为真,cmd2都会被执行

    cmd1||cmd2:如果cmd1为假,则执行cmd2;

    cmd1&&cmd2:如果cmd1为真才执行cmd1

  4. preg_match函数对用get方法请求的domain中的字符串进行判断是否在匹配名单中,匹配成功才会执行命令whois,否则会提示域名不完整。该匹配名单的要求域名是完全合法合规的才可以执行命令

  5. includes/../还是在本级目录

  6. addslashes()函数返回在预定义字符之前添加反斜杠的字符串。以下是预定义字符单引号(‘)双引号(“)反斜杠(\)和NULL,在这些字符前面加\

  7. str_replace():将接收到的字符串中的../替换为NULL

  8. isset():函数用于检测变量是否已设置并且非 NULL。如果指定变量存在且不为 NULL,则返回 TRUE,否则返回 FALSE。

lfi靶场wp

cmd1

  • 无过滤,且使用get方法,地址栏传参cmd=whoami

cmd2

  • 无过滤,且使用post方法,hackbar传参cmd=whoami

cmd3

  • 原本想输入目标网址,查询网址的用户名,利用cmd1|cmd2:无论cmd1是否为真,cmd2都会被执行,使语句变成system("/usr/bin/whois " . $_GET["domain"]|whoami);
  • 注意windows无system("/usr/bin/whois " . $_GET["domain"]);,应该把"/usr/bin/whois "改为"nslookup "(要留出空格)

cmd4

  • 同cmd3,用post

cmd5

  • preg_match函数对用get方法请求的domain中的字符串进行判断是否在匹配名单中,匹配成功才会执行命令whois,否则会提示域名不完整。该匹配名单的要求域名是完全合法合规的才可以执行命令,所以在sever插入?server=127.0.0.1|whoami||&domain=baidu.com(网上是这个意思,但是经测试,利用domain=baidu.com|whoami&server=127.0.0.1向domain插入语句依旧可以成功)

cmd6

  • 同cmd5,post方法

lfi1

  • include($_GET["page"]);包含了一个变量名为page的文件,?page=../../webshell.php(方法见上)

lfi2

  • 使用了includes,且只能包含php后缀文件(可以%00截断,未尝试),加一个../跳出includes

lfi3

  • substr($_GET['file'], -4, 4) != '.php')对后四位截取,不得为php,绕过方法同文件上传漏洞

lfi4

  • 使用了addslash()函数转义(具体见上),本题目中无影响

lfi5

  • str_replace()把"../"替换成"",拦截了返回目录的请求,可以双写绕过

lfi6~10

  • 同1~5,post方法

lfi11

  • 同lfi12,post

lfi12

  • 同lfi1

lfi13

  • 同lfi5

lfi14

  • 同lif5,post

hdr

  • 网上查得题目源码不全
届ける言葉を今は育ててる
最后更新于 2024-02-07