zoukankan      html  css  js  c++  java
  • 《黑客大曝光》实践部分——sql注入(7/8)

    SQL注入实践

    由于《黑客大曝光》中涉及到形形色色的攻击方式,从软件到硬件,甚至还有物理锁的开锁教程,当中的很多教程很有趣,但是我没有相关的环境,实践起来不好操作,比如说,查点扫描我还可以查找到一些东西,但是真的做到攻击这一步,很多操作就不太好执行了,虽说攻击成功的概率不大,但是万一成功了,是否违法也是个问题。所以,我想从相关的实验网站上找一些配置好的环境做一下相关的实验。

    这次我选择了,书中提高的sql注入攻击进行尝试,我在实验楼里,找到了一个实验环境,进行12关的sql注入闯关。

    一、环境搭建

    启动mysql:

    sudo mysqld_safe 
    注意启动后程序不会退出,可以打开新的终端执行后续命令。

    启动Apache:

    sudo service apache2 start
    
    密码:dees
    

    配置DNS:

    sudo vim /etc/hosts

    配置网站文件:

    sudo vim /etc/apache2/conf.d/lab.conf
    sudo service apache2 restart  重启服务
    

    lab.conf文件代码:

    <VirtualHost *>   
    ServerName http://www.sqllabcollabtive.com   
    DocumentRoot /var/www/SQL/Collabtive/     
    </VirtualHost>   
    

    访问测试:

    http://www.sqllabcollabtive.com 图片描述信息

    用户名:admin;密码:admin

    关闭php配置策略:

    sudo vim /etc/php5/apache2/php.ini
    

    把magic_ quotes_ gpc=On 改为 magic_ quotes_ gpc = Off

    关于magic_ quotes_ off函数:

    • 对于magic_ quotes_ gpc=on的情况,我们可以不对输入和输出数据库的字符串数据作addslashes()和stripslashes()的操作,数据也会正常显示;

    • 如果此时你对输入的数据作了addslashes()处理,那么在输出的时候就必须使用stripslashes()去掉多余的反斜杠。 对于PHP magicquotesgpc=off 的情况

    • 必须使用addslashes()对输入数据进行处理,但并不需要使用stripslashes()格式化输出,因为addslashes()并未将反斜杠一起写入数据库,只是帮助mysql完成了sql语句的执行。

    二、select语句的sql注入

    访问:www.sqllabcollabtive.com;当我们知道用户而不知道到密码的时候,我们可以怎么登陆?

    • 查看登陆验证文件:

      sudo vim /var/www/SQL/Collabtive/include/class.user.php

    设置行号 :set number 
    查找 :/keyword

    找到其中第375行

    $sel1 = mysql_query ("SELECT ID, name, locale, lastlogin, gender, FROM user WHERE (name = '$user' OR email = '$user') AND pass = '$pass'");
    

    这一句就是我们登录时,后台的sql语句;我们可以构造一个语句,在不知道密码的情况下登陆;

    $sel1 = mysql_query ("SELECT ID, name, locale, lastlogin, gender, FROM user WHERE (name = '$user') #' OR email = '$user') AND pass = '$pass'");
    

    修改完后重启一下服务器:

    sudo sudo service apache2 restart

    • 我们在$user后面加上) # 这样就会只验证用户名,后面的会被#注释

    点击登陆以后,我们就可以绕过密码直接登录:

    思考:

    上述的SQL语句是一个查询只陈述,并且不能更新数据库。但是,使用SQL注入,你可以把上面的语句分割为两个语句,后面是更新语句。

    请试试这个方法,看看是否可以成功地更新数据库? 
    答案:

    登陆用户名:

    admin') union update user set name='test' # 登陆密码:随意的字符

    登陆失败

    其实,我们都无法达到更新的目标。这是因为在MySQL中实现的特定的防御机制。在MySQL中阻止这种攻击,是因为MySQL机制:update不支持union语法

    总结:

    • 目前,我接触的sql注入就是修改查找、更新等操作代码里的相关语句,共同的思路是将需要密码验证等机制的语句注释掉,已达到越权访问的目的,以达到不需要密码直接访问的效果。
    • 我知道这次的实践部分只是sql注入的冰山一角,sql注入是一个很有趣内容,白帽学院的相关挑战赛也是很有趣的,只是我尝试了很久,还是不没有get到突破点,所以我采用了曲线救国策略,先做一些简单基础的实验,入个门,然后在去挑战一下挑战赛。
    • 我发现关于sql注入的实验平台,还不是很多。像实验楼这样的带指导性的实验平台,可能更适合我这样的初学者。如果直接进入白帽学院的sql挑战赛,确实也是有点无从下手。
  • 相关阅读:
    20145330 《网络攻防》 后门原理与实践
    20145330 《网络对抗》PC平台逆向破解:注入shellcode 和 Return-to-libc 攻击实验
    移动攻击实践
    安卓权限参考
    20145329 《网络对抗技术》Web安全基础实践
    20145329 《网络对抗技术》Web基础
    20145329 《网络对抗技术》网络欺诈技术防范
    20145329 《网络对抗技术》信息搜集与漏洞扫描
    20145329 《网络对抗技术》MSF基础应用
    20145329 《网络对抗技术》辅助模块使用
  • 原文地址:https://www.cnblogs.com/java-stx/p/5327081.html
Copyright © 2011-2022 走看看