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
在网页上方有初始化按钮,先进行初始化:建立数据库等
SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱裤、被删除、甚至整个服务器权限沦陷)。
在构建代码时,一般会从如下几个方面的策略来防止SQL注入漏洞:
1.对传进SQL语句里面的变量进行过滤,不允许危险字符传入;
2.使用参数化(Parameterized Query 或 Parameterized Statement);
3.还有就是,目前有很多ORM框架会自动使用参数化解决注入问题,但其也提供了"拼接"的方式,所以使用时需要慎重!
SQL注入在网络上非常热门,也有很多技术专家写过非常详细的关于SQL注入漏洞的文章,这里就不在多写了。
你可以通过“Sql Inject”对应的测试栏目,来进一步的了解该漏洞。
在靶机上登录数据库:
#查看运行的容器
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
也可以在 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功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能便的更加灵活。 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再执行其对应的文件。 在这个过程中,如果后台没有对前端传进来的值进行严格的安全考虑,则攻击者可能会通过“../”这样的手段让后台打开或者执行一些其他的文件。 从而导致后台服务器上其他目录的文件结果被遍历出来,形成目录遍历漏洞。
在网站根目录创建 xx.php 文件 ,我们在网站中访问这个文件
就是这个目录下的文件
既然这样我们在title后面的传值:…/…/…/…/xx.php 能不能访问到我们的xx.php文件
在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
可得到全部目录
也可以得到根目录的上级目录 : http://192.168.222.131:8080/dir.php?d=…/lib
在实际中我们可以通过目录扫描工具得到网站目录结构利用这个漏洞得到我们想要查看的网站目录下的文件,这个文件目录遍历漏洞还是需要和其他漏洞一起才可以发挥更大作用
文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码,将该文件名对应的文件response给浏览器,从而完成下载。 如果后台在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话,则可能会引发不安全的文件下载漏洞。
此时如果 攻击者提交的不是一个程序预期的的文件名,而是一个精心构造的路径(比如../../../etc/passwd),则很有可能会直接将该指定的文件下载下来。 从而导致后台敏感信息(密码文件、源代码等)被下载。
所以,在设计文件下载功能时,如果下载的目标文件是由前端传进来的,则一定要对传进来的文件进行安全考虑。 切记:所有与前端交互的数据都是不安全的,不能掉以轻心!
你可以通过“Unsafe file download”对应的测试栏目,来进一步的了解该漏洞。
点击下载时的链接: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
某个app下载网站: http://down.znds.com/apk/app/2019/0515/7033.html
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加密进行下载