这里刚入门ctf小白一枚 如果有什么地方说错了或者有待改进的地方欢迎指出喔(-w-

1.签到题

KEY在哪里?

在网页源码里~fn+F12查看网页源码收获flag一枚

2.签到2

打开题目我们看到题目让给我们输入口令:zhimakaimen
可是输入了之后依然报错呢F12看一下网页源代码
在maxlength处限制了我们输入字符的长度 我们将它改成11

重新输入 “zhimakaimen” 获取flag

3.md5 collision

题目中我们已经给出了源码

$md51 = md5('QNKCDZO');
$a = @$_GET['a'];
$md52 = @md5($a);
if(isset($a)){if ($a != 'QNKCDZO' && $md51 == $md52) {echo "nctf{*****************}";
} else {echo "false!!!";
}}
else{echo "please input a";}

1.变量md51的值是字符串“QNKCDZO"经MD5加密后的值
2.变量a以get方式传入
3.md52的值是变量a经md5加密后的密文
4.我们又看到第二个if判断:当a不等于’QNKCDZO’但是a加密后的值要和’QNKCDZO’加密后的值一样 我们才能拿到flag

这里就涉及到一个 php弱类型的题目
参考资料:php 弱类型总结
== 在进行比较的时候,会先将字符串类型转化成相同再比较

如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换成数值并且比较按照数值来进行
我们利用在线加密 可以看到字符串经加密是0e开头的(想到科学计数法) 也就是说它在比较的时候会被转换成0
也就是说只要我们令变量a的值是一个经md5加密后的密文是0e开头的就好了(这样的值在上文给出的链接里面有很多)

4.bypass again

题目中已经给出提示 依旧是弱类型的题目
点开就可以看到页面的源码

if (isset($_GET['a']) and isset($_GET['b'])) {if ($_GET['a'] != $_GET['b'])
if (md5($_GET['a']) == md5($_GET['b']))
die('Flag: '.$flag);
else
print 'Wrong.';
}
解法1:

同3一样,找两个经md5加密后都是0e开头的字符串

解法2:

利用fastcoll生成!
1)新建一个md5.txt文件 写入任意内容
2)在cmd中输入指令:fastcoll_v1.0.0.5.exe -p md5.txt -o md51.txt md52.txt
3)散列值生成中

4)
由于生成的是乱码 我们利用python:

from urllib import parse
result = parse.quote(open('md51.txt','rb').read())
print(result)
result2 = parse.quote(open('md52.txt','rb').read())
print(result2)

5.这题不是web

显然这是一道图片隐写题解法1:利用winhex查看文件被隐藏起来的数据
winhex下载链接
拉到最下面就可以看到我们的flag啦

解法2:直接用记事本打开题目的图片
拉到最下面也能看到flag

6.层层递进

F12查看页面源码 发现可疑路径 SO.html

访问 在网页源码看到可疑路径S0.html

接着访问 看到第三个可疑路径 SO.htm

接着访问 然后看到第四个可疑路径 S0.htm

访问 然后看到可以路径404.html

接着访问该链接 然后查看页面源码 就可以看到flag

7.AAencode

打开题目看到是一串乱码 将页面保存到桌面 打开看看

可以看到是一串颜文字 我们用Firefox浏览器的控制台解码得到flag

8.phpdecode

题目给出一个类似解密器的代码 //从decode看出的(逃

