Unix 子进程创建pipe
最近在学习OSTEP这本书,留个课后习题笔记。
Homework(code):chapter cpu-api
8. Write a program that creates two children, and connects the standard output of one to the standard input of the other, using the pipe() system call.
Code:123456789101112131415161718192021222324252627282930313233343536373839404142434445464748#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <string.h>int main(){ int pi[2]; int p = pipe(pi); // create pipe if (p < 0) { ...
记C++左右位移符号重载
重载左右位移符号用于iostream。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859#include<iostream>using std::cout;using std::cin;class Vector {public : explicit Vector(int size = 1) { this->len = size; v = new int[size]; } ~Vector() { delete v; } int &operator[](int i); friend std::ostream &operator<<(std::ostream &, Vector &); //declare friend frie ...
如何在ZIP压缩炸弹中混入文件?
压缩炸弹在一些攻防场景下可能有一些意料之外的用途
压缩炸弹生成工具:https://github.com/CreeperKong/zipbomb-generator
已知一个压缩炸弹bomb.zip
已知一个需要混入其中的文件,flag
查看zipinfo
目标就是将属性值做到一模一样,这样就不容易被发现。
先修改文件的修改时间
1touch -d "1982-10-08 13:37:00" flag
将flag混入bomb.zip中
1zip -kgjX bomb.zip flag
后记
k代表使用MS-DOS模式/FAT。
g代表在原来的基础上添加文件(末尾添加),而不是重新生成压缩包,不然就会导致压缩炸弹体积变大。
j代表不包含文件的路径
X去除文件extra属性以实现zipinfo中的”b-“
defN 需要在flag中填充一些重复字符,以使用哈夫曼编码,当然,文件体积相似也挺重要,最好填充一些相同字符,将体积填充到与其他文件相同。
zipinfo中的两字符标识如 b- tx bx 需要构造好文件内容,b代表binary,文件中有一些 ...
PVE7.x/Debian11上安装最新版DELL OMSA
近期运维一台服务器(Dell PowerEdge R910),发现没有服务器健康监控面板,运维十分痛苦。于是打算安装Dell官方提供的服务器管理工具。OMSA: Openmanage Server Administrator;PVE: Proxmox Virtual Environment。
原理?安装前的说明。OMSA在Dell官网可以很容易下载到,不过只提供了Windows版本和Redhat(CentOS)版本,而且官方说法,新版OMSA不支持R910(我不信邪),大概是Dell懒得做适配和维护。
网上有许多PVE6.x/Debian10的OMSA的安装教程了,我也就是站在前人的基础上,做个升级的操作。
安装过程就是使用Dell EMC OpenManage Ubuntu and Debian Repositories(官方)源,安装OMSA,不过由于OMSA比较新的版本没有适配Debian,使用这个源(等于使用Ubuntu的源),得事先处理一些依赖的问题。
注:虽然在Debian使用Ubuntu源十分野蛮,不过重点在于结果而不在于过程,只是利用到了这个源的便利性,安 ...
Docker 在CentOS上的坑
CentOS马上要退出历史的舞台了,能换Ubuntu就换Ubuntu吧….
为啥我要维护这老CentOS服务器 :(
CentOS6不能使用docker
Build出问题(在其他电脑上可以build)。官方源docker版本太低。
network无法访问。CentOS的内核版本古老,容易出问题。
解决方案CentOS6早已停止维护,就没啥可说的了。后面两个问题还是可以挽救。2可以通过使用docker-ce源解决。3可以通过更新内核+重启解决。
但是下面还是得额外讲一下问题3的解决办法,更新内核生效需要重启服务器,对于生产环境的服务器并不可以随便重启。
问题3解决方案特征:使用host模式没有问题(必然)。但是使用bridge模式的network,宿主机不能ping通容器,容器也不能ping通宿主机(因特网就更加不可能),但是同个network下的容器可以互相ping。
如上,这是CentOS的内核版本问题。这里讲述的就是不更新内核修复问题的办法。
重建网卡因为内核中的网桥模块加载失败,众所周知docker创建bridge模式的network会创建一个网桥(与服务器的网卡NAT转 ...
Java 一键构建、打包命令
Intellij IDEA一键构建,一键打包虽好,可是不了解编译,打包的过程也是不合理的。
看了网上好多Java构建,打包的命令,感觉有些臃肿与麻烦。于是想投机取巧,试试能不能简单的一条/尽量简单的命令完成目标。
ENV:
OS:Linux/Unix
项目结构:
/project
/src(源代码)
/META-INF
MANIFEST.MF(配置文件)
/com/…
/out(编译结果)
Javac命令Javac:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960➜ ~ javac用法: javac <options> <source files>其中, 可能的选项包括: @<filename> 从文件读取选项和文件名 -Akey[=v ...
PHP收货记录
1:特殊的标记先通过一个题目来认知:
题目截图
这题根据php源码,可以很快了解题目意图。总之就是在一大堆限制中构造payload读取flag。
这个题目,首先要满足$_GET['flag']和$exam字符串长度相等,$exam的长度可以确定。并且,不能通过参数数组绕过。
下面一大堆正则表达式,上面说过,由于存在字符长度的检测(且不能通过数组绕过)所以这里的正则就不能通过数组的方式绕过了。
再下面就是一个eval函数,payload构造的重点就在于此。由于正则表达式的存在,eval中就不能使用PHP函数了。echo等关键方法也被过滤了。
所以这里就引出PHP标记<?=?>的特性了。
PHP 有一个 echo 标记简写 <?=, 它是更完整的 <?php echo 的简写形式。
PHP标记官方文档
于是用这个标记,就能构造出打印$flag的payload了。由于flag字符被过滤了,可以使用字符串操作构造出flag
此题的payload:
1/?flag=$a='xlag';$a{0}='f ...
记一道Nmap webshell获取
题目:https://buuoj.cn/challenges#[网鼎杯 2020 朱雀组]Nmap
简述解题思路
主界面
扫描结果页面
思路很简单,猜测后端php的代码实现类似于<?php system("nmap -xxx '".hostname."'");?> 其中:-xxx指代预先设置的一些nmap参数,hostname是用户输入的IP,前面应该会有对用户输入的hostname进行过滤和检测的代码(然而此题太水,似乎并没有多少限制
所以我们就可以在hostname里进行一些注入操作。
尝试了一些简单的shell语句注入,似乎无果。而且看不到返回的结果,只会弹出“Host maybe down”的提示。也许是被过滤了,shell语句都没有执行的样子。
于是考虑一下nmap有无一些神奇的参数,然后尝试注入一些nmap的参数。
使用Nmap的option -oN
-o[]参数可以将nmap的结果输出到指定的文件中。
测试结果
尝试payload: 127.0.0.1 -oN out.txt
访问out.txt得 ...
QThread多线程踩坑记录。
1.QObject: Cannot create children for a parent that is in a different thread.如上错误信息。一般在执行QObject::moveToThread后的对象运行时发生。原因是:线程中有对象的创建与使用不在同一个线程。就比如说对象A的构造函数中new了一个对象B(A构造函数在主线程,所以B是在主线程创建的),但是在把对象A移动到一个新线程后,再使用对象A中的对象B就会出现上述错误信息。**总结:new和使用必须在同个线程**
因此还有一种出现情况:移动到新线程后的对象,应该使用信号/槽通讯,不应该直接调用槽函数,比如A->func()。因为,直接调用槽函数会在该线程运行函数,而非对象A所在的线程。如果A.func()中存在在A线程new的对象B(出现new B与使用B不在同个线程),根据上面的结论,提示出错。
如果弄不清楚线程的情况,可以使用qDebug()<<QThread::currentThreadId();(header:)来查看。
Jupyter/LaTeX 导出PDF中文问题
Jupyter默认是用xelatex编译生成pdf的。
如果没有配置CJK汉字的字体,就会导致输出的pdf文件中汉字消失或乱码。
解决方案:
首先将notebook导出为tex文件,准备手动编译。
在.tex文件头部添加类似如下的代码:
123\documentclass[11pt]{article} \usepackage{xeCJK} \setCJKmainfont{Noto Sans CJK SC}
注:中文字体可选,不一定是Noto Sans CJK SC,也要注意字体名称和字体文件名不同。如果需要获取字体名称,可以借助其他软件里设置字体查看。
3.运行命令:xelatex xxx.tex