【网络安全】WEB漏洞 pickchu靶场搭建:实例演示sql数字注入、目录遍历漏洞、文件下载漏洞

WEB漏洞01

CTE,SRc,红蓝对抗,实战等

#简要说明以上漏洞危害情况
#简要说明以上漏洞等级划分
#简要说明以上漏洞重点内容
#简要说明以上漏洞形势问题

靶场搭建:https://github.com/zhuifengshaonianhanlu/pikachu

docker环境,我这里使用Ubuntu

[root@oldjiang ~]# docker pull area39/pikachu
[root@oldjiang ~]# docker run -d -p8080:80 area39/pikachu
72ddd9a05d31fdb921765519c413f3f97dbb34560c9c14d9aa59de73e5d6b3eb

在网页上方有初始化按钮,先进行初始化:建立数据库等

【网络安全】WEB漏洞 pickchu靶场搭建:实例演示sql数字注入、目录遍历漏洞、文件下载漏洞_第1张图片

sql注入之数字注入

SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱裤、被删除、甚至整个服务器权限沦陷)。

在构建代码时,一般会从如下几个方面的策略来防止SQL注入漏洞:
1.对传进SQL语句里面的变量进行过滤,不允许危险字符传入;
2.使用参数化(Parameterized Query 或 Parameterized Statement);
3.还有就是,目前有很多ORM框架会自动使用参数化解决注入问题,但其也提供了"拼接"的方式,所以使用时需要慎重!

SQL注入在网络上非常热门,也有很多技术专家写过非常详细的关于SQL注入漏洞的文章,这里就不在多写了。
你可以通过“Sql Inject”对应的测试栏目,来进一步的了解该漏洞。

【网络安全】WEB漏洞 pickchu靶场搭建:实例演示sql数字注入、目录遍历漏洞、文件下载漏洞_第2张图片

在靶机上登录数据库:

#查看运行的容器
crabin@crabin-virtual-machine:~$ docker ps
WARNING: Error loading config file: /home/crabin/.docker/config.json: EOF
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
1b1fa9bf0792        mysql               "docker-entrypoint.s…"   15 minutes ago      Up 15 minutes       0.0.0.0:3306->3306/tcp, 33060/tcp   mysql
567c3230c489        area39/pikachu      "/run.sh"                About an hour ago   Up About an hour    3306/tcp, 0.0.0.0:8080->80/tcp      pedantic_turing

#进入area39/pikachu容器
crabin@crabin-virtual-machine:~$ docker exec -it 567c3230c489 bash
#查看create_mysql_users.sh 
root@567c3230c489:/# vim create_mysql_users.sh 

【网络安全】WEB漏洞 pickchu靶场搭建:实例演示sql数字注入、目录遍历漏洞、文件下载漏洞_第3张图片

也可以在 config.inc.php 文件中查看默认配置

