ctf-第二弹web安全

395 阅读7分钟

赛制: 个人赛 团队赛 综合渗透

http相关

请求头伪造 burbsuit抓改

x-real-ip和x-forward-for混用

x-real-ip只有一个值

image-20241206094756407 image-20241206094738377 buuoj.cn/users极客大挑战题目node5.buuoj.cn:29089/

第一关查看源代码

第一关查看源代码

image-20241206095137989

第二关

node5.buuoj.cn:29089/Secret.php

image-20241206101132739

右键send to repeater 参数修改, 点击render可以看到渲染页面

image-20241206101059082

refer 从哪个页面跳转过来的referer: Sycsecret.buuoj.cn

user-agent 客户端信息:浏览器头 计算机版本 协议; 浏览器模仿safari-修改位Syclover

第三关

提示只能本地访问 Host:127.0.0.1 or localhost

X-Forwarded-For:localhost (从哪来) X-Real-IP:localhost(这两个都加上去)

得到flag!!!

会话认证

cookie

由于HTTP是无状态协议,所以HTTP协议无法记住客户端信息。Web应用为执行各种有用的功能,应用程序需要追踪每名用户通过不同的请求与应用程序交互的状态。例如,一个购物应用程序允许用户浏览产品目录、往购物车内添加商品、查看并更新购物车内容、结账并提供个人与支付信息。 为实现这种功能,服务端生成一组在用户提交各种请求过程中代表状态的数据,这些数据通常保存在一个叫会话的服务端结构中。常见会话技术包含了cookie与iwt-token。CTF-HUB[web前置技能]

设置setCookie值后

image-20241206095954497

127.0.0.1:8083/Cookie_login.php

f12 application 修改cookie完成模拟登录

JWT-token

JWT令牌验证JSON Web Token: (JWT)是目前前后端分离开发中用户身份认证最流行的一种解决方案1、用户使用用户名和密码来请求服务器进行登录

2、服务器验证用户的登录信息

3、服务器通过验证,生成一个token签名并返回给用户

4、客户端存储token,并在每次验证请求携带上这个token值

5、服务端验证token值,并返回数据

image-20241206101026499

生成一个token签名并返回给用户

答:服务器在生成JWT token时,会将header和payload字符串进行拼接,用.隔开,然后使用一个只有服务器知道的密钥对拼接后的内容进行加密,加密之后生成的字符串就是signature内容。

服务端验证token值(签名验证过程)

当客户端将iwt token传递给服务器之后,服务器首先需要进行签名验证:

1)将客户端传递的jwt token中的header和payload字符串进行拼接,用.隔开

2)使用服务器自己的密钥对拼接之后的字符串进行加密

3)将加密之后的内容和将客户端传递的Jwt token中signature进行对比,如果不一致,就说明jwt token是被伪造的

攻击者在密钥未知的情况下,无法生成signature

正常是payload1.signature

攻击者生成一个错误的payload2.signature

jwt=header1.payload1.signature
header1=base64(header)
payload1=base64(payload)
signature=HS256(header1+payload1)

1、none算法(无签名)

一些JWT库支持none算法,即不使用签名算法。当 alg字段为空时,后端将不执行签名验证。这样的话,只要把signature设置为空(即不添加signature字段),提交到服务器,任何token都可以通过服务器的验证。如下:

{

"alg" : "None" "typ" : "jwt" "user" :"Admin"

} 生成的完整token为: ewOKcSJhbGciDoglk5vbmUiLA0KCSJ0eXAilDoglmp3dcINcn0.ew0KcSJ1c2VyiA6ICJBZG1pbilNCn0(header+’,+payload,去掉了’,+signature字段) 空加密算法的设计初衷是用于调试的,在生产环境中开启了空加密算法,缺少签名算法,wt保证信息不被篡改的功能就失效了。攻击者只需要把alg字段设置为None,就可以在payload中构造身份信息,伪造用户身份。

例题: ctfhub: challenge-347db1346423ecb5.sandbox.ctfhub.com:10800/login.php

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6IjEiLCJwYXNzd29yZCI6IjEiLCJyb2xlIjoiZ3Vlc3QifQ.2Y5_56UX1H_28WxpkOq3eZ6AB-JeyLH-mXwimgwhew8
head eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.
payload: eyJ1c2VybmFtZSI6IjEiLCJwYXNzd29yZCI6IjEiLCJyb2xlIjoiZ3Vlc3QifQ.
signature: 2Y5_56UX1H_28WxpkOq3eZ6AB-JeyLH-mXwimgwhew8

base64解码www.jyshare.com/front-end/6…

{"typ":"JWT","alg":"HS256"}

{"username":"1","password":"1","role":"guest"}

alg的hs256改成none 不需要signature,把signature删了

{"typ":"JWT","alg":"none"}{"username":"1","password":"1","role":"guest"}

再编码

eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn17InVzZXJuYW1lIjoiMSIsInBhc3N3b3JkIjoiMSIsInJvbGUiOiJndWVzdCJ9.

