操作系统知识与常见漏洞

1.Inode与Block:

Inode(index node),索引节点。Linux系统中,分区要进行格式化,创建文件系统。在每个Linux存储设备或存储设备的分区(可以是硬盘,软盘,U盘等)被格式化为ext3文件系统后,一般分为两个部分: Inode, Block

  Block是用来存储文件实际内容的,例如:文本内容,照片内容,视频内容等。而inode是用来存储这些文件属性信息的(也就是ls -l的大部分内容),inode包含的属性信息包括文件大小,用户ID,组ID,读写权限,文件类型,修改时间,还包括指向文件实体的指针的功能,但是,不包括文件名。ls –i可以用来显示文件的inode信息,之后可以用find命令查看文件内容,若文件名被过滤,可以考虑用这个查看。也可以将文件名输出到文件里,然后执行文件。

如payload:printf /fla > /tmp/hello && printf g >> /tmp/hello && tac `tac /tmp/hello。用重定向符将flag拆分开来(flag被过滤)写入hello文件里,然后用tac命令查看。

2.Linux中UID为0,表示该用户是管理员

3.Linux可以在/etc/rc.d/rc.local文件行尾添加要执行脚本的路径来实现程序的自动启动。>> 是追加内容,> 是覆盖原有内容

4.Shell 脚本中有个变量叫IFS(Internal Field Seprator),内部域分隔符,默认为:空格、制表符、换行符。

5.Docker是一种十分流行的虚拟化程序,可以让开发者将应用和依赖包打包到一个可移植的容器中然后发布到任意流行的Linux计算机。但是其本身任然是一个程序,任然使用宿主操作系统

6.木马的键盘监听功能会对信息安全缠身国际大的安全威胁,因此在输入重要信息的时候要尽量使用软键盘,使用软键盘可以有效防止木马的键盘监听

7.通配符也可以用来绕过WAF,例如发送bin/ls可能会被拦截,但是如果没有禁止?、/、*之类的通配符的话,则可以发送/???/?s

8.访问一个网站如1.1.1.1除了可以直接访问还可以将IP地址转换成长格式,1*256+1*256+1*256+1*256=256*4=1024(也就是http://1025)来访问

9.防范CSRF:请求的referer字段表示了请求是从哪里发起的,就可以判断请求时同域还是跨站发起的,但是有些浏览器和网络默认设置中不包含该字段,这种方法就失效了。验证头部的Origin字段,这个字段可以看出请求的,真是来源,这个字段是由浏览器自动产生的,不能由前端进行定义。

10nc命令

是一个功能强大的网络工具,全称是netcat

详细如下:
nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>][-s<来源位址>][-v...][-w<超时秒数>][主机名称][通信端口...]
参数说明:
 -g<网关> 设置路由器跃程通信网关,最丢哦可设置8个。
-G<指向器数目> 设置来源路由指向器,其数值为4的倍数。
-h 在线帮助。
-i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。
-l 使用监听模式,管控传入的资料。
-n 直接使用IP地址,而不通过域名服务器。
-o<输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。
-p<通信端口> 设置本地主机使用的通信端口。
-r 乱数指定本地与远端主机的通信端口。
-s<来源位址> 设置本地主机送出数据包的IP地址。
-u 使用UDP传输协议(默认是TCP协议)
-v 显示指令执行过程。
-w<超时秒数> 设置等待连线的时间。
-z 使用0输入/输出模式,只在扫描通信端口时使用

若命令支持-c –e参数还可以设置shell

11.JWTJson web token):

类似令牌。它的构成:第一部分我们称它为头部(header),第二部分我们称其为载荷(payload),第三部分是签证(signature). 头部承载两部分信息: 声明类型、加密的算法(通常直接使用 HMAC SHA256). payload载荷就是存放有效信息的地方。这些有效信息包含标准中注册的声明、公共的声明、私有的声明。第三部分是一个签证信息,由三部分组成:

header (base64后的)

payload (base64后的)

secret

这个部分需要base64加密后的header和base64加密后的payload使用.连接组成的字符串,然后通过header中声明的加密方式进行加盐secret组合加密,然后就构成了jwt的第三部分。

最后将这三部分用.连接成一个完整的字符串,构成了最终的jwt。将加密算法设置成None就可以伪造任意令牌了。JSON Web Tokens - jwt.io进行在线加解密jwt.

总之JWT安全问题一般有以下:

1. 修改算法为none

2. 修改算法从RS256到HS256

3. 信息泄漏 密钥泄漏

4. 爆破密钥

12. windows文件命名规则

上传不符合windows文件命名规则的文件名
  test.asp.
  test.asp(空格)
  test.php:1.jpg
  test.php::$DATA
  shell.php::$DATA…….
会被windows系统自动去掉不符合规则符号后面的内容。

00截断:0x00是字符串的结束标识符,攻击者可以手动添加的方式对后面的内容进行截断,而后面的内容可以帮我们绕过检测。如11.php%00

13.NodeJs沙箱逃逸:

vm模块可在V8虚拟机上下文中编译和运行nodejs代码,但是并不安全,包括vm2. vm的一个常见用法是做上下文隔离:

const vm = require('vm')

x = 1

context = {x: 2}

vm.createContext(context)

const code = 'x+=2;'

vm.runInContext(code, context)

console.log(x) // 1

console.log(context.x) // 4

简言之,context为vm提供了一个单独的上下文,与全局变量“隔离”,但是事实并非如此。

Global Node.js中的全局对象,所有全局变量(除了global本身以外)都是 global 对象的属性。

Constructor对象的该属性返回创建实例对象的构造函数的引用。

Function:Function构造函数用于创建一个Function对象,也就是说用这个构造函数可以动态的创建函数。每个JavaScript函数实际上都是一个Function对象。Function的最后一个参数是函数体,其余参数是函数参数

This:表示当前执行代码的环境对象。在不同场合下有不同的值,取决于使用方式。

在全局执行环境中(在任何函数体外部)this 都指向全局对象。在函数内部,this的值取决于函数被调用的方式,如非严格模式下,this在函数中,并且this的值不是由该调用设置的,所以this的值默认指向全局对象:

在较早一点的 node 版本中(8.0之前),当 Buffer 的构造函数传入数字时,会得到与数字长度一致的一个Buffer,并且这个Buffer 是未清零的。8.0之后的版本可以通过另一个函数Buffer.allocUnsafe(size)来获得未清空的内存

14.Linux文本存储:

文本文件中存放的数据在用户读取时可以按照编码类型还原成字符形式。而二进制文件中存放的数据不能还原成字符形式(图片视频音频可执行文件等都属于二进制文件)。有些信息在二进制文件中仍然是以文本的形式存放的,利用Linux下的strings命令可以显示二进制文件中的文本信息

15.windows管道:

| 直接执行后面的语句 ping 127.0.0.1 | whoami

|| 前面为假再执行后面 ping 2 || whoami

& 前面可真可假(后面一定会执行) ping 127.0.0.1 & whoami

&& 前面只能为真(前面为假导致出错,后面不执行) ping 127.0.0.1 && whoami

16.Linux系统常见的符号总结:

.&、||、| 命令连接符

;前面的执行完执行后面的 ping 127.0.0.1 ; whoami。但是Windows中不支持

| 管道符,显示后面的执行结果 ping 127.0.0.1 | whoami

|| 前面为假再执行后面 ping 1 || whoami

& 前面可真可假(后面一定会执行) ping 127.0.0.1 & whoami

&& 前面只能为真(前面为假导致出错,后面不执行) ping 127.0.0.1 && whoami

17.Linux常见命令:

        1.strings命令:

在二进制文件中查找可打印的字符串,常用参数:

-a

扫描整个文件而不是只扫描目标文件初始化和装载段

-f

在显示字符串前先显示文件名

-t

输出字符的位置,基于八进制,十进制或者十六进制

        2.cat命令

连接文件并打印到标准输出设备上,cat经常用来显示文件的内容。格式:cat 参数 文件路径。参数意义:

-n或-number:有1开始对所有输出的行数编号;

-b或--number-nonblank:和-n相似,只不过对于空白行不编号;

-s或--squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行;

-A:显示不可打印字符,行尾显示“$”;

-e:等价于"-vE"选项;

-t:等价于"-vT"选项;

grep 指令用于查找内容包含指定的范本样式的文件。常用参数:

-i忽略字符大小写差别

-a不要忽略二进制的数据

        3.Curl工具

一个用于在Linux命令行下请求网页的工具。利用curl直接访问指定的URL,默认是发送get请求。-v可以显示详细信息。-I可以只显示响应头。发送带参数的get请求可以将参数直接写在URL当中。也就是:url/?parameter=

Value.如果需要发送post请求,需要用-x选项指定。-d选项可以指定post要发送的参数。比如:-d “what=value”

        4.Linux下xxd工具

将一个文件以十六进制显示

18. 信号:

信号分别是同步引导码,地址位和数据位,最后⼀个就是停⽌码,停止码没有特别的用处只是为了结束程序⽤的。一个是PT2242的,前面4bit表示同步码,中间的20bit表示地址码,后面的4bit表示功能码,后面最后一个是停止码一个是PT2262的,前面4bit表示同步码,中间的8bit表示地址码,后面的4bit表示功能码,后面最后一个是停止码。

19符号连接

符号链接又叫软链接,是一类特殊的文件,这个文件包含了另一个文件的路径名(绝对路径或者相对路径)。路径可以是任意文件或目录,可以链接不同文件系统的文件。在对符号文件进行读或写操作的时候,系统会自动把该操作转换为对源文件的操作,删除链接文件仅删除链接文件而不删除源文件本身。

20.LINUX

在 linux 系统中如果一个程序打开了一个文件没有关闭,即便从外部删除之后,在/proc 这个进程的pid目录下的fd文件描述符目录下还是会有这个文件的 fd,通过这个我们即可得到被删除文件的内容。

cat /proc/*/fd/*。之后查找我们需要的内容

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值