CTFer从0到1笔记
一、信息收集
ctf/web源码泄露及利用办法【总结中】——Sp4rkW
1、敏感目录泄露
0x01 Git泄露
(1)常规git泄露
工具:scrabble https://github.com/denny0223/scrabble.git
1 | ./scrabble url #获得源码 |
(2)git代码版本回滚
方法1:
1 | git reset --hard HEAD^ #代码回滚到上一个版本,HEAD代表当前版本,^代表上一个 |
方法2:
1 | git log --stat / git log -reflog /git log --all #查看每个commit修改了哪些文件 |
(3)git分支
git中默认为master分支,使用git log
只是查看当前分支的历史更改,即使是使用git branch -v
也只能看到master。这里推荐王一航的GitHacker工具,使用git reflog
可以看到一些checkout记录,来判断是否有其它分支的存在。当发现有其它分支的存在时,需要手动下载分支的head信息,将其保存到.git/refs/heads/分支名 中,手动下载分支head使用如下命令:
1 | wget http://XX/.git/refs/heads/分支名 |
将其恢复到git目录树中后,复用GitHacker的部分代码,以实现自动恢复分支的效果。将其if _name_ == “_main_“下的main()注释掉,只调用后面的fixmissing()函数,然后再次执行GitHacker.py,这一次运行git log -all / git branch -v
就可以看到新恢复的分支了,然后git diff HEAD commit-ID
去查看它的改动。
(4)git泄露的其它利用
除了查看源码的常见利用方式,.git/config
文件夹中可能含有acess_token信息,利用它可以访问这个用户的其它仓库。
0x02 SVN泄露
SVN(subversion)是源代码版本管理软件,造成SVN源代码漏洞的主要原因是管理员操作不规范将SVN隐藏文件夹暴露于外网环境,可以利用.svn/entires
或wc.db
文件获取服务器源码等信息。这里推荐两个工具:
1、https://github.com/kost/dvcs-rippper
2、Seay-svn(Windows下的svn源码泄露利用工具)
0x03 HG泄露
同上,HG也是源代码版本管理软件的一份子,且也存在着.hg隐藏文件夹泄露的问题,其中包含代码和分支修改记录等信息。这里推荐工具:dvsc-ripper
0x04 总结
无论是 版本控制软件的隐藏文件夹泄露 还是 实战中admin等敏感后台暴露,其关键在于字典的强大,这里也推荐一个开源目录扫描工具dirsearch
在CTF中,有时访问 .git 会返回403,此时可以试着访问 .git/config ,查看是否可以。在SVN泄露中,一般是在entries中爬取源码,如果entries为空,注意wc.db文件是否存在,可以通过其中的checksum在pristine文件夹中获取源代码。
注:在.svn目录下存在wc.db,该数据库文件在NODES表单local_relpath为真实文件名,checksum为文件的sha1值,kind表示文件类型[dir->目录,file->文件]。
.svn/pristine目录的二级目录下存储着源代码,文件名是sha1值.svn-base,二级目录名是sha1值的前两位。)
2、敏感备份文件
0x01 gedit备份文件
gedit编辑器保存文件后,当前目录会生成后缀为“~”的备份文件。
0x02 vim备份文件
vim在编辑文件过程中如果进程异常退出就会生成一个名形似为.flag.swp的备份文件,我们可以使用vim -r
命令来恢复它。
1 | 1、先将未保存的意外退出的flag文件创建,touch flag |
0x03 常规文件
- robots.txt:可能记录一些目录和CMS版本信息
- readme.md:可能记录CMS版本信息,有的甚至有Github地址
- www.zip/rar/tar.gz:往往是网站的源码备份
- .bak:备份文件
- .bash_history:
0x04 总结
在CTF线上比赛中,比赛承办方会有运维人员维护题目,我们可以编写实时监控脚本,对题目服务进行监控,监测是否有源码泄露出现。
一般来说vim的交换文件第一次意外退出名为.*.swp,第二次意外推出为.*.swo,第三次意外退出时为*.swn,以此类推。
另外,在实际生产环境中,网站的备份往往可能是网站域名的压缩包。
3、信息收集习题WP
0x01
flag1:在robots.txt中,n1book{info_1
flag2:在index.php~中,flag2:s_v3ry_im
flag3: 在.index.php.swp中,p0rtant_hack}
Flag:n1book{info_1s_v3ry_imp0rtant_hack}
0x02
直接GitHacker,查看index.html,获得flag:n1book{git_looks_s0_easyfun}
二、SQL注入
1、语句中不同注入点的注入方法
1.1 SELECT注入
1.1.1 注入点在select_expr
1 | select (select username from users limit 1,1) as email_id from emails; #使用别名的方式将正常查询逻辑中的列名改为我们想查询的表中的列 |
1.1.2 注入点在table_reference
1 | select email_id from (select (select username from users) as email_id from emails)b; |
1.1.3 注入点在WHERE或HAVING后
SQL注入习题WP
0x01
Bool盲注,直接脚本跑出来,flag:n1book{union_select_is_so_cool}
0x02
POST型的布尔盲注,username字段可布尔盲注,单引号闭合,这里有一问题是一串很典型的依靠information_schema的盲注代码竟然一直显示报错!找了几个小时根本找不出问题!难搞难搞。payload如下,截图如下。最后用sqlmap跑出来了,晕。Flag:n1book{login_sqli_is_nice}
1 | admin' and (select count(*) from information_schema.tables where table_schema='note') = 0 and '1 |