1.strncpy(char *dest, const char *src, size_t n)
- dest -- 指向用于存储复制内容的目标数组。
- src -- 要复制的字符串。
- n -- 要从源中复制的字符数。
strncpy(b,a+1,10); // 从a+1 这个位置开始10个字符复制到b中
为考虑内存越界,安全性问题,所以第三个参数为目的最大长度或者目的最大长度减一,防止当源buf大于目的buff时越界。
同时对目标字符串后面的最后一个位置添加 \0 用来结束整体的字符串
sizeof
用于计算内存占用大小,对于各种数据类型都有效,是编译时的静态操作;而 strlen
用于计算字符串的字符个数,只对以 '\0' 结尾的字符串有效,是运行时的动态操作。
2.java数组
int数组对应的默认值是 0
3.Mysql数据库事务的四大特性(ACID)
事务:把一组密不可分的操作系列集合在一起,这些操作要么全部执行,要么全部不执行。
1.原子性:事务是内定义的操作是一个整体,是不可分割的。
2.一致性:同一个事务,多次读取数据库中的同一个数据,读取的内容应该是一致的,不变的。
3.隔离性:不同事务之间相互独立,互不干扰。
4.持久性:事务提交后,事务内的操作对数据库的修改被永久保存在数据库文件中。
4.UDP报文最大长度64K,报文头部占8字节
5.
1.运行 Redis 服务器时,最好不要使用 root 权限。运行服务器以非特权用户身份有助于降低潜在的安全风险,因为在 root 权限下运行的服务器可能会受到更多的攻击和潜在的漏洞利用。应该创建一个专用的非特权用户来运行 Redis 服务器。
2.SSH 私钥文件应该保持私有,权限设置为 600 或 400,而不是 655 或 755。如果将权限设置得太宽松,其他用户可能会访问到你的私钥文件,从而危及你的 SSH 帐户的安全。
3.使用 Ansible 对服务器进行远程管理。Ansible 是一种常见的自动化工具,用于配置和管理远程服务器。它可以按照最佳安全实践进行配置,并且通常是一种安全的方式来管理服务器。
4.将 SSH 配置文件设置为禁止 root 登录。禁止 root 直接登录是一种安全最佳实践,因为它限制了攻击者对系统的访问。通常应该使用普通用户登录,然后使用 sudo
或其他特权升级方法来执行需要 root 权限的操作。
6.缓冲区溢出保护手段主要有:
-
NX (No Execute):这是一种硬件加速的技术,用于标记内存区域为“不可执行”或“可执行”。这样,即使攻击者成功地注入恶意代码到内存,这些代码也无法执行。
-
Stack Canary:这是一种特殊的保护方法,通过在栈帧之间插入一个“哨兵值”(Stack Canary)。如果发生缓冲区溢出,这个哨兵值会被覆写。在函数返回之前会检查这个值,如果被改变,程序会终止,从而防止了可能的缓冲区溢出攻击。
-
PIE (Position-Independent Executable):虽然这个技术主要是为了实现可执行文件的地址空间布局随机化(ASLR),但它也可以作为一种间接的缓冲区溢出保护手段。当结合 ASLR 使用时,攻击者很难预测注入代码的确切地址。
-
IPTABLES:虽然 iptables 是一种用于配置 Linux 内核***的工具,与缓冲区溢出保护没有直接关系。然而,在一定程度上,通过限制或过滤网络流量,它可能能减少某些类型的网络攻击,包括缓冲区溢出攻击。但这不是专门针对缓冲区溢出设计的防护手段。
综上所述,NX 和 Stack Canary 明确地用于缓冲区溢出保护,而 PIE 可以间接地提供一些保护。IPTABLES 与缓冲区溢出保护没有直接关系。
7.嗅探BLE通信时,最重要的跳频信息存放在 CONNECT_REQ 包内
8.ARM寄存器
$r13代表SP指针,指向栈顶;$15代表PC指针,指向程序接下来要执行的指令地址。
ARM微处理器共有37个32位寄存器,通用寄存器包括R0~R15,可以分为3类:
(1)未分组寄存器R0~R7
(2)分组寄存器R8~R14
(3)程序计数器PC(R15)
R14称为子程序链接寄存器LR(Link Register),当执行子程序调用指令(BL)时,R14可得到R15(程序计数器PC)的备份
9.cookie的基础属性有哪些?
1、domain属性:决定该cookie作用在哪个域。
2、path属性:决定该cookie字段作用在哪个路径下面。
3、secure属性:决定该cookie只能通过https传输。
4、HttpOnly属性:决定该cookie不能通过js读取。
5、expires属性:决定该cookie的过期时间
10.渗透测试的流程
信息收集-漏洞发现-漏洞利用-获取权限-维持权限-横向移动-目标达成-清理痕迹