CTF权威指南 笔记 -第四章Linux安全机制-4.1-Linux基础

news2024/9/29 7:30:31

常用命令

这里给出linux常用命令

cd
ls
pwd  显示当前工作目录
uname 打印系统信息
whoami 打印用户名
man 查询帮助信息
find 
echo
cat
less
head
grep
diff
mv
cp
rm
ps
top
kill
touch 创建文件
mkdir 创建文件夹
chmod 变更权限
chown 变更所属者
nano 终端文本编辑器
exit

流,管道,和重定向

在操作系统中 流是一个很重要的概念

可以简单理解成一串连续的 可以边读边处理的数据

标准流可以分为 标准输入 标准输出 标准错误

数据流入程序 输入流
数据流出程序 输出流


最重要的流的概念 就是 边读取 边处理

在linux中 一切可以看做是文件 流也一样

 管道

管道是一些列进程通过标准流链接在一起 前一个进程的输出作为后一个进程的输入

符号为 |

例如

ps -aux|grep bash

在搜索进程的前提下 找到bash

 输入输出重定向

这个简单的意思就是把从终端输入输出的东西 赋值到文件中

 根目录结构

在linux中 所有都可以看做是文件

所有文件和目录被组织成以一个根节点(斜杆/) 开始的倒置的树状

linux的三种基本文件类型下

普通文件:包含文本文件 只含ASCII或Unicode字符,换行符为"\n",即十六进制 0x0A 和二进制文件
目录:包含一组链接的文件,其中每一个链接都将一个文件名映射到一个文件 这个文件可能是另一个目录
特殊文件:包括块文件,符号链接,管道,套接字

用户组和文件权限

linux支持多用户的操作

User ID(UID)和Group ID(GID)

其中GID可以对应UID

id root

这里 0是管理员  如果UID为1000 就是普通用户

GID的关系在 /etc/group文件中

 所有的用户信息(除了密码)都保存在/etc/passwd

加密的用户密码存放/etc/shadow

 

ls -l [file]
可以看文件的信息

第一个字母为 文件类型
d 为目录 -为普通文件 l为链接文件

后面的字母
没有权限为- 
rwx为读写执行
r 对应4
w 对应2
x 对应1

 用户可以使用chomod改变权限

-R就是递归目录

环境变量

环境变量相当于给系统或者应用设定了参数

比如 共享库的位置 命令行参数等

对于程序运行十分重要

环境变字符串以

"name"=value 存在
其中 大多数name为大写字母加下划线组成


name通常叫做环境变量名 valu为环境变量的值
其中 value要以 /0结尾

linux环境变量的分类方法有两个

按照生命周期划分

永久环境变量:修改配置文件 永久生效
临时环境变量:通过export命令在终端生效 终端关闭就失效



按照作用域划分

系统环境变量:该系统的用户生效 在/etc/profile里面声明
用户环境变量:对特定用户生效 在~/.bashrc中声明

我们通过enc可以打印环境变量

 LD_PRELOAD

这个环境变量是可以定义程序运行时有限加载的动态链接库

这就允许预加载库中的函数和符能够覆盖掉后加载的库中的函数和符号

如果我们要加载特定的libc 这就可以通过定义变量来实现

environ

libc中 定义全局变量environ指向内存中的环境变量表

这个表 就在栈上

如果我们通过泄露environ的地址

就可以获得栈的地址

gdb test 
b main
r
vmmap libc

 这个我们可以查看libc在虚拟内存映射

查看栈的虚拟内存映射

vmmap stack

shell nm -D /usr/lib/i386-linux-gnu/libc.so.6 | grep environ

 查找environ 全局变量在libc中的地址

 把libc地址和environ在libc中的地址相加就可以得到 environ的真实地址

x/gx 0x22e330+0xf7c00000

以字符串形式打印出来

x/4s 0xffffd9eaffffd9da

 

 这里我们就发现了environ的内容是什么了 这些都是环境变量表的内容

procfs文件系统

procfs文件系统是linux内核提供的虚拟文件系统 为访问内核数据提供接口

虚拟文件系统
只占用内存而不占有存储

通过 procfs查看 有关系统的硬件 和正在进行的进程信息
并且可以修改其中内容达到内核运行状态

