实验吧题目之忘记密码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验吧题目之忘记密码相关的知识,希望对你有一定的参考价值。

题目链接:忘记了密码 http://ctf5.shiyanbar.com/10/upload/
1、进入题目,首先查看源代码
技术分享图片
得到有用信息,邮箱地址[email protected]和代码编写工具vim

2、这些线索肯定不够的,不如输入一个字符串测试一下
技术分享图片

3、里面提到个step2.php的文件,我们访问一下这个文件内容
技术分享图片
发现当我们在访问step2.php的时候,url自动跳转到原来的页面,我们想看看step2.php给的回应。

4、用BP抓包
技术分享图片
这页源码是获取数据的一个表单,将获取的数据传递给submit.php,获取的内容是email和token。或许我们这里可以猜到email是我们先前在网页源码中的邮箱地址,但是我们不知道token的值应该是多少。
我们知道在http请求的时候,先将数据读取,应该就是step1.php界面,然后就是处理数据,而step2.php将get获取到的值转交到了submit.php,所以这个文件中指定有判断token值的方法。

5、我们先来访问一下submit.php。
技术分享图片
提是不是管理员,但是线索应该就在这个文件中,但又没有权限访问。
我们知道这个文件使用vim编辑的,这里有一个特性,在编辑的过程中都会产生一个后缀为.swp的隐藏文件我们访问一下有没有这个文件

6、访问.swp的隐藏文件
技术分享图片
果然存在,并显示出了处理数据的源代码

7、我们分析源代码,
Empty()函数判断一个变量是否被认为空值
Strlen()函数计算字符串的长度
mysql_fetch_assoc()函数从结果集中取得一行作为关联数组
这串代码首先判断token的长度是不是等于10,并且token的值也必须等于0,否则都会输出错误,这也给了我们构造token的线索。
然后,通过sql count()语法指定列的数目,count(*)返回表中所有的记录数,如,有三条记录返回3,as num,将返回的值给一个新建的列名num。
技术分享图片
我们从step2.php中得知需要传递两个参数,emailAddress和token,已经有了邮箱地址,只需要算出token就可以。
这里也给出了token的判断条件,值必须等于0,并且长度是10,常规是没有这样的数的,但是我们可以构造,十个零0000000000,这样不就长度是10啦。
最后构造出参数[email protected]&token=0000000000

8、将参数传递给submit.php便可得到flag
技术分享图片

以上是关于实验吧题目之忘记密码的主要内容,如果未能解决你的问题,请参考以下文章

实验吧:忘记密码了

centos忘记root密码,重新设置的方法

修复initramfs文件及忘记root密码的解决之道

Redhat Linux忘记用户名和密码怎么办??

oracle之修改/忘记用户密码

mysql 忘记密码