资讯动态

bugku-web题目

发布时间:2026/10/13 10:11:28 来源:尧图企业网站定制
1.好像没有密码这个题目还是使用burpsuite来进行爆破密码因为题目说了密码是五位纯数字所以直接设置为numbers范围是10000-99999。只有在pwd12468时候显示长度与其他不一致因此密码是12468输入得到flag。2.好像需要管理员首先使用diresreach -u 网址进行扫描访问之后发现还是需要访问另外的文件之后使用burpsuite进行爆破密码即找到flag。3.备份是个好习惯首先还是继续扫描发现有两个文件可以访问访问index.php.bak文件以后可以看到该文件根据该代码的意思拼接url之后得到flag:4.管理员系统查看源代码之后看到这个注释使用base64解码之后出现得到test23之后使用admin,与test123来进行登录后进行抓包在头上添加这个头便可拿到flag,服务端是靠X-Forwarded-For这类 HTTP 头来判断客户端来源 IP 的。这个头本来是给反向代理用来记录真实客户端 IP的但它是客户端可控的——如果服务端直接信任它、不加校验你就可以随便填。把值写成127.0.0.1服务端就以为请求来自本机于是放行。这也正是这题的核心考点信任了客户端可控的请求头。5.网站被黑还是先使用direserach来进行扫描结束以后看到有一个文件能访问6.变量1-本质是构造payload-?是参数开始的标记args是参数的名字两者缺一不可7.原理是$GLOBALS 为什么能兜住一切$GLOBALS 是 PHP 自带的一个超全局数组它的键是变量名值就是那些变量本身。换句话说它是当前全局作用域里所有变量的总索引。而include flag1.php是在顶层执行的flag1.php 里定义的 $flag 就活在全局作用域里 → 它必然出现在 $GLOBALS 里。同时 $GLOBALS 是 PHP 永远存在的内置变量不管你 include 的文件里变量叫什么名字它都能命中。所以你不用猜名字一次就能把 flag 变量连同它的真名一起倒出来。7.前女友首先还是使用访问源代码访问code.txt文件8.game1对于这个题目先让游戏结束进行抓包之后改掉score与sign后发送便会得到flag。score3000是一个门槛。9.秋名山车神-对于本题目来说直接写python代码直接算因为网页2s刷新一次手算不可能import re import time import requests url http://160.202.254.160:11386/ # ← 换成题目实际地址 s requests.Session() # 关键同一个会话 t0 time.time() # 1) 取页面 r s.get(url) print(GET 状态码:, r.status_code) print(Cookie:, s.cookies.get_dict()) print(页面片段:, repr(r.text[:300])) # 看看有没有内容、是不是被墙了 # 2) 提取算式 m re.search(r(\d\s*[\-*]\s*)\d, r.text) print(正则匹配到:, m.group() if m else None) if not m: raise SystemExit(没提取到算式先看上面的『页面片段』) expr m.group().replace( , ) ans eval(expr) print(算式:, expr, → 答案:, ans) # 3) 立刻提交 resp s.post(url, data{value: str(ans)}) print(POST 状态码:, resp.status_code) print(提交总耗时: %.3f 秒 % (time.time() - t0)) # 4) 把响应全文和 flag 都打出来 print(---- POST 响应全文 ----) print(resp.text) hit re.search(rflag\{[^}]*\}, resp.text) print(---- 提取结果 ----) print(FLAG:, hit.group() if hit else 响应里没有 flag{...}) input(按回车退出...)使用该段代码直接找到flag。10.速度要快import requests import base64 url http://114.67.175.224:19603/ # 你的网站 request requests.Session() # 建立session连接 resp request.get(url) # 访问 str1 base64.b64decode(resp.headers[flag]) # 获取flag内容 str1 str1.decode() # 转换格式把byte转成str flag1 base64.b64decode(str1.split(:)[1]) # 取后面的内容 data {margin: flag1} print(request.post(url, data).text) # 发送post数据并得到结果11.这是一张单纯的图片看到后直接使用Hdx,看到后面应该是unicode编码解码后找到key12.never give up查看网页源代码发现1p.html被注释掉了所以直接访问用burpsuite来抓包使用该网站来解码Unicode编码转换 - 站长工具,url解码将下边注释的代码再用base64解码再继续使用url解码得到一段代码;if(!$_GET[id]) { header(Location: hello.php?id1); exit(); } $id$_GET[id]; $a$_GET[a]; $b$_GET[b]; if(stripos($a,.)) { echo no no no no no no no; return ; } $data file_get_contents($a,r); if($databugku is a nice plateform! and $id0 and strlen($b)5 and eregi(111.substr($b,0,1),1114) and substr($b,0,1)!4) { $flag flag{***********} } else { print never never never give up !!!; } ?根据该段代码写一个python代码拿到flag:import requests url http://你的靶场地址/hello.php r requests.get(url, params{id: 0xg, a: php://input, b: \x0012345}, databugku is a nice plateform!) print(r.text)对于该payload构造基础课 1这些参数是怎么传到 PHP 的你在浏览器地址栏输入http://xxx.com/hello.php?id1aphp://inputb123?后面这一段叫查询字符串格式是名字值多个用连接。PHP 收到后会把它们装进一个叫$_GET的数组里$_GET[id] // 值是 1 $_GET[a] // 值是 php://input $_GET[b] // 值是 123注意两件事$_GET里的值永远是字符串。哪怕你写id1拿到的也是字符串1不是数字 1。除了放在 URL 里的$_GET还有一种叫POST数据放在请求体里浏览器看不到F12 才能看到。PHP 用$_POST接收。这道题的a、b、id都是 URL 参数所以都用$_GET取。基础课 2PHP 里的真和假这一节是理解第一道关卡的钥匙。PHP 里每个值都有真假属性。下面这些算假值说明空字符串0字符串0也是假← 这道题的关键0/0.0数字零null空false假[]空数组除此之外的一切字符串都是真比如1、abc、0xg、 空格。前面那个!是取反真的是假、假的是真。所以看这一行if(!$_GET[id]) { header(Location: hello.php?id1); // 跳转 exit(); // 退出 }翻译成人话如果 id 是假值就把你踢走。于是你传的 id$_GET[id]真假!之后结果没传null假真❌ 被踢走id00假真❌被踢走id11真假✅ 通过idabcabc真假✅ 通过id0xg0xg真假✅ 通过记住这个结论id0会被踢走idabc不会。很多人第一反应就是填 0结果被跳到hello.php?id1一脸懵。基础课 3弱类型比较第一个核心什么是弱类型在 PHP 里两个类型不同的值用比较时PHP 会自动帮你转换然后再比。这就是弱类型。对比一下写法名字行为松散比较类型不同时自动转换再比严格比较类型和值都必须一样不转换举个你在 JS 里可能见过的类似例子0 false是true。PHP 一样。关键字符串 → 数字怎么转当字符串和数字用比较时PHP 会把字符串转成数字字符串转成数字后12312312abc12读到不能读为止abc0完全读不出数字就当 00xg00e1230科学计数法看最后几行——转不了的字符串一律变成 0。所以$id 0翻译成人话是id 转成数字后等于 0而不是id 必须是 0。传的 id转成数字$id 0成立吗第2关!id会踢人吗综合00✅ 成立❌会踢人❌ 过不了11❌ 不成立OK❌ 过不了abc0✅ 成立OK✅过了0xg0✅ 成立OK✅过了这就是这道题第一个刁难点出题人故意让非空和等于0互相矛盾正常值做不到而弱类型让你用一个读不出数字的字符串同时满足两个条件。基础课 4读文件 与 php:// 伪协议第二个核心file_get_contents 是干嘛的$data file_get_contents(keys.txt);意思是把 keys.txt 这个文件的内容读出来存到 $data 里。这是 PHP 最常用的读文件函数。题目要求 $data 必须等于bugku is a nice plateform!。但服务器上根本没有这么一个内容正好是这句话的文件所以正常读写不出来。什么叫伪协议关键点来了file_get_contents()的第一个参数不一定是文件名它还可以是一串协议地址。就像浏览器地址栏你能输http://、ftp://、file://一样PHP 内部也支持一堆协议其中php://开头的是 PHP 特有的协议作用php://input读取 POST 请求的原始内容php://filter读文件时做编码转换data://直接从 URL 里读数据file://读本地文件http://从网上抓php://input是这道题的钥匙它返回的就是你 POST 过去的那段文本。$a php://input; $data file_get_contents($a); // ← $data 就等于你 POST 的内容所以你 POST 一句话bugku is a nice plateform!$data 就等于这句话了。✅顺带说data://text/plain,bugku is a nice plateform!也能达到同样效果但它包含点号会被下面这个检查拦住所以只能选php://input。再看那个不能有点的检查if(stripos($a,.)) { echo no no no no no no no; return; }stripos($a, .)在 $a 里找.这个字符找到就返回它的位置。找不到 → 返回false假→ 不拦你 ✅找到了 → 返回位置数字真→ 拦住你 ❌php://input里一个点都没有 → 放行 ✅基础课 5正则匹配 与 空字节截断第三个核心什么是正则正则就是描述一类字符串的模板。比如模板12可以匹配12模板\d可以匹配任意一串数字。eregi(模式, 字符串)就是拿模式去字符串里找找到就返回成功找不到返回失败。特别注意它是包含就算成功不是要完全相等。举例模式字符串结果11141114✅ 找到1111114✅也能找到1114里就包含1119991114❌ 找不到这道题的正则条件eregi(111.substr($b,0,1), 1114) and substr($b,0,1) ! 4拆开看substr($b, 0, 1)取 $b 的第 1 个字符从第 0 位开始取 1 个模式 111拼上 b 的首字符字符串 1114所以要求是用111XX b 的首字符这个模式去匹配1114要匹配成功但 X 又不能是4。矛盾点在哪试一下b 的首字符 X模式能匹配1114吗X ! 4 吗综合41114✅ 能❌ X 就是 4❌11111❌ 不能✅❌a111a❌ 不能✅❌\x00111\x00✅ 能见下✅✅过什么是空字节截断\x00就是一个空字节数值为 0 的字节ASCII 里的 NUL肉眼看不见但确实是 1 个字节。关键背景ereg/eregi这两个函数是用 C 语言写的。而在 C 语言里字符串是用\x00表示**到此结束**的。所以当模式是111\x00时C 读到\x00以为字符串完了实际用的是111模式 111\x00 →被截断→ 111而111能匹配1114✅同时\x00又不等于4✅ ——两个条件同时满足这就是所谓的空字节截断漏洞PHP 5 时代的经典问题。最后一个细节为什么要写成%00你不能真的往 URL 里塞一个原始的空字节——HTTP 请求会在那里被截断服务器收不到后面的内容请求直接失败。所以要用URL 编码空字节写成%00。b%0012345服务器收到后会解码回\x0012345——开头是空字节后面还有 12345 凑长度因为要求strlen($b) 5所以要够 6 位以上。最后把三关串起来现在回头看那五个条件你应该都能对上了条件用到的基础知识怎么过!$_GET[id]不能成立真假值0是假别用 0用0xg$id 0弱类型比较0xg转数字是 0stripos($a,.)要假字符串查找用php://input无点号$data bugku is...伪协议POST 请求体放这句话eregi(...)且首字符 ≠ 4正则 空字节截断b%0012345拼起来就是13.你从哪里来-Refer请求头的作用就是告诉服务器“我是从哪个页面点过来的”14.成绩查询首先手动注入输入11’1‘#都有回显然后用Burp抓包将文件下载下来req.txt然后使用该命令来找到数据库名称查看skctf下面的表查看表里的内容,找到flag:15.shell继续查看,找到flag

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