[靶场] XSS-Labs 14-20

由于有Flash XSS,需要配置一下环境,下载Flash和JPEXS(Flash反编译工具)。

14. Level14-图片EXIF注入

这关卡的iframe引用的地址打不开,我们自己写一个简单的放在本地服务器上,引用对应的URL就行,同时需要打开php_exif开关

[靶场] XSS-Labs 14-20_第1张图片

index.php放在根目录,URL为http://127.0.0.1


    
    
    欢迎来到level14
     
   

'; try{ // 允许上传的图片后缀 $allowedExts = array("gif", "jpeg", "jpg", "png"); $temp = explode(".", $_FILES["file"]["name"]); $extension = end($temp); // 获取文件后缀名 if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/jpg") || ($_FILES["file"]["type"] == "image/pjpeg") || ($_FILES["file"]["type"] == "image/x-png") || ($_FILES["file"]["type"] == "image/png")) && ($_FILES["file"]["size"] < 204800) // 小于 200 kb && in_array($extension, $allowedExts)) { if ($_FILES["file"]["error"] > 0) { echo "错误:: " . $_FILES["file"]["error"] . "
"; } else { echo "上传文件名: " . $_FILES["file"]["name"] . "
"; } move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]); } else { echo "非法的文件格式"; } $file = $_FILES["file"]["name"]; $exif = exif_read_data($file, 0, true); echo "

[ ".$file." ]的EXIF信息:

"; foreach ($exif as $key => $section) { foreach ($section as $name => $val) { echo "$key.$name: $val
\n"; } } }catch (Exception $e){ echo $e; } ?>

修改level14的iframe的src。

[靶场] XSS-Labs 14-20_第2张图片

打开关卡14。这里的报错可以忽略,不影响。

[靶场] XSS-Labs 14-20_第3张图片

 这需要上传图片,我们上传一个普通图片。打印出来图片EXIF信息。

[靶场] XSS-Labs 14-20_第4张图片

 我们可以修改EXIF信息,向其中写入脚本,当后端读取并先到前端时,就会注入脚本,触发XSS。

[靶场] XSS-Labs 14-20_第5张图片

 上传这个有脚本的图片,触发成功。

15. Level15-angularJS包含

这个需要使用angularJS,原地址无法使用,我们修改地址为:https://cdn.staticfile.org/angular.js/1.4.6/angular.min.js

打开关卡15。URL的src参数回显在下面的ng-include。

[靶场] XSS-Labs 14-20_第6张图片

ng-include相当于php的include函数,所以我们包含一个有XSS漏洞的URL就可触发这里的XSS。

我们包含第一关的XSS。

http://127.0.0.1:8005/level15.php?src='level1.php?name='

[靶场] XSS-Labs 14-20_第7张图片

16. Level16-%0a代替空格

打开关卡16。

[靶场] XSS-Labs 14-20_第8张图片

其中script和/全部被替换,我们查看代码。

[靶场] XSS-Labs 14-20_第9张图片

其中将script,空格,Tab,/全部替换,我们使用img绕过,空格用%0a替换。

http://127.0.0.1:8005/level16.php?keyword=

[靶场] XSS-Labs 14-20_第10张图片

17. Level17

打开关卡17。这题是Flash XSS,但是我们用闭合属性也可以触发XSS。

[靶场] XSS-Labs 14-20_第11张图片

http://127.0.0.1:8005/level17.php?arg01=a&arg02=" onmouseover=alert(1)

[靶场] XSS-Labs 14-20_第12张图片

18. Level18

打开关卡18,也是考Flash XSS。同上17关,但是我们也使用闭合属性值触发。

http://127.0.0.1:8005/level18.php?arg01=a&arg02=" onmouseover=alert(1)

[靶场] XSS-Labs 14-20_第13张图片

19. Level19

打开关卡19。

Flash提供相关的函数,可能触发Flash XSS:getURL,navigateToURL,ExternalInterface.call,htmlText。

[靶场] XSS-Labs 14-20_第14张图片

Flash给出文字信息,我们进行Flash反编译。根据提示在sirf中找到源代码。

[靶场] XSS-Labs 14-20_第15张图片

对比信息提示,我们跟踪其中的%s,这个应该是个占位符。

找到这里从参数中提取名为version的参数,替换到%s上。

[靶场] XSS-Labs 14-20_第16张图片

在通过调用函数实现文本替换。

[靶场] XSS-Labs 14-20_第17张图片

通过write方法输出。

我们使用a标签来触发XSS。

version=xss

通过URL传递参数:

http://127.0.0.1:8005/level19.php?arg01=version&&arg02=xss

[靶场] XSS-Labs 14-20_第18张图片

[靶场] XSS-Labs 14-20_第19张图片

20. Level20-开源swf组件产生的xss

打开关卡20,

[靶场] XSS-Labs 14-20_第20张图片

是引用了Flash,我们进行代码审计。

[靶场] XSS-Labs 14-20_第21张图片

ZeroClipboard.swf从url中获取参数,传给调用ExternalInterface.call函数。

实际上浏览器的执行过程为

try { 
    __flash__toXML(ZeroClipboard.dispatch("id")); 
} 
catch (e)
{ 
    "" ; 
}

由于没有过滤参数中的反斜杠\,在flash与js交互中,反斜杠跳过了__flash_toXML函数的限制,导致xss,如下:

用id值将代码修改,id闭合双引号、两个括号和一个大括号,在catch中触发XSS代码。

id=\"))} catch(e){alert(1)} //%26width=500%26height=500

[靶场] XSS-Labs 14-20_第22张图片 在URL中提交参数:

http://127.0.0.1:8005/level20.php?arg01=id&&arg02=\"))} catch(e){alert(1)} //%26width=500%26height=500

还有其他Payload:

参考文章:

flash(swf)安全总结_zzzzfeng的博客-CSDN博客

XSS挑战之旅--游戏闯关 - 简书

https://www.freesion.com/article/6253464226/

你可能感兴趣的:(#,靶场,xss)