当前位置: 首页 > news >正文

DVWA-JavaScript Attacks

JavaScript Attacks

JavaScript Attack即JS攻击,攻击者可以利用JavaScript实施攻击。

Low 等级

核心源码,用的是dom语法这是在前端使用的和后端无关,然后获取属性为phrase的值然后来个rot13和MD5双重加密在复制给token属性。

<script>function rot13(inp) {return inp.replace(/[a-zA-Z]/g,function(c){return String.fromCharCode((c<="Z"?90:122)>=(c=c.charCodeAt(0)+13)?c:c-26);});}function generate_token() {var phrase = document.getElementById("phrase").value;document.getElementById("token").value = md5(rot13(phrase));}generate_token();
</script>

直接提交success发现无效

image-20230909115827498

所以提交的虽然是success但是token还是ChangeMe的因为generate_token()方法不会自动执行他需要调用,这时只需要在前端调用generate_token()方法生成相应token就行

image-20230909120048284

页面源代码中token的值由md5(rot13(phrase))决定的。

通过console控制台直接拿到token值。

md5(rot13("success"));

image-20230909120505063

38581812b435834ebf84ebcc2c6424d6

使用bp抓包然后修改数据包中的token值即可。

image-20230909120723151
在这里插入图片描述

Medium 等级

核心源码

<?php$page[ 'body' ] .= <<<EOF<script src="/vulnerabilities/javascript/source/medium.js"></script>EOF;
?>

Medium.js

// 对token进行加密处理(逆序处理)
function do_something(e){for(var t="",n=e.length-1;n>=0;n--)t+=e[n];return t
}// 延时3秒后,执行do_elsesomething方法
setTimeout(function(){do_elsesomething("XX")
},300);// 将加密处理后的token值,赋给input输入框中的token,用于提交给后端
function do_elsesomething(e){document.getElementById("token").value=do_something(e+document.getElementById("phrase").value+"XX")
}

原理和Low一样,只是加密方法被更换了,那步骤如下:

1、将输入框的值改为success

2、在前端控制台执行一次do_elsesomething()方法,执行代码为:do_elsesomething(“XX”);

do_something(success)方法是将phrase变量的值逆序,也就是sseccus,生成的token值=XXsseccusXX

使用bp将输入框的值改为XXsseccusXX。
image-20230909121343300

image-20230909121404987

High 等级

核心代码

<?php
$page[ 'body' ] .= '<script src="' . DVWA_WEB_PAGE_TO_ROOT . 'vulnerabilities/javascript/source/high.js"></script>';
?>

查看high.js,但是这里的代码明显被加密混淆了。

可以使用在线解码工具:http://deobfuscatejavascript.com/#。

核心源码:

function do_something(e) {for (var t = "", n = e.length - 1; n >= 0; n--) t += e[n];return t}function token_part_3(t, y = "ZZ") {document.getElementById("token").value = sha256(document.getElementById("token").value + y)}function token_part_2(e = "YY") {document.getElementById("token").value = sha256(e + document.getElementById("token").value)}function token_part_1(a, b) {document.getElementById("token").value = do_something(document.getElementById("phrase").value)}document.getElementById("phrase").value = "";setTimeout(function() {token_part_2("XX")}, 300);document.getElementById("send").addEventListener("click", token_part_3);token_part_1("ABCD", 44);

几个函数调用顺序及生成token的步骤如下:

  1. 首先将phrase 的值清空document.getElementById(“phrase”).value = “”;
  2. 然后执行token_part_1(a, b),取phrase值并进行字符串翻转(逆序)处理。
  3. 延迟300ms后执行token_part_2(e = “YY”),传入参数字符串’XX’和token值拼接并调用sha256()加密。
  4. 点击按钮时执行token_part_3(t, y = “ZZ”),将token值和字符串’ZZ’拼接并调用sha256()加密,从而得到最终的token。

在输入框输入 success 后,再到控制台输入token_part_1(“ABCD”, 44)和token_part_2(“XX”)这两个函数,最后点击按钮执行token_part_3()
image-20230909122852247

http://www.lryc.cn/news/198726.html

相关文章:

  • 算法通关村第二关|白银|链表反转拓展【持续更新】
  • 开发者职场“生存状态”大调研报告分析 - 第四版
  • 代码与细节(一)
  • AI绘画使用Stable Diffusion(SDXL)绘制中国古代神兽
  • 老卫带你学---leetcode刷题(148. 排序链表)
  • 21.1 stm32使用LTDC驱动LCD--配置说明
  • zabbix监控nginx的状态页面
  • C语言初学者工具选择:vscode + MSYS2 + cmake 搭建 C环境
  • 【四:httpclient的使用】
  • 在innodb引擎中,count(*)、count(1)、count(主键)、count(字段)哪个性能最高?
  • 华为OD 跳格子2(200分)【java】B卷
  • javascript/python 笔记: folium feature group自动切换
  • Python中的元组
  • 在云计算环境中,如何利用 AI 改进云计算系统和数据库系统性能
  • OpenP2P实现内网穿透远程办公
  • 黑白棋(Othello, ACM/ICPC World Finals 1992, UVa220)rust解法
  • MySQL中如何进行表的优化和压缩?
  • 【Java】Jsoup格式化html问题(文本空格折叠等)解决方法
  • Ansible定义各类变量,引用变量方式介绍及注册变量和vars_prompt的用法示例
  • 各类证件的版面信息收集
  • vueday01——ref响应式
  • SpringBoot集成Redisson操作Redis
  • 整数反转
  • 【ELK使用指南 2】常用的 Logstash filter 插件详解(附应用实例)
  • (转)STR 内核做了什么
  • fastapi项目结构以及多进程部署
  • 【LeetCode】 412. Fizz Buzz
  • vector+算法sort与list+sort的效率比较,容易写错的地方原因探析
  • iOS——Manager封装网络请求
  • 【javascript】内部引入与外部引入javascript