pikachu---(CSRF,SSRF)

CSRF:跨站请求伪造。我们可以给目标发送恶意链接,里面会包含恶意请求,比如修改密码或一些数据;当目标在本地点击访问之后,我们就能够利用客户已经登录上的权限,让他在本地发起我们构造出的恶意请求,从而达到我们修改信息的目的。

那么这就需要两个条件,首先要在客户已登录有权限的基础之上,让客户发起请求;其次我们需要知道请求的接口,就是具体我们恶意请求中所需要提交的数据。

CSRF(get) login

首先我们可以点击提示,拿到账号密码,登录进去可以看到有一个“修改个人信息”的功能;我们跳转到修改个人信息的页面,尝试修改并提交,由bp抓包可以看到发起的请求情况:

我们可以看到在请求方式为get时,我们提交的请求数据都在url中,所以我们可以直接构造恶意的url:

http://localhost:8088/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=11111&phonenum=222222&add=333333&email=4444444&submit=submit

当目标点击链接后,就会发起这个请求,因为里面包含的就是修改个人信息的接口,且客户处于已经登录拥有修改权限的状态,那么客户的信息就会直接被修改成我们payload中设置的信息。

 

CSRF(post)

另一种情况呢,就是使用post方式来让目标浏览器发送恶意请求,利用其拥有的权限来进行恶意的修改或操作。

那么post方式不同于get的点在于,其请求的数据并不在url中,而是在请求包的请求体中,所以如果我们还像get中一样,发送恶意链接让目标点击是不行的,因为URL中是不包含我们想构造的恶意请求的数据的。

那么我们就可以自己搭建一个恶意网站,同时我们网页的功能就写为自动跳转去请求“修改个人信息”的页面,同时我们再将修改信息所需要的数据写进去(提交的表单中就为我们要修改的个人信息);

<html>
<head>
<script>
window.onload = function() {
  document.getElementById("postsubmit").click();
}
</script>
</head>
<body>
<form method="post" action="http://localhost:8088/pikachu/vul/csrf/csrfpost/csrf_post_edit.php">
    <input id="sex" type="text" name="sex" value="girl" />
    <input id="phonenum" type="text" name="phonenum" value="123456789" />
    <input id="add" type="text" name="add" value="hubei" />
    <input id="email" type="text" name="email" value="lili@163.com" />
    <input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>

然后将我们恶意网站的网页链接发送给目标,这样当目标点击访问我们的网页时,我们的网页就会再自动的发起修改个人信息的请求,这样早目标已经登录的状态下,我们利用其权限就可以直接成功修改。

 可以看到图中,访问了我恶意网站的网页链接,页面就是修改信息成功的结果了。

CSRF Token

token就是防止我们进行请求伪造的一种方式,因为你每一次请求时都要带上前一次相应返回的token值,所以如果你无法获取token的话,就算知道了接口,设置了恶意数据,也无法成功修改。

我们打开源码可以看到有一个隐藏的token,我们尝试修改信息提交一下:

 可以看到我们在提交修改时,里面不只有要修改的数据,还有一个token值,和刚才返回过来的那个token值相同。所以说在我们请求修改用户信息时,服务器会比较我们请求url中的token字段和session中的token字段,如果相同才能修改用户信息,否则无法修改的。同时,在新的token生成后,老的token就失效了,所以就避免了重复使用的漏洞。

 

ssrf

ssrf和csrf不同的是,他是服务器端请求伪造(Server-Side Request Forgery)。他出现的原因一般是服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制
导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据。也就是黑客可以将目标服务器来请求目标内网其它主机的信息,一般用于内网的探测。

那么主要能导致出现ssrf漏洞的php函数有:

file_get_contents()
fsockopen()
curl_exec()

ssrf(curl)

 

 我们可以看到请求中有“url”这样一个参数,里面请求的应该就是那首诗的地址:

http://127.0.0.1:8088/pikachu/vul/ssrf/ssrf_info/info1.php

可以看到127.0.0.1应该就是指服务器(另外因为我搭皮卡丘环境的时候用的是8088这个端口,所以我还需要另外加上:8088才能正常访问),他在请求的时候请求的是服务器本地的php文件,那么我们就可以利用url的这个漏洞去访问我们想要获取的信息。比如直接访问百度,那么他就直接返回了百度的页面: 

又或者我是用file协议来请求服务器的host文件:

可以看到直接回显到了页面上

另外libcurl还能支持http、https、ftp、gopher、telnet、dict、file和ldap协议。libcurl同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。

SSRF(file_get_contents)

可以看到file_get_contents()函数和上面curl_exec()不同的是file_get_contents()函数是用于将文件的内容读入到一个字符串中的方法。

 

 可以看到请求里他的参数为file,我们可以利用它对本地和远程的文件进行读取。

本地文件路径:file://c:\windows\System32\drivers\etc\hosts

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值