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
2
git log --stat / git log -reflog /git log --all    #查看每个commit修改了哪些文件
git diff HEAD commit-id #比较当前版本和想查看的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/entireswc.db文件获取服务器源码等信息。这里推荐两个工具:

1、https://github.com/kost/dvcs-rippper

2、Seay-svn(Windows下的svn源码泄露利用工具)

3、https://github.com/admintony/svnExploit/

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
2
3
1、先将未保存的意外退出的flag文件创建,touch flag
2、vim -r flag
3、cat flag #发现已成功还原

0x03 常规文件

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;    #使用别名的方式将正常查询逻辑中的列名改为我们想查询的表中的列

Bu4FiR.png

1.1.2 注入点在table_reference
1
2
3
4
select email_id from (select (select username from users) as email_id from emails)b;

--进阶
select email_id from (select (select username from users limit 1,1) as email_id from emails)b;

BuIfR1.png

1.1.3 注入点在WHERE或HAVING后

SQL注入习题WP

0x01

Bool盲注,直接脚本跑出来,flag:n1book{union_select_is_so_cool}

Buuap4.png

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

BucW8O.png

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器