今天看到论坛有人发,“猥琐的注入 sethc后门密码”,看到其中破解批处理加密、CMD加密的方法。
本人顿时想起四、五年前,本人还是巨菜鸟阶段,写的几篇垃圾文,讲的就是关于这个,曾在X档案论坛发过,其他地方的均为转载,还好我有保留的习惯,没有删除。
今天就拉出来“科普科普”,四、五年前的菜鸟文,勿笑……
当然,当时还很菜,现在不用这么蛋疼的“溢出”手法了,只要懂点批处理命令,很容易就绕过了……
还有,本人以前网名叫:HackerRose、HackRose,囧……
原本是三篇独立文章,分别发的,现合并为一篇,省事,正文开始……
---------------------------- ↓ Dos下的溢出--代码型的程序溢处 ↓ ----------------------------
第一节(由来篇):
前几天上网的时候,无意间看见一个给CMD加密码方法,于是试了一下还不错,于是忽然有了一个想法,能不能破解掉?于是乎,就有了以下这些东西.
上网搜了一下,发现还没有直接在CMD里破解的方法,都是绕过,或者爆破(输入"<" ">" "|"之类的符号,导致批处理出错,关闭),但是好像不行,没有一点技术含量.
看了一下密码的验证的整个过程,发现不论什么批处理,都是两条代码:"set /p pass==请输入密码:","if %pass%==hackerrose goto ok"这两句命令就不用解释了,家都明白.
现在看这个验证命令"if %pass%==hackerrose goto ok",发现不论上边输入的是什么字符都会加载到该命令里执行,那么我们能不能构建特殊代码跳过这个过程?或者加载某个特殊命令?
第二节(原理篇):
开始构建特殊代码,看看这条命令:"if %pass%==hackerrose goto ok"(如果pass='hackerrose'那么跳转到OK),不难发现,当密码正确时就会跳到OK处继续执行.
那么,我们目的就是让程序跳到OK处.开始构建溢出代码....
先看一下可以利用的地方"if %pass%==hackerrose goto ok",只有pass可以替换成任意字符,那么只有到这里做文章了.
先去掉pass,变成"if %%==hackerrose goto ok",先要完成程序的判断过程,否则这条命令不能运行,让pass=';pass%==hackerrose goto ok',则命令变成"if %pass%==hackerrose goto ok%==hackerrose goto ok",这样后面的"%==hackerrose goto ok"由于变量最后缺少一个%,不完整,所以无效.
再回过头来看看还可以加些什么...
当IF判断命令执行完后,密码错误,跳转没有实现.
看看我们加些什么可以让跳转实现,大家都知道在批处理中"&"和"&&"可以将两条命令并做一条执行.
那还等什么,赶紧给后边加上"&goto ok"试试.那么pass='pass%==hackerrose goto ok &goto ok',命令就变成了:if %pass%==hackerrose goto ok &goto ok==hackerrose goto ok. 填进去试试
溢出成功!程序成功跳到了OK标记处!简单的溢出代码就构建完成了!
第三节(深入篇)
现在,我们成功的溢出了密码的验证过程,光有这些还不够,还要深入研究下.
继续看溢出代码pass="pass%==hackerrose goto ok &goto ok",发现前面的%pass%变量就没有用,因为程序会把我们填写的溢出代码与密码比较,自然不相等了,那么直接将变量去掉,这里要注意了,变量不能完全去掉,否则前边的if判断语句不能完成命令就会出错,但是我们可以将变量名去掉,只留下%%,那么代码就变成了pass="%==hackerrose goto ok &goto ok",试一下...溢出成功!!
继续深入,既然变量名字都没了,那还跟密码比较什么?'hackerrose'干脆也去掉,代码变成:pass="%== goto ok &goto ok",试一下.....溢出成功!!!
继续深入,代码中前面的'goto ok'没有实际的作用,只不过是为了完成if的判断命令,那么跳转的标记我们可以随便改,但是注意不能留空!负责if判断命令不能完成,出错.
改成任意一个字符,只要不导致批处理出错就行了,换成'!'看看.
代码就变成了pass="%== goto !&goto ok",拿去试试....照样溢出成功!
第四节(原理篇)
搞了这么久,相信大家也都看懂了,其实我们就是利用程序过滤不严,构建了特殊代码,程序加载执行了外部代码,导致程序溢出(貌似和SQL注入很相似^.^).
其实'&'的后边不一定跟'goto ok',你也可以跟自己想要执行的DOS命令,但是只限单独命令一条.
第五节(利用篇)
这个溢出的利用其实很简单,就是破解加密的cmd的密码.某天入侵了一台服务器,提权时发现cmd加密了,就不再那么郁闷了.
用溢出代码轻松搞定!还能取消加密..还可以轻松破掉各种批处理的密码等等.....大家自己开发利用.
文章写的不好,大家见谅,不要骂我哦,如果有不足的地方,还希望高手帮忙指正... ^.^
我的QQ号:*********或者624118310
Blog: Http://blog.hackerrose.cn
QQ技术交流群:1940313
欢迎大家前来技术交流!
原始代码:
pass%==hackerrose goto ok &goto ok
第一种:
%==hackerrose goto rose &cmd.exe
%==hackerrose goto rose &goto 2
第二种:
%== goto hackerrose &cmd.exe
%== goto hackerrose &goto 2
第三种:
%== goto !&cmd.exe
%== goto ~&cmd.exe
%== goto .&cmd.exe
%== goto @&cmd.exe
%== goto $&cmd.exe
%== goto %&cmd.exe
%== goto ^&cmd.exe
%== goto *&cmd.exe
%== goto -&cmd.exe
%== goto +&cmd.exe
%== goto _&cmd.exe
%== goto '&cmd.exe
%== goto ?&cmd.exe
%== goto /&cmd.exe
%== goto \&cmd.exe
终极用法:
清除密码:%== goto !
---------------------------- ↓ Dos下的溢出--代码型程序溢处:Echo篇 ↓ ----------------------------
第一节:(由来篇):
大家都知道echo是dos中的一个输出命令(具体资料可以查阅http://www.baidu.com/s?wd=echo+%C3%FC%C1%EE%CF%EA%BD%E2),昨天在发表完"Dos下的溢出--代码型程序溢处"这篇文章之后,忽然想起存一个问题,赶快拉来出来检查了一下.
大为吃惊,发现原来溢出点不再if判断命令处(if %a%==hackerrose goto ok),而在echo输出字符处(echo 你输入的字符为:%a%)!
第二节:(原理篇)
原来当我们在构建特殊代码时,if判断命令变成了“if %==hackerrose goto ok &goto ok==hackerrose goto ok”执行后出错,接下来的一个cls清屏命令又把屏幕上显示的错误抹去了,所以我没有发觉.
而接下来执行的Echo命令因为也调用%a%变量,则变成了“echo 你输入的字符为:%==hackerrose goto ok &goto ok”,执行后则戏剧性的变成了两条命令(因为&将两条命令连接到了一起),分别是:“echo 你输入的字符为:%==hackerrose goto ok”和“goto ok”,于是乎就先输出了一个“你输入的字符为:%==hackerrose goto ok”,接着后边又来了一句“goto ok”,于是乎就跳到了ok标签,结果就溢出成功了!
这个Echo命令本来是我想溢出If判断命令而写的一个回显命令,作为辅助调试溢出代码用的,结果溢出点却跑到了echo处.郁闷... ~.~
的确是个很郁闷的结果.....
第三节:(探索篇)
看了一下溢出的整个过程,发现不论在前面的%a%变量等于什么数值,只要在命令前面加上"%== goto *"(完成前面的If判断过程,否则就会在if命令处先出错),再在后边加上"&",最后再加一条dos命令,就会在echo处溢出,因为系统会认为"&"的前面和后面是两条命令,结果就会分开执行,导致程序溢出,执行了任意系统命令.
现在我们随便构建一条代码试试,比如“%== goto *&start http://blog.hackerrose.cn”成功的打开了我的Blog,看来还是个二级代码溢出!本来想只溢出if命令,结果阴差阳错来了个echo溢出,还是个二级溢出!
郁闷之极......~.~
第五节:(利用篇)
这个溢出其实也没有什么可以利用的.....
大家自己拿去玩玩吧......
其实多多研究,你就会发现,还有很多命令可以溢出的哦!
!!!演示工具和源码都可以到我的Blog下载!!!
文章写的不好,大家见谅,不要骂我哦,如果有不足的地方,还希望高手帮忙指正... ^.^
我的QQ号:*********或者624118310
Blog: Http://blog.hackerrose.cn
QQ技术交流群:1940313
欢迎大家前来技术交流!
echo溢出代码: 原始代码: 第一种: 第二种: 第三种: |
Echo溢处演示程序.bat: echo off |
---------------------------- ↓ Dos下的溢出--代码型程序溢处:If篇 ↓ ----------------------------
第一节(由来篇):
昨天写的那个“Dos下的溢出--代码型程序溢处”文章有问题,具体的问题可以参考另外一篇文章“Dos下的溢出--代码型程序溢处: Echo篇”.但是echo溢出几乎没有什么利用价值,这篇文章里我们继续研究关于if溢出的问题.
看了一下密码的验证的整个过程,发现不论什么批处理,都是两条代码:"set /p pass==请输入密码:","if %pass%==hackerrose goto ok"这两句命令就不用解释了,大家都明白.现在看这个验证命令"if %pass%==hackerrose goto ok",不论变量%a%是什么值都会加载到该命令里执行,那么我们能不能构建特殊代码跳过这个过程?或者加载某个特殊命令?
第二节:(探索篇)
看看这条If判断命令"if %pass%==hackerrose goto ok"(如果变量a等于hackerrose那么跳转到标签ok),其中%pass%处是我们可以修改的地方,那么看看我们都能做些啥子干活.先去掉%pass%,命令变成"if ==hackerrose goto ok",但是前边的if和后边的命令去不掉,那么我们就想办法构建代码跳过去.
大家先想想,if命令除了判断变量功能之外还可以干什么?聪明的大伙可能早就想到了,if还可以用来判断文件是否存在,例如:"if exist c:\hacker.rose goto a"(如果存在c:\hacker.rose那么跳转到标记a) "if exist c:\hacker.rose a.exe"(如果存在c:\hacker.rose那么执行a.exe),那么我们让a变量等于"exist c:\hacker.rose goto ok"试下,溢出失败!原因是“c:\hacker.rose”文件不存在.
那么我们换成一个绝对存在的文件路径试试,a="exist c:\windows\system32\cmd.exe goto ok"试下,溢出成功!
第三节:(原理篇)
既然知道了方法,那么就开始构建特殊代码,把a="exist c:\windows\system32\cmd.exe goto ok"代进去看看,命令变成"if a="exist c:\windows\system32\cmd.exe goto ok"==hackerrose goto ok"可以看到判断的过程被我们修改成判断文件的过程,因为命令是从左向右执行的,所以当命另执行到"cmd.exe goto ok"这里时就跳到ok标记去了而后边的命令由于执行指针已经跳走了,所以被"抛弃"了...达到了我们溢出的目的.
其实"exist c:\windows\system32\cmd.exe goto ok"的后边不一定跟"goto ok"可以跟任意系统命令,比如:当a="exist c:\windows\system32\cmd.exe start http://blog.hackerrose.cn "(注意后边有个空格),代进去试试,怎么样?我的Blog成功的弹了出来!
第四节:(深入篇)
第一种溢出代码试验成功了,但是似乎太长了.我们来看看这跳溢出代码:"exist c:\windows\system32\cmd.exe goto ok",能不能缩短一点?替换"c:\windows\system32\cmd.exe"为"*"(把判断的文件设成任意文件,注:'*'是任意文件的意思),代码变为"exist * goto ok"试试.
溢出成功!怎么样?够短了吧?
看看还有没有另外的方法,将溢出代码中的"goto ok"换成"*",溢出代码变成"exist * *",试试.溢出失败!原因是:"没有后续执行的命令了",那么我们怎样才能给后边再加一条命令呢?
不要忘了上篇文章中介绍过一个好东西,在dos中"&"或"&&"可以讲两条命令并做一条命令执行,那么我们给后边再加一条"&goto ok",代码变成"exist * *&goto ok",试试看..
怎么样?溢出成功了吧?其实"&"后边你可以跟任意dos命令,比如:"exist * *&start http://blog.hackerrose.cn ",试试看...俺的博客又屁颠屁颠的奔了出来.....^.^
第五节:(利用篇)
这个溢出的利用其实很简单,就是破解加密的cmd的密码.某天入侵了一台服务器,提权时发现cmd加密了,就不再那么郁闷了.
用溢出代码轻松搞定!还能取消加密..还可以轻松破掉各种批处理的密码等等...
至于前一段时间,各大黑客网站炒得很火的给cmd加密的方法看来也不好用了,说是“即使溢出了也拿不到系统权限...”,简直是胡说,只要在执行命令之前写一句“exist * * ® delete "HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\CoMMand processor\" /v AutoRun /f”,你丫的密码就没啦,看你丫的还装逼不!
其实还有很多利用之处,大家自己开发利用.
多多研究,你就会发现,还有很多命令可以溢出的哦!
!!!演示工具和源码都可以到我的Blog下载!!!
文章写的不好,大家见谅,不要骂我哦,如果有不足的地方,还希望高手帮忙指正... ^.^
我的QQ号:*********或者624118310
Blog: Http://blog.hackerrose.cn
QQ技术交流群:1940313
欢迎大家前来技术交流!
If溢出代码: 第一种: 终极方法: |
If溢处演示程序.bat: echo off |
参考资料:
Windows 批处理中特殊符号的作用 - 批处理、CMD中特殊符号的作用:https://lcx.cc/post/1997/
留言评论(旧系统):