WriteUp1题目信息解题思路打开页面是一个登录页面源码审计发现是个 form 表单提交抓包随便填写个密码提交观察右键发送到重放器点击发送观察响应结果发现有个 success.php 的页面根据 JS 代码的 window.location.href 后面的地址知道应该是访问服务器根路径下的 success.php 文件并携带查询参数code 不等于 bugku10000 它才会走到 else它来帮我们跳转到 success.php 并携带一个 code所以猜测当账户密码正确时会返回一个正确的code错误时会返回bugku10000猜测代码如下?php // 获取提交的账号和密码 $username $_POST[username]; // 假设表单字段名为username $password $_POST[password]; // 假设表单字段名为password // 验证逻辑 - 实际中可能是查询数据库 $isValid false; // 这里是实际的验证过程比如查询数据库比对账号密码 // if (查询数据库验证成功) { // $isValid true; // } // 根据验证结果设置不同的code if ($isValid) { // 账号密码正确生成一个有效的code $code generateValidCode(); // 生成类似hacker1000的有效code } else { // 账号密码错误设置错误code $code bugku10000; } // 输出HTML页面包含生成的code ? !DOCTYPE html html head meta charsetutf-8 title登录检测/title meta namerenderer contentwebkit meta http-equivX-UA-Compatible contentIEedge,chrome1 meta nameviewport contentwidthdevice-width, initial-scale1, maximum-scale1 link relstylesheet hreflayui/css/layui.css mediaall style /style /head body div idddiv script var r {code: ?php echo $code; ?} if(r.code bugku10000){ console.log(e); document.getElementById(d).innerHTML Wrong account or password!; }else{ console.log(0); window.location.href success.php?coder.code; } /script /body /html所以要爆破出来正确的密码让 check.php 判断账号密码正确了才能有对的 code所以使用密码字典开始尝试题目中提示弱密码T1000以z开头把 z 开头密码挑出来然后在 burpsuite 里爆破 check.php 看结果f open(中国网民-弱密码字典 T1000.txt, r) # 文件名换成自己实际的 wf open(以z开头的密码.txt, w) str f.read() list str.split(\n) for item in list: if item.startswith(z): print(item) wf.write(item \n)结果如下拿着新字典去爆破试试密码右键发送到Intruder添加payload导入字典点击开始攻击发现响应的 length 全都一样长已知 bugku10000 是不对的而且刚才的 JS 代码告诉我们只要 code 的值不是 bugku10000就会走 success.php 了所以让 burpsuite 筛选下字符里不包含 bugku10000 的其他 code 值。或者一个一个点击查看每个密码的响应结果看哪一个返回的code不是 bugku10000。这里发现当密码为zxc123时返回结果不是bugku1000当然如果密码有很多的话显然一个一个查看太费时间应该筛选下字符里不包含 bugku10000 的其他 code 值点击设置找到检索匹配勾选响应匹配的项填写查找的字符串点击添加开始爆破观察特殊的 code 列发现最后一个返回结果不一样页面中输入密码zxc123使用工具Burp SuitePycharm弱密码T1000Flagflag{94a3caa988cc28971f5d61c33c206e56}总结通过本题学到抓包爆破查找匹配
Bugku-web(bp)
WriteUp1题目信息解题思路打开页面是一个登录页面源码审计发现是个 form 表单提交抓包随便填写个密码提交观察右键发送到重放器点击发送观察响应结果发现有个 success.php 的页面根据 JS 代码的 window.location.href 后面的地址知道应该是访问服务器根路径下的 success.php 文件并携带查询参数code 不等于 bugku10000 它才会走到 else它来帮我们跳转到 success.php 并携带一个 code所以猜测当账户密码正确时会返回一个正确的code错误时会返回bugku10000猜测代码如下?php // 获取提交的账号和密码 $username $_POST[username]; // 假设表单字段名为username $password $_POST[password]; // 假设表单字段名为password // 验证逻辑 - 实际中可能是查询数据库 $isValid false; // 这里是实际的验证过程比如查询数据库比对账号密码 // if (查询数据库验证成功) { // $isValid true; // } // 根据验证结果设置不同的code if ($isValid) { // 账号密码正确生成一个有效的code $code generateValidCode(); // 生成类似hacker1000的有效code } else { // 账号密码错误设置错误code $code bugku10000; } // 输出HTML页面包含生成的code ? !DOCTYPE html html head meta charsetutf-8 title登录检测/title meta namerenderer contentwebkit meta http-equivX-UA-Compatible contentIEedge,chrome1 meta nameviewport contentwidthdevice-width, initial-scale1, maximum-scale1 link relstylesheet hreflayui/css/layui.css mediaall style /style /head body div idddiv script var r {code: ?php echo $code; ?} if(r.code bugku10000){ console.log(e); document.getElementById(d).innerHTML Wrong account or password!; }else{ console.log(0); window.location.href success.php?coder.code; } /script /body /html所以要爆破出来正确的密码让 check.php 判断账号密码正确了才能有对的 code所以使用密码字典开始尝试题目中提示弱密码T1000以z开头把 z 开头密码挑出来然后在 burpsuite 里爆破 check.php 看结果f open(中国网民-弱密码字典 T1000.txt, r) # 文件名换成自己实际的 wf open(以z开头的密码.txt, w) str f.read() list str.split(\n) for item in list: if item.startswith(z): print(item) wf.write(item \n)结果如下拿着新字典去爆破试试密码右键发送到Intruder添加payload导入字典点击开始攻击发现响应的 length 全都一样长已知 bugku10000 是不对的而且刚才的 JS 代码告诉我们只要 code 的值不是 bugku10000就会走 success.php 了所以让 burpsuite 筛选下字符里不包含 bugku10000 的其他 code 值。或者一个一个点击查看每个密码的响应结果看哪一个返回的code不是 bugku10000。这里发现当密码为zxc123时返回结果不是bugku1000当然如果密码有很多的话显然一个一个查看太费时间应该筛选下字符里不包含 bugku10000 的其他 code 值点击设置找到检索匹配勾选响应匹配的项填写查找的字符串点击添加开始爆破观察特殊的 code 列发现最后一个返回结果不一样页面中输入密码zxc123使用工具Burp SuitePycharm弱密码T1000Flagflag{94a3caa988cc28971f5d61c33c206e56}总结通过本题学到抓包爆破查找匹配