注意需要加.

我这里有点问题 思路是对的

在application的cookie 修改编码后的值得到flag

image-20241206102545061

2.密钥爆破

JWT弱秘钥例题: challenge-bb52ab26bd5b169c.sandbox.ctfhub.com:10800/login.php jwt base64在线生成网站: jwt.io

Web网站信息泄露

  1. 备份文件:这些文件通常是网站管理员为了防止数据丢失而备份的文件,但如果没有删除或保护好,可能被攻击者下载或利用。例如:😳backup.zip、backup.sql、index.bak、admin.rar等。

  2. 源代码文件:这些文件通常是网站的核心代码,包含了网站的逻辑、功能、接口等,如果泄露可能导致网站被分析。例如:index.php、index.jsp、index.asp、main.py等。

  3. 配置文件:这些文件通常包含了网站的一些重要设置,如数据库连接、密码、密钥、路径等,如果泄露可能导致网站被攻击或篡改。例如:😳.php、web.config、database.ini、.htaccess等

  4. 测试文件:这些文件通常是网站开config发过程中用来测试功能或性能的一些文件,如测试数据库连接、测试phpinfo()函数等,如果泄露可能导致网站的配置或环境暴露。例如:😳test.php、test.jsp、test.asp、phpinfo.php等敏感目录/敏感文件

  5. 其他文件:这些文件通常是一些特殊的文件,用来指示搜索引擎或其他客户端如何访问网站的一些规则或信息。例如:

    😳robots.txt(指示搜索引擎哪些目录或文件可以或不可以抓取) 😳crossdomain.xml(指示Flash客户端哪些域名可以或不可以访问) 😳sitemap.xml(指示搜索引擎网站的地图结构) 😳.git(指示Git版本控制系统的信息) 😳.svn(指示SVN版本控制系统的信息)

.git泄露

Git命令学习手册 www.runoob.com/git/git-bas…

网站信息收集工具(Dirsearch): Dirsearch 项目地址:github.com/maurosoria/…

基础用法扫描目录: python3 dirsearch.py -u target.com

.git泄露,.svn信息泄露,.hg信息泄露 版本控制软件会在代码中留下敏感信息,在上传代码时如果没有将g信息删除,就会造成代码密钥等敏感信息泄露。

发现方法: git:通过目录扫描发现.git文件夹或者.git/index文件

svn:通过目录扫描发现.svn/文件夹

利用工具

github.com/lijiejie/Gi…

github.com/BugScanTeam…

github.com/admintony/s…

这个全 : github.com/kost/dvcs-r…

其他常见泄露-利用工具

  1. vim泄露: vim运行编辑文件时会生成.swp文件,在vim正常退出时删除,该文件会泄露代码。如果vim意外退出那么. swp文件会一直保留(意外退出)

    发现方法: 通过目录扫描发现.swp,.swo文件,比如index.php就需要扫描.index.php.swp和.index.php.swoswp和swo的区别是当swp文件存在就会生成swo文件,如果swo也存在就会生成swn文件,以此类推

    利用工具: 在下载了.index.php.swp的文件夹,执行vim-rindex.php

  2. .DS Store泄露: Mac电脑的文件夹会自动生成.DS_Store文件,该文件会记录目录结构导致信息泄露

    发现方法: 通过目录扫描发现.DS_Store文件

    利用工具: github.com/lijiejie/ds…

  3. .project泄露: idea的配置相关文件泄露,这些文件会记录目录结构导致信息泄露 利用工具:github.com/liiieiie/id…

  4. Actuator、api、js 泄露:

    Spring Boot Actuator是 Spring Boot 提供的一个管理和监控应用程序的扩展功能。如果配置不当,Actuator 可能会暴露应用程序的敏感信息(如端点信息、健康检查、配置等)给未经授权的用户或攻击者。微服务负载均衡,需要实时检测服务器是否存活Actuator可以检查服务是否健康,此处容易发生信息泄露

  5. JDumpSpider分析工具:

heapdump泄露: http://120.26.244.93:8081/actuator/heapdumpheapdump

泄露分析工具: github.comwhwlsfb/JDumpSpider

  1. api泄露

    从当前页面js提取地址链接

    image-20241206105918717

  2. source_map泄露

ruanyifeng.com/blog/2013/0…

snipaste

sql注入

二次注入

宽字节注入:GBK

传入:1'

转义:%df%5c%27

解码:成功逃逸

image-20241206152456431

无列名注入:

使用场景: 题目中过滤了information.schema关键字,无法查库查表

在mysql5.6 以上版本,对应 mariadb 10.0以上,mysql数据库中的 indb 增加了 inodb_ index_stats 和 inodb_tabie_stats 两张表,这两张表中都存储了数据库和其数据表的信息,但是不会存储列名。

在mysql5.6 以上版本,对应 mariadb 10.1 以上,mysql新增了sys数据库,该数据库的基础数据也是来自 information-schame,但是 以视图的形式存储,其中schema_auto_increment_columns 存储了数据库名,表名,列名