<?php
function CLsI($ZzvSWE) {$ZzvSWE = gzinflate(base64_decode($ZzvSWE));//base64解密for ($i = 0; $i < strlen($ZzvSWE); $i++) {$ZzvSWE[$i] = chr(ord($ZzvSWE[$i]) - 1);//遍历每一个字符输出它的ascii码减一的值}return $ZzvSWE;//只要我们将return改成echo就输出了我们想要的数据}
eval(CLsI("+7DnQGFmYVZ+eoGmlg0fd3puUoZ1fkppek1GdVZhQnJSSZq5aUImGNQBAA=="));//定义一个字符串并返回它经过解密的值
?>

将代码改成如下,并将其存到phpstudy的WWW目录下

<?php
function CLsI($ZzvSWE) {$ZzvSWE = gzinflate(base64_decode($ZzvSWE));for ($i = 0; $i < strlen($ZzvSWE); $i++) {$ZzvSWE[$i] = chr(ord($ZzvSWE[$i]) - 1);}echo $ZzvSWE;}
CLsI("+7DnQGFmYVZ+eoGmlg0fd3puUoZ1fkppek1GdVZhQnJSSZq5aUImGNQBAA==");
?>

打开phpstudy
访问http://127.0.0.1/phpdecode.php 拿到flag

9.文件包含

由题目给出的提示可知这是一道利用LFI文件包含漏洞的问题(也可以从URL的“file=”看出)。
根据题目的意思来到了这个界面

首先我们尝试基本的LFI攻击:使用(…/)或简单地(/)从目录中直接读取文件的内容

似乎看不出什么(挠头
看了一个师傅的博客 博客链接
想到可以利用php伪协议查看经base64加密过后的index.php的源码

http://4.chinalover.sinaapp.com/web7/index.php?file=php://filter/read=convert.base64-encode/resource=index.php


利用base64解码 获取flag

10.COOKIE


BP抓包

将COOKIE改成Login=1即可

11.单身20年

顺着题目的意思来到了这个页面

我们可以看到这时候是跳转到了no_key_is_here_forever.php
但是我们回到原来的页面查看源码 发现它本应该跳转到./search_key.php

利用BP抓包
在HTTP history里面找到访问的记录 获取flag

ps:还有个题目叫“单身一百年也没用“跟这道题做法相同 就不记录啦~

12.MYSQL

根据提示我们访问根目录下的robots.txt文件

TIP:sql.php<?php
if($_GET[id]) {mysql_connect(SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);mysql_select_db(SAE_MYSQL_DB);$id = intval($_GET[id]);//以get方式传入变量id并对其取整$query = @mysql_fetch_array(mysql_query("select content from ctf2 where id='$id'"));//sql查询语句if ($_GET[id]==1024) {echo "<p>no! try again</p>";//限制id不可以等于整数的1024}else{echo($query[content]);//我们想要查询的是id=1024里面的内容}
}
?>

这里给了一个提示:sql.php 说明我们要先进去这个文件
这里我们要说到intval函数有一个特点:1024.0会被认为是整数1024,所以我们只要get一个id变量等于1024.1即可

13./x00

题目直接给了源码

  if (isset ($_GET['nctf'])) {if (@ereg ("^[1-9]+$", $_GET['nctf']) === FALSE)echo '必须输入数字才行';//限制nctf必须由数字组成else if (strpos ($_GET['nctf'], '#biubiubiu') !== FALSE)   die('Flag: '.$flag);//限制nctf中必须有#biubiubiuelseecho '骚年,继续努力吧啊~';}

利用/x00截断正则匹配 获取flag
payload:

?nctf=1%00%23biubiubiu


参考资料:ereg()截断漏洞

14.变量覆盖

截取源码的关键部分进行分析

<?php if ($_SERVER["REQUEST_METHOD"] == "POST") { ?><?phpextract($_POST);if ($pass == $thepassword_123) { ?><div class="alert alert-success"><code><?php echo $theflag; ?></code></div><?php } ?><?php } ?>

这里有一个extract() 函数 将post进去的键值对定义为变量,但是如果原来就存在同名的变量,这个函数会将其覆盖。 也就是说,原来有pass变量和thepassword_123变量并且这两个变量一定是不相等的,新post进去的会将其原来的覆盖掉。
所以我们post两个相等的值 就获取了flag

15.伪装者

题目提示我们要本地访问,也就是我们的ip地址要是127.0.0.1

参考资料:CTF中伪造IP的几种方法

16.上传绕过

题目提示我们要上传文件 我们上传一个一句话木马看看
提示我们要上传的文件类型
上传一张图看看
又说让咱们传php文件(挠头
请教了npy。。他告诉我用00截断试试。。
1)先将上传的文件名改成xx.php.jpg(我这里直接改成muma.php.jpg)
2)上传 抓包
3)在uploads文件夹下添加我们上传的文件名

4)去Hex查看,找到uploads目录下的我们上传的文件名,将.jpg的"."对应的十六进制的值改成00 返回Raw查看 就可以看到原来的.变成了一个小方框,表示我们截断成功,也就是说我们上传的文件可以被识别为.jpg文件但是上传之后是一个.php文件。

