默认账户
通用性web程序有默认的管理员用户或者测试用户,才应用上线时没有进行清除导致第三方可以直接登录,进行一些操作。
- 数据库软件。
- 集成开发环境。
- CMS内容管理系统。
- 路由器管理界面。
- 摄像头管理界面。等
实例:
echop在默认安装的时候,安装程序会默认添加两个管理员账户。
后台/服务对公开发
- 后台地址泄露
- 后台地址被爆破
- 后台未做授权
- 敏感服务未做访问限制,可以直接访问
实例:
后台地址爆破:apache默认配置中发昂文http://ip/test/,直接返回test目录所有文件。
而且目录如果存在非服务器解析文件可以直接下载,如果存在服务器备份文件则对服务器造成直接威胁。
debug信息
原理:
为了开发人员能够快速定位错误的代码,脚本配置文件打开出错误提示选项。
但是debug信息可能会透露部分代码、绝对路径等信息。(比如SQL的报错注入)
修复方法:
- 可以使用两套环境,开发一套(开)实际上线一套(关)。
- 在代码前加入error_reporting(E_ALLE_NOTICEE_WARNING);可以关闭所有notice和warning级别的错误。
- 在代码前加入error_reporting(0);即可关闭所有报错。
- 打开php安装目录下的php.ini文件,找到display_errors = On 修改为display_errors = off。
版本控制系统
版本控制也是一种软体工程技巧,借此能在软体开发的过程中,确保由不同人所编辑的统一程式档案都得到同步。
Git
Git是一个开源的分布式版本控制系统。
用法:
Docker run -p 81:80 -it ubuntu bash 拉取ubuntu并运行进入ubuntu。
Linux下apache的默认根目录 /var/www/html
Git:是一个开源的分布式版本控制系统用于敏捷高效的处理任何或大或小的项目。
设置身份:
git config --global user.email "you@example.com"设置邮箱
git config --global user.name "Your Name"设置名字
Git add 1.php 提交到缓冲区
git commit -m "create file!" 提交到仓库(“”内的内容是操作提示,自定义编辑)
Git log 查看仓库日志
git reset --hard HEAD^ 往回退一个命令
git reset --hard HEAD^^ 往回退两个命令
git reset --hard HEAD~10 往回退十个命令
git reflog 可以查看以前操作的日志
git reset --hard "e555f27",具体退到哪个步骤
提交的时候用git add命令提交到缓冲区的文件会一并提交到仓库。
如果两个文件一起添加到缓冲区并提交那么返回操作会一起返回。
Git文件泄露
现在大量的开发人员都使用Git进行版本控制,对站点自动部署。
如果配置不当,可能会将.git文件夹直接部署到线上环境,这就引发了git泄露漏洞,攻击者可以直接从源码获取敏感配置信息。
使用git init
会自动创建.git隐藏目录,目录包括git所需要的所有信息。
.git目录:
- info:包含仓库的一些信息。
- logs:保存所有更新的引用记录
- COMMIT_EDITMSG:保存最新的commit message,Git系统不会用到这个文件,只是给用户一个参考
- HEAD文件:HEAD文件包含当前分支的引用。
Git文件夹讲解
commit过程:
创建文件跟踪,git会对其进行压缩然后以git自己的数据结构形式来存储。压缩的对象会有一个唯一的名字,即一个哈希值,这个值存放在object目录下。
提交git的主要两个步骤:
1、如果这个文件没有改变,git仅仅只把压缩文件的名字(就是哈希值)放入快照。
2、如果文件发生变化,git会压缩他,然后把压缩后的文件存入object目录,最后再把压缩文件的名字放入快照。
commit四部分:
- 工作目录快照的哈希。
- 提交的说明信息
- 提交者的信息
- 父提交的哈希值
下载工具:
githack:https://github.com/lijiejie/GitHack
使用方法:
python githack.py http://ip/.git
githack原理:
- 解析.git/index文件,找到工程中所有的:(文件名,文件sha1)
- 去.git/objects/文件夹下下载对应的文件。
- zlib解压文件,按原始的目录结构写入源代码。
SVN
apache subversion的缩写,是一个开源的版本控制系统,服务多基于subversion。
SVN服务端环境搭建:
安装操作平台:docker pull ubuntu
启动操作平台:docker run -it -p 3690:3690 ubuntu bash
安装SVN:apt-get update
apt-get install subversion
创立仓库文件夹:mkdir /opt/svn
创建仓库文件:svnadmin create test
进入配置文件:cd test/conf
切换到/opt/svn文件夹,然后重启SVN服务:首先pkill svn关闭开启的svn服务,然后再使用svnserve -d -r 目录 重启
SVN客户端环境配置
安装操作平台:docker pull ubuntu
启动操作平台:docker run -it -p 80:80 ubuntu bash
安装SVN:apt-get update
apt-get install subversion
apt-get install apache2
使用:
为了模拟SVN文件泄露,首先需要让用户访问到.svn目录,所以svn目录需要建立在WEB目录。
SVN服务器连接:svn checkout svn://192.168.137.1/ --,如果不是默认端口号需要改成ip:端口,当连接成功后会在当前目录建立.svn目录。
适用于git类似,svn add **
,svn commit -m “***”
SVN commit过程:
- 在客户端./svn/pristine目录生成目录
- 目录名字为文件名sha1值前两位
- 目录内部存放的文件为放入仓库ASNI编码文件,文件名为提交文件名的sha1值。
- 同时还会在wc.db数据库NODES表下插入一条记录,其中包含原始文件名、sha1值,插入时间等。
- 最后提交数据到服务端。
攻击脚本:
代码:https://www.0dayhack.com/post-421.html
运行:python svn.py http://ip/目录/