忘记密码了 - bugku

本文解析了一个CTF挑战赛中的步骤,通过分析网站源码、利用编辑器备份文件和理解PHP弱等于特性,最终找到了管理员权限的获取途径。

http://ctf5.shiyanbar.com/10/upload/step1.php

查看源码以后发现有个管理员地址
<meta name="admin" content="admin@simplexue.com" />
邮箱填写该地址,弹出邮件发到管理员邮箱了,你看不到的

随便更换一个邮箱地址,弹出 ./step2.php?email=youmail@mail.com&check=???????
说明存在一个step2.php的文件

查看源码,发现提交的数据提交到了submit.php页面,说明存在一个submit.php页面。
<form action="submit.php" method="GET">
        <h1>找回密码step2</h1>
        email:<input name="emailAddress" type="text" <br />
<b>Notice</b>:  Use of undefined constant email - assumed 'email' in <b>C:\h43a1W3\phpstudy\WWW\10\upload\step2.php</b> on line <b>49</b><br />
value="test@test.com"  disable="true"/></br>
        token:<input name="token" type="text" /></br>
        <input type="submit" value="提交">
</form>

http://ctf5.shiyanbar.com/10/upload/submit.php访问该页面,返回you are not an admin。
因为这是表格提交,所以尝试加入emailAddress值和token值。
http://ctf5.shiyanbar.com/10/upload/submit.php?emailAddress=admin@simplexue.com&token=0,空网页
http://ctf5.shiyanbar.com/10/upload/submit.php?emailAddress=admin@simplexue.com&token=1,返回fail

这里的关键点是首页中的头部信息
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <meta name="renderer" content="webkit" />
    <meta name="admin" content="admin@simplexue.com" />
    <meta name="editor" content="Vim" />
<br />
编辑器editor是vim,当非正常关闭vim时候,会生成一个swp文件,即.submit.php.swp,通过访问确定是否存在这个文件。
http://ctf5.shiyanbar.com/10/upload/.submit.php.swp

可以查看到源码
if(!empty($token)&&!empty($emailAddress)){
    if(strlen($token)!=10) die('fail');
    if($token!='0') die('fail');
    $sql = "SELECT count(*) as num from `user` where token='$token' AND email='$emailAddress'";
    $r = mysql_query($sql) or die('db error');
    $r = mysql_fetch_assoc($r);
    $r = $r['num'];
    if($r>0){
        echo $flag;
    }else{
        echo "失败了呀";
    }
}
要求token值长度是10,email要存在数据库。已知管理员邮箱存在数据库,剩下的就是token值。
据说这里有关于php的弱等于,需要再了解下。

总结这个实验,一是编辑器保存了备份文件,二是弱等于
   

<think>嗯,用户想了解Bugku平台上与普通二维码相关的内容。根据提供的引用内容,我需要整理出解题思路和步骤。首先,题目通常提供一个压缩包,解压后得到二维码图片。用户可能尝试扫描二维码,但得到的可能不是真正的flag,所以需要进一步分析。 接下来,用户可能使用十六进制编辑器(如HxD或010 Editor)检查图片的十六进制数据。在文件末尾可能会发现一串特殊数值,这些数值可能由0-7组成,暗示八进制编码。例如,引用[2]提到数据只有0-7,没有8和9,因此可能是八进制。这时候需要考虑如何转换这些数据。 用户可能尝试将数值分组转换。常见的错误是按两位一组转换,但两位八进制最大是77,对应十进制63,无法覆盖所有ASCII字符。正确的做法是按三位一组,因为三位八进制最大是777,对应十进制511,足够表示扩展ASCII码。引用[3]和[4]都提到三位一组的分组方法,并提供了脚本示例。 然后,将每组八进制转换为十进制,再转为ASCII字符,最终得到flag。例如,引用[4]中的Python脚本展示了如何分割字符串并转换。此外,用户可能需要处理文件末尾的数据,确保正确提取隐藏的字符串。 总结步骤:解压得到二维码,扫描无效后检查十六进制数据,发现末尾的八进制字符串,按三位分组转换,得到flag。需要提醒用户注意分组方式和转换方法,避免常见错误。</think>### 普通二维码解题思路(Bugku平台) 根据引用内容,Bugku平台上的“普通二维码”题目通常涉及以下关键步骤: 1. **文件获取与分析** - 下载压缩包并解压得到二维码图片,常规扫码可能得到无效提示[^1][^2]。 - 使用十六进制编辑器(如HxD、010 Editor)检查文件末尾,发现隐藏的由`0-7`组成的数值段[^3]。 2. **数值特征判断** - 数值仅包含`0-7`,推测为八进制编码(因八进制不含`8`和`9`)[^3]。 - **注意**:若数值总长度为3的倍数(如126位),需按三位分组转换(两位分组会导致数值范围不足覆盖ASCII码表)[^4]。 3. **编码转换** - 将八进制数值按三位分组,转换为十进制,再映射为ASCII字符。 - **示例脚本**(Python): ```python text = "146154141147173110141166145137171060125137120171137163143162151160164137117164143137124157137124145156137101163143151151041175" flag = '' for i in range(0, len(text), 3): flag += chr(int(text[i:i+3], 8)) print(flag) # 输出:flag{Have_y0u_Py_script_OtC_To_Ten_Ascii!} ``` 引用自。 4. **最终输出** - 转换后得到包含`flag`的字符串,格式通常为`flag{...}`。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值