CTFweb笔记



本地靶机里的题目笔记

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

传送门

web1

mark

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

mark


web2

mark

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

打开Burp抓包

mark

得到flag


web3

mark

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

使用Burp添加

x-forwarded-for: 127.0.0.1

伪造ip地址

mark

提示不是管理员

尝试把Cookie的isadmin的0改为1

mark

得到flag

mark


web4

mark

御剑扫一下后台

mark

发现.bak文件

mark

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

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

mark

在url后面加上?ver=5.4.41

mark

得到flag

mark


web5

mark

看一下源代码

mark

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

mark

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

mark

得到密码

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

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

mark

输入密码提示这里没有flag

mark

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

mark

base64解码得到

mark

访问这个页面

mark

输入信息留言

mark

提示未登录

抓包看看传输的数据

mark

修改Cookie的lsLogin为1

mark

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

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

mark

mark

以root帐户留言成功

查看响应头

mark

得到flag


web6

mark

代码审计

通过GET传参md5的数值

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

mark

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

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

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

mark


web7

mark

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);

?>

在线运行代码网站

mark

得到flag


web8

mark

查看源代码

mark

发现js文件

在线美化js网站

美化js源代码

mark

美化后发现unescape内有代码

美化unescaoe 内的代码

mark

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

mark

mark

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

mark

mark

base64解码得到

在线base64解码网站

mark

访问解码得到的页面

mark

访问Ch3ck_Au7h.php页面

mark

传入之前得到的账号密码

mark

得到flag


web9

mark

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

mark

空间说说就一条

mark

试试这个密码

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

mark

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

mark

得到flag


web10

mark

查看页面源代码

mark

提示LFI本地文件包含

在提交页面框中输入

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

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

markbase64解码

mark

得到flag


web11

mark

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

mark

打开文件代码审计一下

<!--

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

mark

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

mark

构造序列化userInfo

mark

得到payload

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

mark

mark

传递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

mark

得到flag

web12


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

文章标题:CTFweb笔记

本文作者:亖 玖

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

最后更新:2020-12-16, 17:40:39

原始链接:http://yoursite.com/2020/11/21/CTFweb%E7%AC%94%E8%AE%B0/

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

目录
×

喜欢就点赞,疼爱就打赏