2.直接包含敏感文件
鉴别题目所用服务器:
- 404界面
随便找⼀个不存在的⻚⾯显示出404之后,就可以看到服务器的类型
- 右键检查抓包:
点击 network 之后刷新一下
2.1 包含日志文件
nginx服务器下日志文件的路径:
/var/log/nginx/access.log
/var/log/nginx/error.log
apache服务器下的日志文件路径:
/etc/httpd/logs/access_log 或者
/var/log/httpd/access_log
/var/log/apache2/error.log//错日志存放
自定义文件路径:/etc/apache2/apache2.conf //查找以ErrorLog开头的行
apache+win2003⽇志默认路径:
D:\xampp\apache\logs\access.log
D:\xampp\apache\logs\error.log
IIS6.0+win2003默认⽇志⽂件:
C:\WINDOWS\system32\Logfiles
IIS7.0+win2003 默认⽇志⽂件:
%SystemDrive%inetpublogsLogFiles
nginx ⽇志⽂件在⽤户安装⽬录的logs⽬录下
如安装⽬录为/usr/local/nginx,则⽇志⽬录就是在/usr/local/nginx/logs⾥
也可通过其配置⽂件Nginx.conf,获取到⽇志的存在路径
(/opt/nginx/logs/access.log)
我们所有的操作都会被服务器中将我们的请求信息记录在⽇志:
很显然,这是⼀条⽇志记录,包含了ip,请求时间,请求地址,以及user-Agent===>浏 览器信息,以及我们传⼊的参数,其他的基本都是不能改变的,但是User-Agent和传⼊的 参数我们是可控的,如果User-Agent是⼀句话会发⽣什么?
利⽤ hackbar 原本的user-Agent信息被注⼊了⼀句话,在包含⽇志⽂件的时候,⼀句话被执 ⾏,最后在⽇志信息中替换成执⾏后的结果,原本 access.log 是不会执⾏⼀句话的, 但是被包含进 .php ⻚⾯之后就会以php的⽅式执⾏,我们刚好传⼊⼀句php代码,因此被执⾏。
如果参数是一句话:
- 如果直接在url中进⾏⽂件包含可能会造成url编码导致不能被识别成php代码,因此可以借 ⽤ curl,或者 burpsuite
虽然file掺⼊的参数,也就是我们包含的⽂件名也会被传进⽇志,但是会被进⾏url编码之后再传 进⽇志导致⽆法识别php⽆法执⾏,⽤curl则不会进⾏URL编码
- curl请求的地址进行双引号包含
【由于url里有&,使用&会使进程后台运行,必须对&进行转义,加单引号或者双引号。
加单引号和双引号的区别:
单引号字符串的限制:
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
单引号字串中不能出现单引号(对单引号使用转义符后也不行)
双引号
your_name=‘qinjx’
str=“Hello, I know your are “$your_name”! \n”
双引号里可以有变量
双引号里可以出现转义字符】
- 转义特殊符号【】
2.2 包含session文件(无后缀文件)
- 获取session位置存放信息
通过phpinfo的信息可以获取到session的存储位置。
通过phpinfo的信息,获取到session.save_path为/var/lib/php/session.
或者
没有值就在/tmp/目录下
例:
<?php
session_start();
$ctfs=$_GET['ctfs'];
$_SESSION["username"]=$ctfs;
?>
session工作原理:
- 首先使用session_start()函数进行初始化
- 当执行php脚本时,通过使用$_ SESSION 超全局变量注册 session变量
- 当 P H P 脚 本 执 ⾏ 结 束 时 , 未 被 销 毁 的 s e s s i o n 变 量 会 被 ⾃ 动 保 存 在 本 地 ⼀ 定 路 径 下的session库 中 , 这 个 路 径 可 以 通 过 php.ini ⽂ 件 中 的 session.savepath 指 定 , 下 次 浏 览 ⽹ ⻚ 时 可 以 加 载 使 ⽤ .
session_start()做的初始化工作:
- 读取名为 PHPSESSID ( 如 果 没 有 改 变 默 认 值 ) 的 cookie值,假使为 abc123
- 若 读 取 到 PHPSESSID这个COOKIE , 创 建 SESSION 变 量 , 并 从 相 应 的 ⽬ 录 中 ( 可 以 在 p h p . i n i 中 设 置 ) 读 取 SESS_abc123( 默 认 是 这 种 命 名 ⽅ 式 ) ⽂ 件 , 将 字 符 装 在 ⼊ SESSION 变量中 ; 若 没 有 读 取 到 PHPSESSID 这 个 COOKIE , 也 会 创 建 $_SESSION 超全局变量注册 session 变量。 当PHP脚本执⾏结束时,未被销毁的session变量会被⾃动保存在本地⼀定路径下的 session库中, 这个路径可以通过php.ini⽂件中的session.save_path 指定,下次浏览⽹⻚ 时可以加载使⽤。
漏洞分析:
此php会将获取到的GET型ctfs变量的值存⼊到session⽬录下存储session的值。session的⽂件 名为sess+sessionid,sessionid可以通过开发者模式获取。
默认路径没有值,说明session的保存路径在/tmp/⽬录下,进⼊容器看⼀下
这是默认的文件
【这⾥出现警导致下⾯的程序是⽆法执⾏的,这个警告说的是请求可以到达,但⽆法打开 session,只需要将session_start();放在 hilighlight_file 前边即可】
接下来修改PHPSESSID为aaa传参数 ?ctfs=ctfs
查看session文件
如果写入一句话
如果当前⻚⾯存在⽂件包含漏洞,那么我们可以直接包含这个⽂件,进⽽执⾏php代码