只为对所学知识做一个简单的梳理,如果有表达存在问题的地方,麻烦帮忙指认出来。我们一起为了遇见更好的自己而努力!
CSRF
:跨站请求伪造(英语:Cross-site request forgery
), 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。
还是用我自己的理解,在说一下CSRF
的原理:
网站A存在CSRF漏洞,网站B为黑客搭建的攻击网站(攻击网站:与A网站是同一个网站,黑客在重置密码的阶段,抓取了重置密码的数据库包,将这个数据包制作成了SCRF利用代码),用户C为网站A的管理员。
1. 用户C,通过自己的账号密码登陆到了网站A。
2. 用户C,在没有关闭浏览器的情况下(或者没有退出登陆网站A的情况下),访问了网站B。
3. 用户C,回来继续浏览自己管理的网站A,可是事后发现,自己的密码登陆不了了。
这里的原理是:用户C在登陆网站A之后,网站会返回给用户C一个Cookie值,这个值是存在用户C的浏览器当中,接着用户C去访问了网站B,网站B的攻击代码要求是,访问网站A并修改密码,用户浏览器接收到要求,发现自己这里就有网站A的Cookie值,自己是能操作的,所以浏览器以为是用户C自己本身的操作,这里就按照攻击代码中去执行修改密码行为。
来图片看个案例
点击Change
抓取数据包
Burp
制作CSRF Poc
复制到本地打开,点击按钮,网页自动跳转到刚才改密码的界面,显示密码已更改完成
从上面这个图片例子可以知道CSRF
攻击的一个大体流程,但前提是存在CSRF漏洞
的浏览器cookie
还没有过期,如果过期了是没有用的。得先伪造一个请求链接,发送给受害者,受害者点击后请求被执行。
网站是一个dedecms
,在网站最下面还看到了版本号,那既然知道版本了,去百度上下载其源码,在本地构建攻击代码我们再来尝试。
根据靶场开头的提示,我们得将网站目录地址同步一下,不然会导致数据访问的问题,
cms
源码解压出来的文件名是uploads
,而靶场为newcsrf
,这里讲文件名做更改,放入网站www
目录中。开启phpstudy
接下来在自己的浏览器上打开虚拟机的ip
就能进入dedecms
的安装界面(具体步骤省略)。
后台的密码,是自己在安装的时候就填写的,admin
,admin
。
登录进去,我们该想的就是:需要制作怎样的CSRF
才能拿下靶场机器。再三思索,最好的就是想办法上传一句话木马文件上去,一举通过webshell
工具拿下。既然需要上传文件,那我们就应该找网站后台的上传点在哪,在上传点保存文件那前一个步骤,开启Burp
,将数据包抓下来,制做CSRF的poc
,这样就能达成目的。
我们将眼光移到文件上传处
这里我们还得加入点东西,因为这个是Burp
制作的东西,不是已攻击为目的的,这个做出来的CSRF
是需要点击一下按钮才会跳转的,太过于明显,这里加入一点新东西,让其只要点击链接就会执行,不需要在另外点击一次。
这里添加的代码的意思是:先在上面定义个一个id=‘aa’的值,下面是,当检测到id
的值为aa
时去执行网页内容,执行的时间是100毫秒
以后,这样就能让其只要访问就能自动触发。
既然有了文件,现在本地尝试一下。(不要用google浏览器尝试,会出错。。)
这里看到并没有123.php
,然后将刚才的文件,拖入浏览器中。
刷新网页之后,123.php
出现在了列表中。
这个时候,可以尝试一下看phpinfo()
能不能用,如果行的话,那webshell
也就没啥问题了。
既然自己搭建的网页没问题,那就带进靶场试一下,将cc.html
里面与靶场url
不匹配的地址给替换掉。
替换好文件,这里还是和以前一样,交给客服机器人帮我们点击一下。
提交完成后,只需要等待后台机器人的访问链接,就会在后台创建一个个123.php文件,然后就可以连接菜刀进入后台了。
至于防御手段,可在请求的数据包里面增加token
字段,用随机值去做验证,每次访问网页都会带一个token
,当请求过来时,服务器会做比对,当发现两次token
不一样时,就不会执行拦截操作。这在CSRF
上不能实现的,因为无法提前一步知道网站随机token
值是多少。
《最好的防御,是明白其怎么实施的攻击》