第六届全国网络安全大赛代码审计全解
XDCTF是一项面向全国在校大学生的信息安全类竞赛,由西电信息安全协会与网络攻防实训基地联合举行。旨在增强学生对网络常识的爱好,进步学生学习网络技术的积极性,培育学生的立异 认识、协作精力和理论联系实际的才能。
此次CTF WEB2是一个大题,总共4个flag,别离代表:获取源码、拿下前台办理、拿下后台、getshell。
方针站:http://xdsec-cms-12023458.xdctf.win/
依据提示:
0×01 获取源码
“时雨的十一
时雨是某校一名学生,素日宠爱php开发。 十一七天,全国人民都在水火之中地预备朋友圈杯旅行拍摄大赛,而苦逼的时雨却只能在宿舍给某凶恶安排开发CMS——XDSEC-CMS。
喜爱开源的时雨将XDSEC-CMS源码运用git更新起来,预备等开发完成后push到github上。
成果被领导发现了,喝令他rm一切源码。在领导的淫威下,时雨也只好删除了一切源码。
但聪明的小朋友们,你能找届时雨君的源码并发现其间的缝隙么?”
可得知获取源码的方法和git有关。
扫描9418端口发现没开,非Git协议。拜访http://xdsec-cms-12023458.xdctf.win/.git/ 发现403,目录或许存在,存在git走漏源码缝隙。
用lijiejie的GitHack东西获取源码:http://www.lijiejie.com/githack-a-git-disclosure-exploit/
并不能获取悉数源码,只获取到一个README.md和.gitignore。
读取README.md可见提示:“All source files are in git tag 1.0”。
能够反推出其时“时雨”的操作是:
git init git add . git commit git tag 1.0 git rm –rf * echo “All source files are in git tag 1.0” > README.md git add . git commit真实的源码在tag == 1.0的commit中。那么怎样从走漏的.git目录反提取出1.0的源码?
这道题有“原理法”和“东西法”。当然先从原理讲起。
首要依据git目录结构,下载文件http://xdsec-cms-12023458.xdctf.win/.git/refs/tags/1.0 。这个文件其实是commit的一个“链接”。
这是个文本文件,便是一个sha1的commit id:
然后简略说一下git object。
Git object是保存git内容的目标,保存在.git目录下的objects目录中。Id(sha1编码过)的前2个字母是目录名,后38个字母是文件名。
所以d16ecb17678b0297516962e2232080200ce7f2b3这个id所代表的目录便是http://xdsec-cms-12023458.xdctf.win/.git/objects/d1/6ecb17678b0297516962e2232080200ce7f2b3
恳求(一切git目标都是zlib紧缩过,所以我使用管道传入py脚本中做简略解紧缩):
可见这也是个文本文件,指向了一个新id : 456ec92fa30e600fb256cc535a79e0c9206aec33,和一些信息。
我再恳求这个 id:
可见,得到一个二进制文件。
阅览下文可先简略了解一下git目标文件结构:http://gitbook.liuhui998.com/1_2.html
到这一步,咱们接下来会接触到的目标就只有“Tree 目标”和“Blob目标”。
这个图能够表明目标间的联系:
实际上我第一次获取的d16ecb17678b0297516962e2232080200ce7f2b3便是commit目标(绿色),方才获取的456ec92fa30e600fb256cc535a79e0c9206aec33是tree目标(蓝色),真实保存文件内容的是blob目标(赤色)。
那么这个tree目标详细的文件结构是:
[1] [2] [3] [4] [5] [6] 黑客接单网