CTFweb笔记



本地靶机里的题目笔记

如果地址不可访问请联系我开启映射

传送门

web1

右击查看页面源代码发现flag


web2

打开发现index.php被重定向到index.html

打开Burp抓包

得到flag


web3

只允许通过本地地址进行访问

使用Burp添加

x-forwarded-for: 127.0.0.1

伪造ip地址

提示不是管理员

尝试把Cookie的isadmin的0改为1

得到flag


web4

御剑扫一下后台

发现.bak文件

GET传参ver等于php版本号得flag

php版本号可以通过查看响应头获得

在url后面加上?ver=5.4.41

得到flag


web5

看一下源代码

提示password.txt 查看一下这个文件

复制这个字典用Burp爆破看看

得到密码

在网页输入密码发现最多只能输入五位

按F12调出开发者工具在查看器修改maxlength=”5”删除5即可解除输入限制

输入密码提示这里没有flag

查看源代码没发现什么提示,查看响应头发现一串Cookie数值

base64解码得到

访问这个页面

输入信息留言

提示未登录

抓包看看传输的数据

修改Cookie的lsLogin为1

留言成功,但提示没有权限访问

抓包修改userlevel字段的guest更改为root

以root帐户留言成功

查看响应头

得到flag


web6

代码审计

通过GET传参md5的数值

传参的数值不能等于240610708并且传参的md5值要与240610708的md5值相等

PHP接收0e在比较的时候会将其视作为科学计数法,所以无论0e后面是什么,0的多少次方还是0。所以我们只需要输入一个数字和字符串进行MD5加密之后都为0e的即可得出答案。

240610708的md5值是0e开头的所以传参一个md5值0e开头的数值即可绕过

0e开头的md5和原值:
QNKCDZO
0e830400451993494058024219903391
240610708
0e462097431906509019562988736854
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469


web7

PHP代码审计

要求解密加密的代码

解密脚本如下

<?php
$s='=pJovuTsWOUrtIJZtcKZ2OJMzEJZyMTLdIas';
function unencode($str){
  $o='';
  $a=base64_decode(strrev(str_rot13($str)));
  echo $a."\n";
  //$a=str_rot13(strrev(base64_decode($str)));
  //echo strlen($a);
  for ($i=0;$i<strlen($a);$i++){
    $bbb = substr($a,$i,1);
    //echo $bbb.'\n';
    $ddd=ord($bbb)-1;
    $l=chr($ddd);
    //echo $l.'\n';
    $o=$o.$l;
  }
  echo strrev($o);
}
unencode($s);

?>

在线运行代码网站

得到flag


web8

查看源代码

发现js文件

在线美化js网站

美化js源代码

美化后发现unescape内有代码

美化unescaoe 内的代码

将js的判断语句和数值放在控制台运行得出账号密码

继续美化得到的unescaoe内的代码里的unescape里的代码

base64解码得到

在线base64解码网站

访问解码得到的页面

访问Ch3ck_Au7h.php页面

传入之前得到的账号密码

得到flag


web9

查找QQ然后访问空间要求输入生日,输入提示的生日

空间说说就一条

试试这个密码

输入密码发现无法输入,F12查看源代码

删掉readonly=””就可以输入了

得到flag


web10

查看页面源代码

提示LFI本地文件包含

在提交页面框中输入

php://filter/read=convert.base64-encode/resource=index.php

利用LFI来查看base64加密的源码

base64解码

得到flag


web11

信息收集时发现.swp文件泄露。直接访问

打开文件代码审计一下

<!--

function clear($string){
  //这是过滤函数哦~
}


$userInfo = @unserialize($_REQUEST['userInfo']);

$query = 'SELECT * FROM users WHERE id = \''.clear($userInfo['id']).'\' AND password = \''.clear($userInfo['pass']).'\';';

$result = mysql_query($query);
if(!$result || mysql_num_rows($result) < 1){
    die('Invalid password!');
}

$row = mysql_fetch_assoc($result);
foreach($row as $key => $value){
    $userInfo[$key] = $value;
}

$oldPass = @$_REQUEST['oldPass'];
$newPass = @$_REQUEST['newPass'];
if($oldPass == $userInfo['password']){
    $userInfo['password'] = $newPass;
    $query = 'UPDATE users SET pass = \''.clear($newPass).'\' WHERE id = \''.clear($userInfo['id']).'\';';
    mysql_query($query);
    echo 'Password Changed Success.<br>';
}
else{
    echo 'Invalid old password entered.';
}
-->

反序列化userInfo这个传参变量通过userInfo查询变量里的id和pass

查看页面的cookies可以得到id和加密过的pass

将pass数值base64解密在md5解密得出未加密的密码20151231

构造序列化userInfo

得到payload

a:2:{s:2:"id";s:1:"3";s:4:"pass";s:8:"20151231";}

传递oldPass和newPass使oldPass和pass相等

构造oldPass=20151231&newPass=123456

最终payload

a:2:{s:2:"id";s:1:"3";s:4:"pass";s:8:"20151231";}&oldPass=20151231&newpass=123456

得到flag

web12


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1012482327@qq.com

文章标题:CTFweb笔记

本文作者:亖 玖

发布时间:2020-11-21, 08:48:43

最后更新:2022-11-02, 15:48:59

原始链接:https://sijiu.ren.com/2020/11/21/CTFweb%E7%AC%94%E8%AE%B0/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