首页 > 其他分享 >BUUCTF nextGen1 (小白能看懂)

BUUCTF nextGen1 (小白能看懂)

时间:2024-12-08 19:56:41浏览次数:5  
标签:myFunc BUUCTF dep xhttp var 点击 能看懂 按钮 nextGen1

题目中的提示所flag就藏在服务器的/flag.txt中,但是如果直接访问并没有得到flag,如下图所示

做web题我喜欢先查看源码看看有没有什么超链接点进去看看,其它超链接点进去没有发现有用的信息,可以看到这下面有一个超链接,最后一个超链接里面发现js代码查看一下意思

function myFunc(eventObj) {
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function () {
      if (this.readyState == 4 && this.status == 200) {
        document.getElementById("content").innerHTML = xhttp.responseText;
      }
    };
    xhttp.open("POST", '/request');
    xhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xhttp.send("service=" + this.attributes.link.value);
 
  }
 
  var dep = document.getElementsByClassName('department');
  for (var i = 0; i < dep.length; i++) {
    dep[i].addEventListener('click', myFunc);
  }

这段代码包含了不少前端开发的重要知识点。下面将从基础到高级逐步讲解每个部分的含义及知识点,先说一下这串代码的大致含义:当用户点击页面中具有 class="department" 的 HTML 元素时,触发 myFunc 函数,向服务器发送一个 POST 请求,并将响应内容显示到页面指定的元素中。

第一部分:获取按钮

var dep = document.getElementsByClassName('department');

作用是找出所有有class=“department”的按钮。

getElementsByClassName 是一个方法,用来通过类名找到页面上的元素。例如:

如果HTML中有这些内容:

<div class="department" link="service1">服务1</div>
<div class="department" link="service2">服务2</div>

getElementsByClassName('department')会把这两个<div>都找到

第二部分:给每个按钮加一个点击事件:

for (var i = 0; i < dep.length; i++) {
  dep[i].addEventListener('click', myFunc);
}

作用对每个按钮,都添加一个"点击事件"。

        for循环:逐个处理找到的按钮

        addEventlistener:告诉按钮“当你被点击时,要执行下面的代码”,比如当你点击了第一个按钮,代码会运行一个myFunc的函数(下面会解释)

第三部分:点击后会做什么?

当点击按钮时,这段代码会运行:

function myFunc(eventObj) {
    var xhttp = new XMLHttpRequest();
    ...
}

myFunc是一个函数,点击按钮后它就会运行。

eventObj是一个事件的对象,里面存放着“点击事件”的信息,比如“谁触发了这个事件“(哪个按钮被点击了)

第四部分:创建一个请求

var xhttp = new XMLHttpRequest();

XMLHttpRequest是浏览器提供的一个工具,用来跟服务器通信(比如向服务器要数据)打个比方,你在手机上打开一个网页,浏览器会向服务器请求数据。这里的代码也是用它请求数据

第五部分:监听请求的状态

xhttp.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
        document.getElementById("content").innerHTML = xhttp.responseText;
    }
};

这一段干的是写啥?

监听”请求进度“,直到请求完成,处理返回的数据。

        this.readyState == 4 : 表示请求完成了。

        this.status == 200 :表示服务器成功返回数据(200是HTTP的状态码,表示成功)

        responseText:这是服务器返回的数据。

        innerHTML: 用返回的数据跟新网页类容

第六部分:发送请求

xhttp.open("POST", '/request');
xhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhttp.send("service=" + this.attributes.link.value);

这些代码干了什么事情?

        open:设置请求类型是POST,目标是/request(服务器的某个地址)。

        setRequestHeader:告诉服务器,发送的数据格式是“表单格式”。

        send:发送数据,数据内容是service=...,具体值从被点击的按钮里读取。

        列如:如果你点击的按钮有link=“service1”,发送的就是service=service1

第七部分:服务器返回了什么?

        假设服务器返回了:

<h1>服务1的详细信息</h1>
<p>这是服务1的介绍。</p>

        那么这段代码会把这些类容插入到网页中,显示出来。

document.getElementById("content").innerHTML = xhttp.responseText;

我们注重看第六部分,使用的是post传参,那么我们就可以抓包构造一个假的severs=x

首先在网页上找到了按钮deparment点击的时候抓包,因为监听的是deparment按钮,然后将service=xxx改为service:file:///flag.txt,在旅行这个包,或者发送到Repeater中在发送都能看到flag