5)放包 获取flag

17.pass check

题目已经给出了关键源码

$pass=@$_POST['pass'];
$pass1=***********;//被隐藏起来的密码
if(isset($pass))
{if(@!strcmp($pass,$pass1)){echo "flag:nctf{*}";
}else{echo "the pass is wrong!";
}
}else{echo "please input pass!";
}
?>

大概的意思就是当post进的pass和原先设定的pass1相等输出flag
这里考察的就是一个strcmp函数的漏洞:在5.3版本前,如果传入的不是字符串(比如传入数组),那么会报错,并且return 0,在本题中就输出flag了

18.起名字真难

<?php
function noother_says_correct($number)
{$one = ord('1');$nine = ord('9');for ($i = 0; $i < strlen($number); $i++){   $digit = ord($number{$i});if ( ($digit >= $one) && ($digit <= $nine) ){return false;}}return $number == '54975581388';
}
$flag='*******';
if(noother_says_correct($_GET['key']))echo $flag;
else echo 'access denied';
?>

1.ord()函数:它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值。
2.for循环判断我们传入的变量key是否由数字组成,如果是的话 返回false,不是的话 令参数等于54975581388并返回1,为了绕过这个for循环我们将54975581388转换成十六进制发现是ccccccccc,刚好可以绕过for循环。

19.密码重置

题目要求我们重置的账号是:admin

发现账号名改不了 但是url里面显示了一串bas64加密后的密文

解密之后发现刚好是我们的账号名ctfuser

抓包

我们加密admin

Send to Repeater 改包之后 GO

20.SQL注入1

<?php
if($_POST[user] && $_POST[pass]) {mysql_connect(SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);mysql_select_db(SAE_MYSQL_DB);$user = trim($_POST[user]);$pass = md5(trim($_POST[pass]));$sql="select user from ctf where (user='".$user."') and (pw='".$pass."')";echo '</br>'.$sql;$query = mysql_fetch_array(mysql_query($sql));if($query[user]=="admin") {echo "<p>Logged in! flag:******************** </p>";}if($query[user] != "admin") {echo("<p>You are not admin!</p>");}
}

题目限制我们输入的用户名必须是admin
关键语句:

$sql="select user from ctf where (user='".$user."') and (pw='".$pass."')"

可以用最基本的sql注入:admin’) or 1=1#(密码任意 因为已经被#注释掉了)
原理是这样的:

这里记得一定要加右括号 否则user前面的左括号无法闭合
提交查询

21.SQL注入2

题目已经提示我们考察的是union联合查询。
看看关键代码行:

  $user = $_POST[user];$pass = md5($_POST[pass]);$query = @mysql_fetch_array(mysql_query("select pw from ctf where user='$user'"));if (($query[pw]) && (!strcasecmp($pass, $query[pw]))) {echo "<p>Logged in! Key: ntcf{**************} </p>";}

我们输入的密码经md5加密之后跟数据库中找到的pw比较,如果存在这样的pw并且两者相同的话输出flag
即post : user=‘ union select md5(2)#&pass=2

获取flag

22.SQL Injection

查看页面源代码 关注一下关键代码段

$query='SELECT * FROM users WHERE name=\''.$username.'\' AND pass=\''.$password.'\';';

\是一个转义符 后面加上‘仅仅就是表示一个单引号 不再起闭合作用了。
这样我们能清楚看到这行代码中有四个单引号被转义了。

我们不知道这个数据库中都有那些数据 但是题目要求我们查询到存在的值才能输出flag,所以我们考虑get name=admin\ or 1=1#来进行sql注入。
我们的语句就变成了这样:(为了便于观察 我把转义的单引号先去掉了)

SELECT * FROM users WHERE name='admin\' AND pass=' or 1=1#';

这样我们get一个name变量值为admin’ AND pass= 不管这个变量是否能在数据库中查询到 我们后面执行的恒真句1=1总能让我们成功绕过登陆验证。

22.综合题

将这些个玩意儿复制到控制台执行看看


接着访问

尝试抓包

发现有tip:history of bash
回到一开始 访问:

