有些新手朋友在拿到一个webshell后如果看到服务器是Linux或Unix操作系统的就直接放弃提权,认为Linux或Unix下的提权很难,不是大家能做的,其实Linux下的提权并没有很多人想象的那么难,你真去尝试做了,也许你就会发现Linux下的提权并不难,尤其是一些简单的提权方法是很容易学会的。Linux下的提权我知道的比较简单的方法都是在命令行下完成的,很多新手叉子可能根本没接触过Linux下的一些常用命令,今天危险漫步就给大家介绍一些Linux下提权过程中常用到的Linux命令,由于我也是刚学了几个Linux命令,介绍的不对或不全的还请大家多多指正和谅解。
对大家来说,在Linux下的提权最简单也是最有效的方法就是通过本地溢出漏洞提权。找到合适的漏洞利用程序在命令行下运行一下就完成了提权。
由于Linux下的提权大多是在命令行下进行的,因此要提权首先要得到一个执行命令的地方。我们最先得到的是一个webshell,比如PhpSpy。尽管很多Webshell提供了在Linux下执行命令的功能,但往往只能执行一些不需要交互的命令,因此我们首先要得到一个可执行交互命令的窗口,用到的方法是反弹shell到本地。PhpSpy自带了这个功能,名为“Back Connect”。
要想反弹回shell,你需要一台有公网lP的电脑(当然了,只有内网IP的电脑做了端口映射也可以),然后在你要反弹回来的电脑上首先用nc来监听要反弹回来的端口,如果要反弹回来的端口为12345,就执行nc -vv -|-p 12345来监听12345端口。
然后回到PhpSpy中的”Back Connec”,在“Your IP”后面自动识别除了你当前电脑的公网IP,如果要反弹到别的电脑上请输入要反弹电脑的IP,我这里要反弹到本机,就不需要修改了,“You Port”是你要反弹电脑上正在监听的端口,默认为12345,知道我上面为什么在本机监听12345端口了吧,就是在这里不需要修改“Your Port”了,当然,你也可以在本地监听123456端口,然后把“Your Port”也修改成对应的123456端口就行了。点“Start”按钮进行反弹,过一会儿本机的监听窗口看到类似信息就说明反弹成功了,得到了一个可执行交互命令的窗口。接下来执行命令的效果和在Ubuntu的终端中执行命令的效果几乎完全相同,所以我在Ubuntu 10.10的终端中执行常用的提权中用到的命令来给大家演示。
在反弹回来的权限较低的shell的命令窗口中有权限执行的命令有:
1、uname
输出一组系统信息。如果不跟随选项,则视为只附加-s选项。常跟的参数有-a,在我的Ubuntu
10.10的终端中执行uname-a命令后显示,其中最前面的Linux表示是基于Linux内核的,2.6.35-28是具体的内核版本号。这个内核版本号非常重要,因为如果是采用溢出漏洞提权的话内核版本号是寻找溢出漏洞利用程序最重要的参考信息,根据当前的内核版本号寻找适用于这个版本号的漏洞利用程序。
2、pwd
获得当前目录,在用webshell上传漏洞和用程序前执行一下pwd命令获得当前目录,把漏洞利用程序直接上传到当前目录,在执行漏洞利用程序时就可以免去输入目录的麻烦。执行pwd命令后显示/home/test,说明当前目录为/home/test/。
另外,通过webshell比如PhpSpy的“Back Connect”反弹回来的shell默认的当前目录为webshell所在的目录。
3、ifconfig
显示网络配置信息,比如显示有哪些网卡,每块网卡的配置信息(IP地址、MAC地址、子网掩码)等,常用参数-a执行ifconfig-a命令后显示。从信息可以知道,当前系统共有一块网卡etho,IP地址为192.168.19.138,子网掩码为255.255.255.0。
4、netstat
显示当前的网络连接状态,与Windows系统下的netstat命令写法相同,功能也差不多。
执行netstat后显示了很多网络连接的信息。
5、ps
ps是用来报告程序执行状况的指令,你可以搭配kill指令随时中断,删除不必要的程序。常用的参数有a,u,x
a 显示现行终端机下的所有程序,包括其他用户的程序。
u 以用户为主的格式来显示程序状况。
x 显示所有程序,不以终端机来区分。
执行ps aux命令后显示,显示了程序的进程id,CPU占用率等详细信息,如果要结束某个程
序,只需要用命令kill-9 PID就可以结束,其中PID就是在执行ps aux命令时显示的程序的PID,当然前提是要有相应的权限。
6、gcc
很多Linux下的漏洞利用程序都是用C语言写的,我们得到的很多时候是漏洞利用程序的C语言的源代码,要想得到可执行程序,需要对源代码进行编辑,这时候就用到大名鼎鼎的gcc了。个别情况下可能因为兼容性的原因必须需要在要提权的Linux主机上编译漏洞利用程序,这时候也需要用到gcc。GCC(GNU Compiler Collection,GNU编译器套装),是一套由GNU开发的编程语言编译器。它是一套以GPL及LGPL许可证所发行的*软件,也是GNU计划的关键部分,亦是*的类Unix及苹果电脑Mac OS X操作系统的标准编译器。GCC原
名为GNUC语言编译器,因为它原本只能处理C语言,GCC很快地扩展,变得可处理C++,之后也变得可处理Fortran、Pascal、Objective-C、Java,以及Ada与其他语言。
在大多数情况下,你在本地的Linux系统中编译好的溢出漏洞利用程序直接上传到要提权的Linux主机上也能正常使用,不是必须要在要提权的主机上编译溢出漏洞的利用程序。因为gcc特别强大,功能特别多,用法也特别多,要讲全的话估计要一本厚书的篇幅,这里不可能一一介绍,只介绍Linux提权中常用到的两个方面:
(1)gcc-v
查看安装的gcc的版本,我们的目的是通过执行gcc-v命令确认系统是否安装了gcc,如果安装了会显示安装的gcc的版本号如果提示找不到命令等说明gcc没有安装。Ubuntu 10.10默认安装了gcc。
(2)另一个用到的重要功能就是把漏洞利用程序的源代码编译成可执行程序了。假设溢出漏洞利用程序源代码文件是exp.c,通过websbell把exp.c上传到了要提权的Linux主机的当前目录下,在反弹回来的命令窗口中执行gcc-o exp exp.c,就会把exp.c编程成可执行程序exp,其中-o参数后面跟着的是编译生成的可执行程序的名字,这里为exp,另一个参数exp.c是要编译的溢出漏洞利用程序源代码的文件名,这里为exp.c。执行命令后如果没有错误提示就说明编译成功了。执行一下命令ls,发现可执行文件exp已经生成了。
接下来输入./exp就可以运行漏洞利用程序exp了,如果溢出成功会显示,注意下面的那个#,对Linux有点了解的都知道#对应的是root权限,看到#就说明提权成功了,接下来你就可以以root权限运行各种命令了。
在通过溢出漏洞获得root权限后,能执行的命令就多了,很多没提权前没权限执行的命令现在都可以执行了。这时候可以执行一些命令来获取一些敏感信息或进行留后门清理日志等操作,方便更好的控制提权成功的服务器。
1、cat .bash_history
查看该用户曾经执行过的命令,也就是查看root用户执行过的命令。因为Linux下很多管理操作都是在命令行下完成的,而正常情况下用root用户执行命令的是管理员,通过查看管理员输入的命令,可能得到很多敏感信息。
2、cat/etc/passwd cat/etc/shadow
分别执行cat/etc/passwd,cat/etc/shadow命令后得到passwd和shadow的内容,把两个文件的内容保存到本地用john挂字典尝试破解root用户的密码,具体怎么破可以自己查询相关信息。cat/etc/shadow只有root权限才能执行。
3、chmod
在提权成功获得root权限后你如果想下载服务器上的一个文件到本地,我的方法是先执行cp命令把要下载的文件复制到网站的Web目录下,但复制过去的文件只有root用户能访问,直接用浏览器下载会提示没有权限,这时候就需要用到chmod命令了。chmod命令的作用是变更文件或目录的权限。如果要下载的文件是shadow1,执行命令chmod 777./shadow1后就可以直接用浏览器下载了,不会再有权限问题了。
当然,在获得root权限后还可以做很多事,比如安装后门,想办法搞到root用户的密码等,可惜我不会,也和本文的题目“Linux下提权常用小命令”关系不大,这里就不介绍了。在实际提权过程中用到的命令可能远不止这么多,我介绍的都是大路边的最常用的。由于我对Linux几乎也是一窍不通,有介绍的不对的地方还请大家谅解。
以后大家们遇到Linux主机,不要不敢去尝试提权,大胆尝试,往往会有惊喜和收获。