靶机说明:
I created this machine to help others learn some basic CTF hacking strategies and some tools. I aimed this machine to be very similar in difficulty to those I was breaking on the OSCP.
This is a boot-to-root machine will not require any guest interaction.
There are two designed methods for privilege escalation.
- 23/09/2015 == v1.0.1
- 22/09/2015 == v1.0
If you are having issues with VirtualBox, try the following:
- Downloaded LordOfTheRoot_1.0.1.ova (confirmed file hash)
- Downloaded and installed VMWare ovftool.
- Converted the OVA to OVF using ovftool.
Modified the OVF using text editor, and did the following:
replaced all references to "ElementName" with "Caption" replaced the single reference to "vmware.sata.ahci" with "AHCI"
Saved the OVF. +Deleted the .mf (Manifest) file. If you don't you get an error when importing, saying the SHA doesn't match for the OVF (I also tried modifying the hash, but no luck).
- Try import the OVF file, and it should work fine.
靶机渗透:
本次依然采用kali+windows10来作为攻击机进行渗透,
我把靶机用导入到VM虚拟机,并且都在局域网内,攻击机的IP
为 192.168.0.109
我们用nmap开路,先寻找同一局域网内靶机IP:
我们找到靶机IP地址为:192.168.0.108
我们用nmap对靶机进行更深的信息探测:
只有22端口开启,运行的是OpenSSH 6.6.lpl服务
我们尝试链接22端口:
页面上有两个提示:" Knock Friend To Enter " 和 " Easy as 1,2,3 "
完全没有头绪好吧,Google了一下,了解这是Port Knocking的技术
端口试探(port knocking)是一种通过连接尝试,从外部打开原先关闭端口的方法。一旦收到正确顺序的连接尝试,防火墙就会动态打开一些特定的端口给允许尝试连接的主机。
端口试探的主要目的是防治攻击者通过端口扫描的方式对主机进行攻击。
端口试探类似于一次秘密握手协议,比如一种最基本的方式:发送一定序列的UDP、TCP数据包。当运行在主机上的daemon程序捕捉到数据包以后,如果这个序列正确,则开启相应的端口,或者防火墙允许客户端通过。
由于对外的Linux服务器通过限制IP地址的方式来控制访问,因此可以利用这种端口试探方式来进行防火墙对于访问IP地址的控制。
(参考链接:http://en.wikipedia.org/wiki/Port_knocking)
在学习了这个概念后,我尝试用nmap命令来对1,2,3进行端口试探:
- 注意:
- -sV --->探测开放端口以确定服务版本信息。
- -Pn --->将所有主机视为在线或禁用ping。
- -r ---->连续扫描端口不随机化.
我们再次使用nmap来查明端口探测是否打开了其他端口:
果然,再次查看的话靶机开放了1337端口,是Apache服务,我们尝试访问:
查看源代码,发现没有什么可以利用的地方...
我们用dirb扫描一波目录结构:
看起来只有/images目录:
我们查看robots.txt:
我们查看源代码:
发现有一串base64的编码:
THprM09ETTBOVEl4TUM5cGJtUmxlQzV3YUhBPSBDbG9zZXIh
我们尝试解码:
Lzk3ODM0NTIxMC9pbmRleC5waHA= Closer!
这串字符的前半部分Lzk3ODM0NTIxMC9pbmRleC5waHA=也像是base64编码,
继续解码:
/978345210/index.php 是一个php页面,我们访问:
是一个登陆页面,依然没有验证码,我们尝试sqlmap来跑一跑注入:
hahaha,果然还是有点东西的,我们对Webapp这个数据库进行探测表:
我们对这个Users表进行字段探测:
我们尝试爆出用户名跟密码:
成功得到用户名跟密码:
- gimli:AndMyAxe
- legolas:AndMyBow
- aragorn:AndMySword
- frodo:iwilltakethering
- smeagol:MyPreciousR00t
我们在那个登录页面尝试登陆:
发现五个用户登陆全部跳转到了 http://192.168.0.108:1337/978345210/profile.php 这个页面
查看源代码:
也没什么发现...既然这个不是登陆的用户名跟密码,唯一还能用用户名跟密码
登陆的服务也就是ssh,我们尝试:
发现前四个用户登陆均会出现上述情况,只有smeagol这个用户可以登陆成功:
反正登进来就行,下一步就是提升权限,获取root目录下的信息,当然linux提权的
第一步就是系统枚举,这里我Google了一下,发现有个博客,讲的是手动检查:
https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/
同时也分享两个脚本文件:
- unix-privesc-check:http://pentestmonkey.net/tools/audit/unix-privesc-check
- linuxprivchecker: https://www.securitysift.com/download/linuxprivchecker.py
这两个程序不止细致地检查了非常多的配置问题,更让人感动地列出了所有可写文件。
基本上可以说他们的检查是足够全面的。
我们下载脚本,并且在靶机上执行:
[*]查找相关权限升级漏洞…
注意:依赖于这个系统上未检测到的编译/脚本语言的漏洞被标记为“**”,但仍然应该被测试!
下面的开发在成功概率上排名更高,因为该脚本检测到相关的运行进程、OS或已安装文件系统。
- MySQL 4 .x/5用户定义函数本地权限升级漏洞利用
下面的漏洞适用于这个内核版本,也应该进行调查。
-内核IA32 SysCALL仿真特权升级
SeNePoST本地特权升级(HTTP://www-dab-dB.COM/Reavigs/1933)语言= Ruby**
- CasySysAdmin管理以root漏洞2(32和64位){ Twitter -Dig.B.COM/Realths/15944 }语言=C
-对根利用的CAPYSyssAdmin
- MySQL 4 .x/5用户定义函数本地权限升级漏洞利用
-开放时间能力文件
-开放时间能力文件FielsNSCABABLE()-特权升级脆弱性〉HTTP//www.
在最后,可以看到可能的漏洞列表,其中提到了MYSQL的本地提权,我感觉可以试一试。
这是作为超级用户运行的进程或数据包,我们发现了下图:
果然mysql是以root用户身份运行,我们再仔细检查一下关于mysql:
证实了我们的猜想,我们可以使用mysql本地提权漏洞,但是我们需要MYSQL的root密码才能使用该
漏洞,我们用sqlmap对mysql数据库进行探测:
...
我们爆破User,Password的值:
成功得到root的密码:darkshadow
我们尝试搜索一下mysql 4.x/5.0的漏洞exp:
我们使用:https://www.exploit-db.com/exploits/1518/
如何利用MYSQL4.x/5.0这里讲的很清楚:
https://blog.csdn.net/nixawk/article/details/52988147
我们在本地kali机器上编译exp : 1518.c :
kali的gcc编译不给力啊,我找了一台centos7来编译gcc
编译生成1518.so,我们在靶机上用wget下载到/home/smeagol/
上面我们用sqlmap获得了数据库的账号跟密码 :root/darkshadow
现在我们以root的身份登陆mysql数据库:
选择要使用的mysql数据库,并且创建一个新表myexploit来存储要利用的exp:
我们利用load_file()将已经编译过后的1518.so插入表中:
我们利用dumpfile()将表中的内容输出到 /usr/lib/mysql/plugin 中方便利用:
创建一个名为 " do_system "的MYSQL函数,并让他使用1518.so:
检测创建的函数是否存在:
指定我们要运行的命令,如上所述将作为mysqld用户运行,即“root”。
在这个例子中,我们只输出id命令的结果 ,以确认我们以root身份运行。
现在我们切换回shell提示符。
最后,让我们读取/ tmp / out的内容,它应该是先前运行的id命令的结果 。
优秀!所以我们的漏洞利用工作,我们可以将命令作为“root”运行。在这个阶段,我们
可以只更改上一个命令来列出/ root /目录的内容,看看是否有一个flag文件,然后cat
它的内容。但我仍然想要一个合适的...正确的根壳。
经过一些谷歌搜索,我发现了一个很简单的方法,按照这篇文章。这个细节使用了我们
已经使用的相同漏洞利用,但后来使用了一些简单的C代码,启动 /bin/bash,编译它,
然后最后给它SetUID属性。因此,当我们将其作为正常使用运行时,它会启动一个shell
(/ bin / bash),但以root身份运行。
首先,我们创建名为rootshell.c的C代码,它只是启动 /bin/bash。
然后,回到MySQL数据库,我们通过改变先前创建的ls命令来编译它 :
然后我们设置SetUID属性。
完成!所以我们现在有了“rootshell”二进制文件。退出MySQL,然后运行它。
我们现在是root ,快速找到flag文件,并查看它的内容。