我们来以命令cat - 为例

ps -ef |grep "cat -"

ps -ef 列出进程

精准到cat -

ls -lG /proc/3364
显示进程信息
-lG 以长格式 并且除去组

但是会显示没有目录 因为cat- 进程结束了 linux就自动删除了

所以我们进行查看父文件夹 3273

cd 3273

 这里我们能看到更多的信息

字节序

计算机采用 两个字节存储机制

大端序 :高字节位存入低地址 低字节位存入高地址
小端序 :低字节存入低地址 高字节存入高地址

这里给出12345678h存入1000的地址的区别

这里 1为高字节位 8位低字节位

1000为低地址 1003为低地址

 调用约定

函数调用约定是对函数传参的约定

1.栈的介绍-C语言调用函数(二)_双层小牛堡的博客-CSDN博客

核心转储

当程序出现错误  系统会几率把偶错的信息 这就叫做核心转储

我们开启核心转存并且修改转储文件

ulimit -c

ulimit -c unlimited

echo 1 > /proc/sys/kernel/core_uses_pid

echo /corefile/core-%e-%p-%t > /proc/sys/kernel/core_pattern

这里我创建了corefile文件夹 然后存入

我们给出例子来查看

core.c

#include<stdio.h>
void main(int argc,char **argv){
    char buf[10];
    scanf("%s",buf);
}
gcc -m32 -fno-stack-protector core.c

我们让他出错
python -c 'print("A"*20)'|./a.out

 说明异常报错

然后我们可以看看core了

file /corefile/core-a.out-7582-1683539674

gdb a.out /corefile/core-a.out-7582-1683539674 -q

然后我们进行查看栈帧信息

info frame

Stack level 0, frame at 0x41414141:
 eip = 0x565561db; saved eip = <not saved>
 Outermost frame: Cannot access memory at address 0x4141413d
 Arglist at 0xf7004141, args: 
 Locals at 0xf7004141, Previous frame's sp is 0x41414141
Cannot access memory at address 0x4141413d

系统调用

linux中 系统调用时调用一些内核函数 是用户访问内核的唯一手段

这些函数是和CPU有关的

x86   358个系统调用

x86_64 322个系统调用

我们以hello world为例 看看在32 和64 有什么不同

32位

.data
msg:
    .ascii "hello 32-bits!\n"
    len = .- msg
.text
    .global _start
_start:
    movl $len,%edx
    movl $msg,%ecx
    movl $1,%ebx
    movl $4,%eax
    int $0x80
    
    movl $0,%ebx
    movl $1,%eax
    int $0x80

 系统调用号存入eax 参数传递 ebx,ecx,edx,esi和edi 并且通过int $0x80执行系统调用

ld -m elf_i386 -o hello32 hello32.o
strace ./hello32
跟踪系统调用
了解一个程序的系统调用

 软中断$0x80 非常经典 但是2.6内存后被快速系统调用指令代替

32位使用 sysenter(sysexit)
64位使用 syscall(对应sysset)
.data
msg:
    .ascii "Hello sysenter!\n"
    len= . - msg
.text
    .globl _start
    
_start:
    movl $len,%edx
    movl $msg,%ecx
    movl $1,%ebx
    movl $4,%eax
    #Setting the stack for the ststenter
    pushl $sysenter_ret
    pushl %ecx
    pushl %edx
    pushl %ebp
    movl %esp,%ebp
    sysenter
    
sysenter_ret:
    movl $0,%ebx
    movl $1,%eax
    #Setting the stack for the sysenter
    pushl $sysenter_ret
    pushl %ecx
    pushl %edx
    pushl %ebp
    movl %esp,%ebp
    sysenter
gcc -m32 -c sysenter32.S 

ld -m elf_i386 -o sysenter sysenter32.o


strace ./sysenter

 

 64位例子 使用syscall指令

.data
msg:
    .ascii "hello 64-bits!\n"
    lne = . - msg
.text
    .global _start
_start:
    movq $1,%rdi
    movq $msg,%rsi
    movq $len,%rdx
    movq $1,%rax
    syscall

    xorq %rdi,%rdi
    movq $60,%rax
    syscall

从strace中看 都调用了 execvc() write() exit三个系统调用

