基础入门-搭建安全拓展
常见搭建平台脚本启用
网站可以使用2003 server的iis 6.0服务器,搭建网站。
若是本地搭建网站,要绑定域名的话,需要dns服务器,但是没有dns服务器的话,可以使用本地的hosts文件进行更改。这样便可以实现了。
域名平台
若域名绑定的目录是这样的,而此时通过域名是可以访问该网站的,而通过ip地址访问该网页显示在建设中,因为ip地址访问的是默认路径
这里主页是blog是域名绑定的目录
此时若是用ip地址的话,那么目录的话,为www为网站根目录。如下【所以,扫描的时候,ip地址扫描成为了扫描的思路。另外,网站人员习惯将网站源码备份后,放在www里面,所以扫描的时候,可以发现网站源码的备份。】
也就是说使用ip地址扫描的话,他能访问的地址更多。
现在有些网站经常将网站备份到根目录,www.zip等,而你用域名扫描的话,是扫描不到的。
经常造成的现象是域名访问的是指定目录,而ip地址访问的是根目录。因为域名解析对应指定目录,而ip地址访问,对应是上一级目录。
这里这个拓展名,即后缀名,对应可执行路径。在这里添加可执行路径对应后缀。
那么我在根目录里面添加一个对应xiaodi8后缀的文件。
文件中添加上传漏洞,密码是x
之后使用菜刀添加怎么一个记录,能正常访问,说明xiaodi8可以被正常解析为asp可执行文件。那么原理就是说,asp为什么可以指定,因为指向一个可执行文件,而xiaodi8也指向同样的文件,那么自然也可以被作为asp执行
这里cdx都指向asp可执行文件,那么上传cdx也可以被作为asp执行。
常见安全测试中的安全防护
这里面的安全通信,是必须要先下载证书,才能访问。下面的是网站访问的用户名和密码的要求,如果是匿名的话,则可以用匿名访问,否则的话,就需要专门的用户才能访问。
这里ip地址限制的话,只有固定的ip地址,才能访问到该网站。那么,这种的话,只有通过原理性的方法才能突破限制。
当我们使用菜刀连接到网站的时候,如下界面
当用菜刀更改文件内容的时候,可以看到服务器网站上直接会更改。
当用户访问网页的时候,我们可以看到有文件的安全属性,这里有internet来宾用户,这里有用户权限。也就说用户访问网页的时候是这个用户的操作用户限制。
这里,我们做一个实验,当我们把internet来宾账号的写入权限拒绝。
现在可以看到目录,但是不能写入,拒绝执行权限导致的。
没有执行权限,那么后门是无法执行,所以,实战过程中,有些限制可以绕过,有些不能绕过,那么不能绕过的,也没有办法。
那么,网站一般把image目录执行权限设置为无,因为这个目录不需要执行权限,所以思路是绕过image目录,将放在其他的有脚本执行的目录,放入后门。因为,有脚本的目录必须要有执行权限,因为如果没有执行权限,网站是不能够正常访问的。所以,绕过是有前提条件的,不是什么时候都可以绕过的。当你,不能更改目录,将后门上传到脚本对应的目录,那么自然问题是解决不了的。
注:ip和域名解析WEB源码目录对应存在的安全问题,域名访问对应的是指定目录,ip访问对应的是指定目录的上一级目录(集合类似备份文件目录)
中间件
1.中间件
中间件的识别,只要通过简要的抓一个数据包,根据数据包中,返回的信息就可以看到服务器的版本,及其他相关服务器的信息
2.中间件靶场练习
vulhub.org是一个点对点的漏洞测试,就是说针对某一个漏洞,专门的进行测试和防护,而https://www.vulnhub.com/是一个从信息收集到漏洞发现一个完成的过程。
Docker
Docker类似于虚拟机,为每个应用创建属于自己的虚拟环境,且相互之间不影响。
安装Docker
首先,安装apt install curl # 安装curl插件
安装脚本
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
测试脚本(本步骤未测试)
curl -fsSL https://test.docker.com -o test-docker.sh
sh test-docker.sh
安装Docker-compose
apt install python-pip
pip install docker-compose
获取Vulhub项目
wget https://github.com/vulhub/vulhub/archive/master.zip -O vulhub-master.zip
unzip vulhub-master.zip
cd vulhub-master
注:我最后安装docker是通过sudo apt install docker.io命令安装的,docker-compose第一次就安装成功了。可以通过docker --version查看docker的版本号。安装好docker后,要启动docker服务需要使用service docker start命令,开启服务。
当服务开启后,我们先找到对应的漏洞页面,通过命令,docker-compose up -d开启服务。
练习流程
service docker start //开启docker服务
cd 漏洞路径名 //找到对应的漏洞路径,并进入
docker-compose up -d //开启服务
docker-compose down //删除环境
移除环境
Vulhub中所有环境均为漏洞靶场,在测试结束后,请及时关闭并移除环境,避免被他人恶意利用。
虽然靶场全部运行在Docker中,但大多数恶意软件并不会因为运行在容器中就失去效果!
前面说了,docker-compose会默认根据当前目录下的配置文件启动容器,在关闭及移除环境的时候,也需要在对应目录下。我们执行docker-compose up -d后,不要离开当前目录即可,漏洞测试结束后,执行如下命令移除环境:
docker-compose down
上述命令会执行如下几个动作:
关闭正在运行的容器
删除所有相关容器
移除NAT(docker-compose在运行的时候会创建一个NAT网段)
但不会移除编译好的漏洞镜像,下次再执行docker-compose up -d命令,就不需要再次编译相关镜像了。
引用:https://vulhub.org/#/docs/remove/
当开启服务后,使用这个命令sudo docker-compose config查看当前正在运行的服务器和端口号
sudo docker-compose config
其中,published是映射的端口号,target是网站原来的端口号。这样的话,通过主机的ip地址:8080访问
第一,一般mysql多半php,sql server一般asp,python也有对应的数据库,所以可以根据数据库反推脚本。iis为asp,apache为php,tomcat,jsp。
第二,使用扫描工具,使用谷歌搜索引擎找到脚本类型,抓取网站数据包【phpsession,jspsession】
若是抓包app的数据包,可以通过下载模拟器,之后修改wifi代理,通过burp抓取apk的数据包,这样电脑可能直接访问带不开对应的网页,那是因为电脑和apk的数据包格式不同,这样,服务器是不识别电脑浏览器的发包格式,所以,可以将手机的数据包,直接复制到burp中,更改里面的内容,在发送出去,来实现伪造app的数据包。
一种方法:将手机包中的http头文件字段放到这个软件中,让软件去扫描。
二种方法:通过浏览器插件,更改头文件里面的字段,实现伪造app的数据包
第一个:Apache HTTPD 换行解析漏洞(CVE-2017-15715)
描述:Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。
源代码如下:
<?php
if(isset($_FILES['file'])) {
$name = basename($_POST['name']);
$ext = pathinfo($name,PATHINFO_EXTENSION);
if(in_array($ext, ['php', 'php3', 'php4', 'php5', 'phtml', 'pht'])) {
exit('bad file');
}
move_uploaded_file($_FILES['file']['tmp_name'], './' . $name);
} else {
?>
这里解析php时,将1.php\x0A【\x是十六进制,0A是换行】按照PHP进行解析,但是上传文件的是偶,我们得到文件名字是1.php\x0A,可以发现后缀名是\x0A,没有在列表中出现,所以允许上传。但是apache在解析的时候,将php\x0A按照php解析和执行。
①提交php文件,并且使用burp抓包
②在抓取的包中找到1.php
在1.php加入一个0a即可,这样后缀名不是php,且可以被Apache解析成php
可以先在1.php后面加入一个空格,之后,在空格为20,再将20改成0a,如下
可以成功上传,之后上传完成之后。访问的时候,需要使用1.php%0a,这样就能访问刚才上传成功的文件了。
这里%可能是代码16进制的意思把,这个我也不是很懂。这里的重点不是上传,是上传之后的那个文件后缀名可以利用apache的漏洞解析成php并执行。
你上传到服务器的文件在linux系统通过ls看不到。我感觉可能是docker虚拟出的一个虚拟机,在这个虚拟机进入之后,才能看到。
docker的基本操作
刚才我在最上面进行上传1.php文件,其实都上传到contair中,现在我们需要进入到对应的contair中,才能看到上传的那些文件。
docker ps //当前正在运行docker有哪些
通过上面红色的id来进入docker中
sudo docker exec -it cve-2017-15715_apache_1 bash //通过id进入docker中
可以看到刚才上传到服务器的文件,当我们把contair挂掉,这些信息都会没有了。只剩下了一个image,我们只有通过image来创建contair。
【注:使用docker出错的时候,我们可以在前面加上sudo,那么可以解决大部分的问题】
第二个
Apache HTTPD 多后缀解析漏洞
Apache HTTPD 支持一个文件拥有多个后缀,并为不同后缀执行不同的指令。比如,如下配置文件:
AddType text/html .html
AddLanguage zh-CN .cn
其给.html后缀增加了media-type,值为text/html;给.cn后缀增加了语言,值为zh-CN。此时,如果用户请求文件index.cn.html,他将返回一个中文的html页面。
以上就是Apache多后缀的特性。如果运维人员给.php后缀增加了处理器:
AddHandler application/x-httpd-php .php
那么,在有多个后缀的情况下,只要一个文件含有.php后缀的文件即将被识别成PHP文件,没必要是最后一个后缀。利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞。
启动docker容器,模拟环境
sudo docker-compose up -d
//执行这条命令的时候,首先看本地是否有当前的环境,若是没有环境,则从云端拉取环境
//若是之前已经下载完成了,那么直接启动
Docker启动项目,pull项目失败,不可达
报错描述
docker: error pulling image configuration: Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/a4/a4fdfd462add8e63749aa08ff0044b13d342a042965f1ec6744586cda10dfce9/data?verify=1591601228-BB%2FSFfmL4YVZUUoBsVmYZxIZym4%3D: dial tcp 104.18.121.25:443: i/o timeout.
作者:灭霸_
链接:https://www.jianshu.com/p/7b98b3420926
解决方法:
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com","https://nrbewqda.mirror.aliyuncs.com","https://dmmxhzvq.mirror.aliyuncs.com"]
}
配置docker的image为阿里云下载地址。重启docker服务
systemctl restart docker
我尝试过别的方法,我的这个错误这个问题,可以解决。
①pull镜像,并且启动docker
docker-compose up -d //启动docker
sudo docker ps //查看docker容器的相关信息
运行如下命令启动一个稳定版Apache,并附带PHP 7.3环境:
②首先,这是一个多重后缀名解析漏洞,index.php检查后缀名只能上传图片的后缀,上传后将放入/uploadfiles中,现在病毒已经上传到服务器中。上传后并不会对我们的文件重命名
我们可以通过上传文件名为xxx.php.jpg或xxx.php.jpeg的文件,利用Apache解析漏洞进行getshell。
这是多重域名解析,那么不一定是最后一个后缀是php,只要有一个后缀是php,那么就会被作为php解析。
③通过访问路径中的php.jpeg,那么自然就会被解析称为PHP执行