WEB进阶1
SSRF 漏洞
SSRF Training
<?php
highlight_file(__FILE__);
function check_inner_ip($url)
{
$match_result=preg_match('/^(http|https)?:\/\/.*(\/)?.*$/',$url);
if (!$match_result)
{
die('url fomat error');
}
try
{
$url_parse=parse_url($url);
}
catch(Exception $e)
{
die('url fomat error');
return false;
}
$hostname=$url_parse['host'];
$ip=gethostbyname($hostname);
$int_ip=ip2long($ip);
return ip2long('127.0.0.0')>>24 == $int_ip>>24 || ip2long('10.0.0.0')>>24 == $int_ip>>24 || ip2long('172.16.0.0')>>20 == $int_ip>>20 || ip2long('192.168.0.0')>>16 == $int_ip>>16;
}
function safe_request_url($url)
{
if (check_inner_ip($url))
{
echo $url.' is inner ip';
}
else
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$output = curl_exec($ch);
$result_info = curl_getinfo($ch);
if ($result_info['redirect_url'])
{
safe_request_url($result_info['redirect_url']);
}
curl_close($ch);
var_dump($output);
}
}
$url = $_GET['url'];
if(!empty($url)){
safe_request_url($url);
}
?>正则匹配:
写一个脚本测试:
回显:
check检测到的值为['host']:www.baidu.com,而curl抓到的值为127.0.0.1,从而进行绕过。
命令执行漏洞
死亡ping命令
ping命令执行,但是没有回显。
存在WAF过滤字符,通过%0a绕过过滤并拼接命令,由于没有回显,只能考虑外带。
wp中使用了curl外带的方式。
编辑1.sh
执行Ping命令
给bash添加权限
监听
执行bash文件
XSS的魔力
XSS闯关
payload1:
payload2:
XSS语句已经在script中,直接闭合后alert
payload3:
DOMXSS,插入img
payload4:
js跳转,使用javascript伪协议
payload5:
表单自动提交,action可控,提交到伪协议。
payload6:
angular二次渲染导致XSS:
WEB文件上传漏洞
文件上传
这题还是让我学到了不少技巧的。
代码比较长,重新排版审计一下,留下关键WAF函数
简单概括一下WAF,首先是有一个白名单后缀检测,只允许上传图片以及压缩包;且如果压缩包的后缀以php结尾,就会解压失败并报错。解压结束后,再次调用检查函数对该压缩包解压出的文件进行删除。考虑这里可能会存在条件竞争。
接着往下分析,解压目录在一个随机生成的文件夹下,所以没有办法进行条件竞争,无法获取到文件夹的名字。
这里用到的第一个漏洞就是Apache多后缀文件解析漏洞,这个漏洞已经烂大街了就不解释了,版本号在1.x到2.x之间,刚好符合。
由于解压后会再次调用检查函数在随机生成的文件夹下进行扫描,看似无解,但是可以利用目录穿越的骚姿势绕过。压缩后,使用010 Editor修改文件名。
穿越目录上传后访问根目录下文件即可获得flag。
Last updated