函数printf的函数调用

调用printf() ->c库中的printf -> c库中的write() -> write系统调用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/503413.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL获取当前日期、时间、时间戳函数

目录 1.MySQL 获取当前日期时间 函数 1.1 获取当前日期&#xff08;date&#xff09;函数&#xff1a;curdate() 1.2 获取当前时间&#xff08;time&#xff09;函数&#xff1a;curtime() 1.3 获取当前日期时间&#xff08;date time&#xff09;函数&#xff1a;now() …

BClinux8.6 制作openssh9.3p1 rpm升级包和升级实战

一、背景说明 BClinux8.6 默认安装的openssh 版本为8.0&#xff0c;经绿盟扫描&#xff0c;存在高危漏洞&#xff0c;需要升级到最新。 官网只提供编译安装包&#xff0c;而BClinux8.6 为rpm方式安装。 为了方便升级&#xff0c;先通过编译安装包&#xff0c;制作rpm包&…

什么是无感电阻?无感电阻和普通电阻的区别

无感电阻&#xff0c;也称为电感电阻、电感器、电感元件等&#xff0c;是一种电气元件&#xff0c;常用于电子电路中&#xff0c;用于限制电流、防止电磁干扰等。无感电阻是指一种电阻器件&#xff0c;它能够在高频电路中工作而不会产生电感&#xff0c;从而避免了电感对电路性…

【Python】更改matplotlib绘图样式,要创建一个后缀名为mplstyle的样式清单,如何实现?

要更改 matplotlib 绘图样式&#xff0c;可以按照以下步骤创建一个后缀名为 mplstyle 的样式清单&#xff1a; 打开终端或 Anaconda Prompt&#xff08;Windows 用户&#xff09;&#xff1b;确保您的 Matplotlib 版本是 2.0.0 以上版本&#xff0c;通过运行&#xff1a; imp…

被裁现状,给找工作的同学一些建议

2022 到 2023 国内知名互联网公司腾讯、阿里、百度、快手、滴滴、京东、阿里、爱奇艺、知乎、字节跳动、小米等公司均有裁员&#xff0c;其中有不少公司&#xff0c;在过去年的一整年&#xff0c;进行了多轮裁员&#xff0c;以下是网传的一张 “2022 年裁员企业名单”。 这些裁…

【单目标优化算法】孔雀优化算法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

介绍一个empty(空状态描述)全端通用的空状态描述组件

介绍 这是一个全端通用的空状态描述组件&#xff0c;集成了25种常用场景&#xff0c;支持自定义图标及内容&#xff0c;快点下载试试吧。 插件含全部源码&#xff0c;可以给您无限实现可能&#xff0c;随心所欲自定义你的功能&#xff1b;符合uni_modules和easycom规范&#…

什么是web3 | 区块链web3.0人才

文章目录 一、Web31. 什么是web3&#xff1f;2. web3的dapp架构 二、区块链web3.0人才1. 区块链开发技术栈2. 欧易对人才的要求3. 如何成为一名合格的智能合约高级工程师4. web3各个赛道5. 链上数据分析师6. 一些案例 三、参考 一、Web3 1. 什么是web3&#xff1f; 20世纪90年…

百度搜索排名的提升,就靠这10个优化技巧!

随着互联网的快速发展&#xff0c;网站排名已经成为了企业竞争的一个重要指标。其中&#xff0c;百度搜索排名的提升更是众多企业都非常关注的问题。因此&#xff0c;在这篇文章中&#xff0c;我将为大家介绍10个优化技巧&#xff0c;以帮助企业提升百度搜索排名。 1.关键词优化…

MG100-Hi3798MV100-当贝纯净桌面卡刷固件包

MG100-Hi3798MV100-当贝纯净桌面卡刷固件包-内有教程及短接点 特点&#xff1a; 1、适用于对应型号的电视盒子刷机&#xff1b; 2、开放原厂固件屏蔽的市场安装和u盘安装apk&#xff1b; 3、修改dns&#xff0c;三网通用&#xff1b; 4、大量精简内置的没用的软件&#xf…

MySQL基础篇补充 | 多表查询中使用SQL99实现7种JOIN操作、SQL99语法新特性