root@567c3230c489:/# ls
app       bin   create_mysql_users.sh  etc   lib    media  opt   root  run.sh  srv               start-mysqld.sh  tmp  var
bd_build  boot  dev                    home  lib64  mnt    proc  run   sbin    start-apache2.sh  sys              usr
root@567c3230c489:/# cd app/inc
root@567c3230c489:/app/inc# ls
config.inc.php  function.php  mysql.inc.php  showvcode.php  uploadfunction.php
root@567c3230c489:#vim config.inc.php 
#登录 root 密码为空 , 
root@567c3230c489:/# vim create_mysql_users.sh 
root@567c3230c489:/# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 26
Server version: 5.7.26-0ubuntu0.18.04.1-log (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


我们在数据库中运行下面语句,我们可以得到users数据表中的数据

mysql> select username, pw from member where id=1 union select username, password from users;
+----------+----------------------------------+
| username | pw                               |
+----------+----------------------------------+
| vince    | e10adc3949ba59abbe56e057f20f883e |
| admin    | e10adc3949ba59abbe56e057f20f883e |
| pikachu  | 670b14728ad9902aecba32e22fa4f6bd |
| test     | e99a18c428cb38d5f260853678922e03 |
+----------+----------------------------------+
4 rows in set (0.00 sec)

利用这个漏洞得到权限用户,SQL注入:

bp抓包:

【网络安全】WEB漏洞 pickchu靶场搭建:实例演示sql数字注入、目录遍历漏洞、文件下载漏洞_第4张图片

【网络安全】WEB漏洞 pickchu靶场搭建:实例演示sql数字注入、目录遍历漏洞、文件下载漏洞_第5张图片

即可

这里我们自己搭建的靶机,我们自己知道数据库中的字段名字和大小,在实际中我们需要先确定目标数据库中的字段

目录遍历漏洞

 在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能便的更加灵活。 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再执行其对应的文件。 在这个过程中,如果后台没有对前端传进来的值进行严格的安全考虑,则攻击者可能会通过“../”这样的手段让后台打开或者执行一些其他的文件。 从而导致后台服务器上其他目录的文件结果被遍历出来,形成目录遍历漏洞。 

在网站根目录创建 xx.php 文件 ,我们在网站中访问这个文件

在这里插入图片描述

【网络安全】WEB漏洞 pickchu靶场搭建:实例演示sql数字注入、目录遍历漏洞、文件下载漏洞_第6张图片

就是这个目录下的文件

【网络安全】WEB漏洞 pickchu靶场搭建:实例演示sql数字注入、目录遍历漏洞、文件下载漏洞_第7张图片

既然这样我们在title后面的传值:…/…/…/…/xx.php 能不能访问到我们的xx.php文件

【网络安全】WEB漏洞 pickchu靶场搭建:实例演示sql数字注入、目录遍历漏洞、文件下载漏洞_第8张图片

在app(根目录)下面创建文件:dir.php



function my_dir($dir) {
        $files = [];
        if(@$handle = opendir($dir)) {
                while(($file = readdir($handle)) !== false) {
                        if($file != ".." && $file != ".") {
                                if(is_dir($dir . "/" . $file)) { //如果是子文件夹,进行递归
                                        $files[$file] = my_dir($dir . "/" . $file);
                                } else {
                                        $files[] = $file;
                                }
                        }
                }
        closedir($handle);
    }
        return $files;
}

echo "
";
$d= $_GET['d'];
print_r(my_dir($d));
echo "
"
;

访问: http://192.168.222.131:8080/dir.php?d=…/app

【网络安全】WEB漏洞 pickchu靶场搭建:实例演示sql数字注入、目录遍历漏洞、文件下载漏洞_第9张图片

可得到全部目录

也可以得到根目录的上级目录 : http://192.168.222.131:8080/dir.php?d=…/lib

【网络安全】WEB漏洞 pickchu靶场搭建:实例演示sql数字注入、目录遍历漏洞、文件下载漏洞_第10张图片

在实际中我们可以通过目录扫描工具得到网站目录结构利用这个漏洞得到我们想要查看的网站目录下的文件,这个文件目录遍历漏洞还是需要和其他漏洞一起才可以发挥更大作用

文件下载漏洞

文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码,将该文件名对应的文件response给浏览器,从而完成下载。 如果后台在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话,则可能会引发不安全的文件下载漏洞。
此时如果 攻击者提交的不是一个程序预期的的文件名,而是一个精心构造的路径(比如../../../etc/passwd),则很有可能会直接将该指定的文件下载下来。 从而导致后台敏感信息(密码文件、源代码等)被下载。 

所以,在设计文件下载功能时,如果下载的目标文件是由前端传进来的,则一定要对传进来的文件进行安全考虑。 切记:所有与前端交互的数据都是不安全的,不能掉以轻心!
你可以通过“Unsafe file download”对应的测试栏目,来进一步的了解该漏洞。

【网络安全】WEB漏洞 pickchu靶场搭建:实例演示sql数字注入、目录遍历漏洞、文件下载漏洞_第11张图片

点击下载时的链接:http://192.168.222.131:8080/vul/unsafedownload/execdownload.php?filename=kb.png

我们可以通过传入filename 的值来下载对应的文件, 如现在来下载我们在app目录(网站根目录)的上级目录下的xx.php:http://192.168.222.131:8080/vul/unsafedownload/execdownload.php?filename=…/…/…/…/xx.php

【网络安全】WEB漏洞 pickchu靶场搭建:实例演示sql数字注入、目录遍历漏洞、文件下载漏洞_第12张图片

在实际中:

某个app下载网站: http://down.znds.com/apk/app/2019/0515/7033.html

【网络安全】WEB漏洞 pickchu靶场搭建:实例演示sql数字注入、目录遍历漏洞、文件下载漏洞_第13张图片

L2Rvd24vMjAyMDA5MjcvZGJzY2pzYl80LjIuM19kYW5nYmVpLmFwaw== 用base64解码:

/down/20200927/dbscjsb_4.2.3_dangbei.apk

而实际的下载地址:
http://113.219.132.41/app.znds.com/down/20200927/dbscjsb_4.2.3_dangbei.apk

这里的就是把实际地址进行加密得到值传入s得到下载地址 如果我们根据目录得到该网站的目录要想得到目录下的某个文件就可以通过 这个目录的地址 再进行base64加密进行下载

你可能感兴趣的:(web安全,安全,php,sql)