http://teamxlc.sinaapp.com/web3/b0b0ad119f425408fc3d45253137d33d/.bash_history


./代表当前目录 接着访问

teamxlc.sinaapp.com/web3/b0b0ad119f425408fc3d45253137d33d/flagbak.zip

并下载该压缩包 解压
打开就看到flag了!

CG-CTF web刷题记录相关推荐

  1. BUU WEB刷题记录1(持续更新)

    [MRCTF2020]你传你马呢 打开得到一张晦气的图片和文件上传点 尝试直接上传PHP文件失败(意料之中),随便上传了一张png图片,发现可以,将png文件内容改写成一句话木马<?php @e ...

  2. CG CTF WEB 综合题2

    http://cms.nuptzj.cn/ 题解: MzAzMTY3YWQxZDlmZmUyNGIxOWNjZWI1OWY4NzA3ZmU= base64解密 303167ad1d9ffe24b19c ...

  3. CG CTF WEB 综合题

    http://teamxlc.sinaapp.com/web3/b0b0ad119f425408fc3d45253137d33d/index.php 题解: [][(![]+[])[!![]+!![] ...

  4. CG CTF WEB 这题不是WEB

    http://chinalover.sinaapp.com/web2/index.html 题解: 下载图片 记事本方式打开

  5. CG CTF WEB 签到题

    http://chinalover.sinaapp.com/web1/ 题解: 审查元素 注释

  6. 2021.11.08【web刷题记录】

    SSTI模板注入 模板引擎注入 参考https://www.cnblogs.com/wangtanzhi/p/12238779.html https://blog.csdn.net/m0_551094 ...

  7. CTFShow web入门题刷题记录

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

  8. CTF BugKu平台——Crypto篇刷题记录(后续更新)

    CTF BugKu平台--Crypto篇 前言 抄错的字符: /.- 聪明的小羊: ok: [+-<>]: 把猪困在猪圈里: 你喜欢下棋吗: 小山丘的秘密: EN-气泡: 你以为是md5吗 ...

  9. BUUCTF-2020寒假刷题记录

    BUUCTF-2020寒假刷题记录 Web [RoarCTF 2019]Easy Calc 打开源码,看到calc.php,打开看到源码. 在 num 前面加个空格即可绕过 ? num=phpinfo ...

最新文章

  1. 事务隔离机制原理分析以及是否可以防止订单超卖
  2. 凸现三围的健身运动法
  3. Java基础部分自测题(持续更新)
  4. 使用Powerdesigner的逆向工程生成PDM(主要是注释可以放进去)
  5. SlidingMenu实现侧滑
  6. 广文艺计算机综合美术,广东文艺职业学院2018年第二批合同制人员招聘专业技能考核和试讲题目...
  7. python cookbook 自营_Python Cookbook总结 7-8 章
  8. 《5G新体制天线技术》
  9. 找出两个字符串数组中的相同元素
  10. 50道编程小题目之【判断是一年的第几天】
  11. 知网查重提交论文显示服务器错误,职称论文在进行知网查重时,经常出现的错误有哪些?...
  12. Gnome3桌面美化
  13. 自学-CAD零基础视频教程网站
  14. 用 Python 分析《长安十二时辰》
  15. Matplotlib绘图9种经典风格,你喜欢哪种?
  16. 【养生】【作息】作息+十二时辰养生
  17. Debian8下安装配置PostgreSQL
  18. python lambda函数for 字符串_Python Lambda
  19. 教你用ILMerge来合并dll以及将dll合并进exe文件中
  20. linux中execve函数的用法

热门文章

  1. [编程题] 钓鱼比赛
  2. java自定义监听器例子_Java使用自定义注解实现为事件源绑定事件监听器操作示例...
  3. ConcurrentHashMap源码解析_02 预热(内部一些小方法分析)
  4. 找工作总结-机会往往留给有准备的人
  5. 你该不会也觉得Dubbo参数回调中callbacks属性是用来限制回调次数的吧?
  6. python语法讲解小白入门第一篇
  7. 《中国垒球》:晋级决赛·剑指冠军
  8. 语音转文字软件哪个好用?建议收藏这些软件
  9. 计算渐变色的RGB值
  10. java程序设置开机自启动