目录 一&#xff1a;多表查询中使用SQL99实现7种JOIN操作 二&#xff1a;SQL99语法新特性 1. 自然连接Natural 2. USING连接 一&#xff1a;多表查询中使用SQL99实现7种JOIN操作 在多表查询中&#xff0c;除了遇到最多的内连接、左外连接和右外连接&#xff0c;还有其它的…

GPT-4与人工智能的未来:微软CTO对话比尔·盖茨

一系列技术变革引领我们走到今天&#xff0c;并深刻影响着人类社会。如今&#xff0c;随着人工智能技术的快速发展&#xff0c;ChatGPT、New Bing、GPT-4 等新产品和新技术的陆续发布&#xff0c;又将如何帮助我们创造未来&#xff1f;在微软与 OpenAI 的密切合作中&#xff0c…

Packet Tracer - 使用 CLI 配置 IOS 入侵防御系统 (IPS)

Packet Tracer - 使用 CLI 配置 IOS 入侵防御系统 (IPS) 拓扑图 地址分配表 设备 接口 IP 地址 子网掩码 默认网关 交换机端口 R1 G0/1 192.168.1.1 255.255.255.0 不适用 S1 F0/1 S0/0/0 10.1.1.1 255.255.255.252 不适用 不适用 R2 S0/0/0 (DCE) 10.1.1.…

服装生产erp都有哪些功能?该如何选服装生产erp?

各位开服装工厂的老板是否遇到这些难题&#xff1a; 库存管理成本高&#xff0c;大量库存积压导致资金紧张&#xff1b; 车间用人成本高&#xff0c;工人工作效率低&#xff0c;浪费大量时间和资金成本&#xff1b; 生产、加工、成品出库等各环节无法顺畅衔接&#xff0c;补单困…

Wikidata 数据包下载+格式转换+入库MySQL

1. Wikidata 简介 维基数据是一个自由的协作式的多语言辅助数据库&#xff0c;用于收集结构化的数据&#xff0c;旨在支援维基百科、维基共享资源以及其他维基媒体运动中的项目&#xff0c;也支援世界上的每一个人。 官网&#xff1a;https://www.wikidata.org/wiki/Wikidata:M…

在“裸奔”时代保护我们的隐私:网络攻击、数据泄露与隐私侵犯的应对策略与工具

摘要&#xff1a;随着信息技术的普及和发展&#xff0c;个人隐私和数据安全问题日益受到威胁。本文将讨论如何有效应对网络攻击、数据泄露和隐私侵犯&#xff0c;并提供一系列实用的技巧和工具&#xff0c;以帮助我们在“裸奔”时代更好地保护数据安全和隐私。 当今社会&#…

Http知识

一、http协议 目前存在HTTP1.1&#xff08;当前广泛运用的版本&#xff09;、HTTP2.0和HTTP3.0协议&#xff0c;有以下的优点和缺点 1. HTTP1.1 优点&#xff1a;默认支持长连接&#xff0c;即在一个TCP连接上可以传送多个HTTP请求和响应&#xff0c;减少了建立和关闭连接的…

浅浅地优化下视频流播放体验

作者&#xff1a;唐子玄 这一篇将从如何播放视频开始&#xff0c;接着介绍如何封装播放器&#xff0c;再将视频播放和列表结合形成视频流&#xff0c;然后一步步地优化视频流的播放体验。 播放视频 ExoPlayer 基本使用 这次我选择的是ExoPlayer&#xff0c;添加依赖如下&…

13个UI设计软件,一次满足你的UI设计需求

UI设计师的角色是当今互联网时代非常重要的一部分。许多计算机和移动软件都需要UI设计师的参与&#xff0c;这个过程复杂而乏味。这里将与您分享13个UI设计软件&#xff0c;希望帮助您正确选择UI设计软件&#xff0c;节省工作量&#xff0c;创建更多优秀的UI设计作品。 1.即时…

4.共享模型之管程

4.共享模型之管程 4.1 共享带来的问题 Java的体现 import lombok.extern.slf4j.Slf4j;/*** author xc* date 2023/5/6 13:00*/ Slf4j public class Test14 {static int i 0;public static void main(String[] args) throws InterruptedException {Thread t1 new Thread(()…