CTFer成长记录——CTF之Web专题·攻防世界—lottery
1.CTFer成长记录——web专题·本地访问网址2.CTFer成长记录——web专题·一句话木马3.CTFer成长记录——Web专题·从cookie中获取信息4.CTFer成长记录——Web专题·双写绕过5.CTFer成长记录——Web专题·robots协议6.CTFer成长记录——Web专题·Linux中的.swp文件7.CTFer成长记录——Web专题·修改页面元素8.CTFer成长记录——Web专题·判断绕过9.CTFer成长记录——CTF之Web专题·初识反序列化10.CTFer成长记录——CTF之Web专题·攻防世界-PHP211. CTFer成长记录——CTF之Web专题·bugku-Simple_SSTI_212.CTFer成长记录——CTF之Web专题·bugku-eval13.CTFer成长记录——CTF之Web专题·bugku-变量114.CTFer成长记录——CTF之Web专题·[ACTF2020 新生赛]Include15. CTFer成长记录——CTF之Web专题·bugku—备份是个好习惯16.CTFer成长记录——CTF之Web专题·攻防世界—easyupload17.CTFer成长记录——CTF之Web专题·攻防世界—fileinclude·好多文件呀18.CTFer成长记录——CTF之Web专题·攻防世界—easyphp19. CTFer成长记录——CTF之Web专题·buuctf—secretfile20.CTFer成长记录——CTF之Web专题·19强网杯—随便注21.CTFer成长记录——CTF之Web专题·攻防世界—file_include22.CTFer成长记录——CTF之Web专题·攻防世界—unseping23.CTFer成长记录——CTF之Web专题·攻防世界—NewsCenter24.CTFer成长记录——CTF之Web专题·极客大挑战 2019—http25.CTFer成长记录——CTF之Web专题·极客大挑战—Upload26.CTFer成长记录——CTF之Web专题·极客大挑战—BabySQL27.CTFer成长记录——CTF之Web专题·攻防世界-Web_python_template_injection28.CTFer成长记录——CTF之Web专题·攻防世界-Web_php_unserialize29.CTFer成长记录——CTF之Web专题·攻防世界-php_rce30.CTFer成长记录——CTF之Web专题·攻防世界-Web_php_include31. CTFer成长记录——CTF之Web专题·buuctf-easy_tornado
32.CTFer成长记录——CTF之Web专题·攻防世界—lottery
33. CTFer成长记录——CTF之Web专题·攻防世界—ics-0534.CTFer成长记录——CTF之Web专题·buuctf—admin35.CTFer成长记录——CTF之Web专题·buuctf—Cookies36. CTFer成长记录——CTF之Web专题·bugku—never_give_up37.CTFer成长记录——CTF之Web专题·[SWPUCTF 2021 新生赛]jicao一、题目链接
https://adworld.xctf.org.cn/challenges/list?rwNmOdr=1691651594927
二、解法步骤
打开网页,这是一个买彩票换flag的网站。题目附件提供了源码:
在网站上探索一番,发现买flag需要9990000R,获得资金的方式就通过buy功能买彩票。
那么我们随便输入一个数字,然后用bp抓包发送到repeater,看看这个彩票的值是不是固定的:
发现中奖号码是8693140,那么把原来的数值修改下,看看行不行:
发现不行,这就说明中奖号码是随机生成的。常规方式行不通,就必须进行代码审计,看看这个buy模块是怎么写的:
源代码中包含几个文件,猜测action:buy可能在api文件中:
function buy($req){
require_registered();
require_min_money(2);
$money = $_SESSION['money'];//接受用户原有money
$numbers = $req['numbers'];//接受输入的数字
$win_numbers = random_win_nums();//生成随机中奖号码
$same_count = 0;//中奖数字的个数
for($i=0; $i<7; $i++){
if($numbers[$i] == $win_numbers[$i]){ //这里是一个弱比较==,如果数组中的值都是true的话,比较永远都是正确的
$same_count++;
}
}
通过审计发现,存在弱比较,那么我们通过抓包,将输入的号码改成数组型,里面的元素全是true,就可以通过比较,得到奖金了:
payload:"numbers":[true,true,true,true,true,true,true]
,这样是数组,之前的""是字符串。
注意,如果中奖号码随机生成的数字中有0,那么true=0是会比较失败的,多尝试几次就能攒够钱买flag了。
然后取account里面看:
最后买下flag:
三、总结
本题的目标是获取足够的钱得到flag,一般是通过抓包修改,如果不行,就需要更进一步进行代码审计等操作,找到漏洞进行利用,从而获取flag。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!