lfi靶场搭建
- 文件名:lfi-labs-master,拷贝到phpstudy的www目录下
- 访问方式与uploadlabs类似
- phpstudy打开阿帕奇和mysql
漏洞与利用
-
os命令执行函数:如system()能够执行系统命令
代码执行函数能够将字符串作为os命令执行,而且自带输出功能。如exec()函数能将字符串作为os命令执行,需要输出执行结果,但是只能显示命令的最后一行
-
../表示上一级目录
-
cmd1|cmd2:无论cmd1是否为真,cmd2都会被执行
cmd1||cmd2:如果cmd1为假,则执行cmd2;
cmd1&&cmd2:如果cmd1为真才执行cmd1
-
preg_match函数对用get方法请求的domain中的字符串进行判断是否在匹配名单中,匹配成功才会执行命令whois,否则会提示域名不完整。该匹配名单的要求域名是完全合法合规的才可以执行命令
-
includes/../还是在本级目录
-
addslashes()函数返回在预定义字符之前添加反斜杠的字符串。以下是预定义字符单引号(‘)双引号(“)反斜杠(\)和NULL,在这些字符前面加\
-
str_replace():将接收到的字符串中的../替换为NULL
-
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
- 网上查得题目源码不全