标签:myFunc,BUUCTF,dep,xhttp,var,点击,能看懂,按钮,nextGen1
From: https://blog.csdn.net/saltwy/article/details/144324813

相关文章

  • 你能看懂时序图吗?有画过时序图吗?
    我能看懂时序图,也能根据描述生成时序图的文本表示。虽然我不能直接“画”图(我没有连接到图形输出设备),但我可以生成Mermaid代码,你可以用Mermaid渲染器将其转换成图片。我理解时序图中常见的元素,例如:参与者(Actors/Objects):表示交互的对象或系统。生命线(Lifelines):表......
  • BUUCTF Pwn jarvisoj_level2_x64 题解
    1.下载checksec64位用IDA64打开SHIFT+F12查找字符串找到了binsh函数里面也有system进主函数看看看到了栈溢出漏洞这是64位程序所以构造ROP链时要用rdi传参+用ret栈平衡找到这两个的地址:构造exp:运行得到flag  flag{4b1340f5-06be-4377-9630-fd2c77f016......
  • 【人人都能看懂 - 大模型架构篇】旋转位置编码(RoPE)形象理解+源码解析
    【人人都能看懂-大模型架构篇】旋转位置编码(RoPE)形象理解+源码解析重要性:★★★......
  • 普通人也能看懂的大语言模型入门,不要错过哦
    1.引言本文旨在为没有计算机科学背景的人士提供关于ChatGPT及类似AI系统(GPT-3、GPT-4、BingChat、Bard等)的工作原理的洞察。ChatGPT是一种聊天机器人——一种基于大型语言模型构建的对话式AI。这些肯定是些专业术语,我们将逐一解析。在此过程中,我们将讨论它们背后的核心概......
  • BUUCTF_MISC题解析(7)
    7.wireshark下载文件发现里面是一个pcap格式的文件。而pcap格式就是网络分析工具保存的网络数据包,是捕获的从网卡发送或者接收的每一个数据包的离线网络流量。 在wireshark官网上下载wireshark,wireshark是网络封包分析工具。将文件用wireshark打开,发现有三个部分,上半部分绿......
  • LLM权威教程:吴恩达 面向开发者的LLM入门教程+开源大模型食用指南,普通学习者也能看懂!
    今天给大家推荐一本由吴恩达和OpenAI团队共同编写的关于大型语言模型(LLM)的权威教程<面向开发者的LLM入门教程>!在Github上已经高达50kstar了,这含金量不用多说,在这里给大家强烈推荐一波,不多bb直接开始介绍!这本教程旨在为开发者提供全面而系统的LLM知识和技能,结合了吴恩达在......
  • BUUCTF_MISC题解析(6,8)
    6.乌镇峰会种图把打开的图片放进010editor,拉到最末尾就可以发现flag 8.N种方法解决打开文件是KEY.exe点击打不开,运行不了(exe文件是二进制文件),所以把他拉到010editor打开,data:image/jpg;base64,iVBORw0KGgo......gg==发现是base编码的形式,开头的提示说明是jpg格式的图片,......
  • 傻逼模拟赛搬的时候能不能看看题面改之后还是不是让人能看懂还有不发 checker 是有什
    如题。傻逼模拟赛搬的时候能不能看看题面改之后还是不是让人能看懂还有不发checker是有什么心事吗还在最后一道题放集训队互测什么意思什么叫有\(b_{k}\)种\(k\)类型的货币,同一种流通的货币不会超过二十种什么叫接下来\(n\)个数表示\(a_{1}\sima_{n-1}\)......
  • BUUCTF_MISC题解析(3,4)
    3.你竟然赶我走搜索010editor官网,点第一个页面,下载010editor(十六进制编译器)(黄色图标),直接010editor打开(或者使用stegSolve)一般情况用ctrl+f进入字符串搜索查看是否有插入的flag信息,就可以在文件尾看到flag是flag{stego_is_s0_bor1ing} 4.二维码扫码识别二维码,发现隐......
  • BUUCTF蜘蛛侠呀
    解压后发现是流量包,好多icmp包发现icmp包尾部有$$STRAT打头16进制的字符串,好多重复得。我们只需要提取尾部这些字符串是当icmp的type=0时上图标识为褐色的字符串,还需要把16进制的字符串转为对应的字符串(bytes类型)并去重。使用python脚本importpysharkimportbinascii......