forked from Trietptm-on-Security/WooYun-2
-
Notifications
You must be signed in to change notification settings - Fork 7
/
BurpSuite 扩展开发[1]-API与HelloWold.html
189 lines (125 loc) · 119 KB
/
BurpSuite 扩展开发[1]-API与HelloWold.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
<html>
<head>
<title>BurpSuite 扩展开发[1]-API与HelloWold - 园长</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<h1>原文地址:<a href="http://drops.wooyun.org/papers/3962">http://drops.wooyun.org/papers/3962</a></h1>
<p>
<h1>0x00 简介</h1>
<hr />
<p>BurpSuite神器这些年非常的受大家欢迎,在国庆期间解了下Burp相关开发并写了这篇笔记。希望和大家分享一下JavaSwing和Burp插件相关开发。第一节仅简单的了解下API相关,后面会带着大家利用Netbeans开发我们自己的扩展以及各种有趣的小工具。</p>
<h1>0x01 怎么学?</h1>
<hr />
<p>第一个问题是我们应该怎么去写自己的Burp扩展?我们可以找一些现有的扩展学习下,或者参阅官方文档或者手册,其次才是google一下是否有相关的教程、文章进行学习。</p>
<p>google搜索:burp suite api,找到官方的API相关说明。</p>
<!--more-->
<ol>
<li><p>http://portswigger.net/burp/extender/</p></li>
<li><p>http://blog.portswigger.net/2012/12/draft-new-extensibility-api.html</p></li>
</ol>
<p><img src="http://static.wooyun.org/20141120/2014112007081918979.jpg" alt="enter image description here" /></p>
<p>You can:</p>
<ol>
<li><p>执行和修改 HTTP 请求和响应</p></li>
<li><p>访问运行时的数据,比如:代理日志、目标站map和扫描问题</p></li>
<li><p>启动自己的action,如扫描和网站爬行</p></li>
<li><p>自定义扫描检测和注册扫描问题</p></li>
<li><p>提供自定义Intruder payloads和payload处理</p></li>
<li><p>查询和更新Suite-wide的目标作用域</p></li>
<li><p>查询和更新session处理cookie jar</p></li>
<li><p>实现自定义session处理action</p></li>
<li><p>添加自定义的标签(tabs)和上下文菜单项到Burp 用户界面</p></li>
<li><p>可使用自己的界面添加Burp的HTTP消息编辑器</p></li>
<li><p>自定义Burp的HTTP消息编辑器处理Burp不支持的数据格式</p></li>
<li><p>获取headers, parameters, cookies分析HTTP请求和响应</p></li>
<li><p>读取或修改Burp配置设置</p></li>
<li><p>保存或恢复Burp状态</p></li>
</ol>
<h1>0x02 学习API</h1>
<hr />
<p>API下载地址:http://portswigger.net/burp/extender/api/burp_extender_api.zip</p>
<p>下载API后新建Eclipse项目导入API文件:</p>
<p><img src="http://static.wooyun.org/20141120/2014112007082138862.jpg" alt="enter image description here" /></p>
<p>不急于动手写代码,先看下官方的Demo:</p>
<p><img src="http://static.wooyun.org/20141120/2014112007082122742.jpg" alt="enter image description here" /></p>
<p>下载第一个HelloWorld解压它并复制BurpExtender.java到我们的项目当中:</p>
<p><img src="http://static.wooyun.org/20141120/2014112007082239625.jpg" alt="enter image description here" /></p>
<p>BurpExtender.java:</p>
<p><img src="http://static.wooyun.org/20141120/2014112007082229959.jpg" alt="enter image description here" /></p>
<p>BurpExtender.java实现了IBurpExtender接口,而IBurpExtender仅定义了一个方法:registerExtenderCallbacks(注册扩展回调方法):</p>
<pre><code>#!java
public interface IBurpExtender{
/**
* 这个方法将在扩展加载的时候.他将会注册一个
*<code>IBurpExtenderCallbacks</code> 接口实例,可通过扩展
* 实现各种调用
<a class="__cf_email__" href="/cdn-cgi/l/email-protection" data-cfemail="dcf69cacbdaebdb1394742346c5f38645c386476">[email protected]</a><script data-cfhash='f9e31' type="text/javascript">/* <![CDATA[ */!function(t,e,r,n,c,a,p){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.length;e--;)if(t[e].getAttribute('data-cfhash'))return t[e]}();if(t&&(c=t.previousSibling)){p=t.parentNode;if(a=c.getAttribute('data-cfemail')){for(e='',r='0x'+a.substr(0,2)|0,n=2;a.length-n;n+=2)e+='%'+('0'+('0x'+a.substr(n,2)^r).toString(16)).slice(-2);p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/* ]]> */</script>
*<code>IBurpExtenderCallbacks</code>对象.
*/
void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks);
}
</code></pre>
<p>在确认代码无任何错误后选中项目并导出为jar,建议安装一个打jar包的插件:Build Fat Jar这样你就可以非常方便的把整个项目打成一个jar包了.</p>
<p><img src="http://static.wooyun.org/20141120/2014112007082385265.jpg" alt="enter image description here" /></p>
<p>如果你和我一样从来都没有使用过BurpSuite,那么不妨先打开它把玩几分钟。在extender(扩展)标签当中看到了Burp的插件加载界面。</p>
<p><img src="http://static.wooyun.org/20141120/2014112007082375326.jpg" alt="enter image description here" /></p>
<p>Add我们刚打好的jar包,加载到Burp扩展中去。</p>
<p><img src="http://static.wooyun.org/20141120/2014112007082480407.jpg" alt="enter image description here" /></p>
<p>这个时候可以看到我们的插件已经成功运行了,在LoadBurpExtension中的output标签已经看到了Hello output(stdout.println("Hello output");)</p>
<p>Errors标签也输出了Hello errors()stderr.println("Hello errors");</p>
<p>对应的错误信息(throw new RuntimeException("Hello exceptions");)。</p>
<p>插件名(callbacks.setExtensionName("Hello world extension");),</p>
<p>以及提醒面板的信息Hello alerts(callbacks.issueAlert("Hello alerts");)。</p>
<p><img src="http://static.wooyun.org/20141120/2014112007082439626.jpg" alt="enter image description here" /></p>
<p>获取到Burp混淆后的扩展加载类(自定义类加载器):</p>
<p><img src="http://static.wooyun.org/20141120/2014112007082578368.jpg" alt="enter image description here" /></p>
<p>如你所想,java加载外部扩展利用了URLClassLoader load外部的jar(对这感兴趣的朋友可以看下p2j上的相关文章:http://p2j.cn/?s=URLClassLoader&submit=Search)。</p>
<p>第一个HelloWorld很容易就搞定了,第二个Event listeners的Demo。所谓事件监听即你可以通过Burp的IBurpExtenderCallbacks去注册自己的监听方法。Demo只提供了四种事件(包含HTTP监听、代理、Scanner、状态监听),所有的未列举的事件直接用Eclipse的快捷键提示就出来了:</p>
<p><img src="http://static.wooyun.org/20141120/2014112007082560295.jpg" alt="z" /></p>
<p>比如想要添加一个IScopeChangeListener很简单,让当前类实现IScopeChangeListener接口,注册ScopeChange事件(callbacks.registerScopeChangeListener(this);)重写其scopeChanged方法即可。</p>
<p><img src="http://static.wooyun.org/20141120/2014112007082667114.jpg" alt="enter image description here" /></p>
<p>设置本地浏览器代理后再次访问任意网站后回到扩展标签,选中我们的扩展程序可以看到监听中的请求已输出。</p>
<p><img src="http://static.wooyun.org/20141120/2014112007082678859.jpg" alt="enter image description here" /></p>
<h1>0x03 HelloWorld</h1>
<hr />
<p>在编写扩展的时候一定要注意,你的包里面务必包含一个BurpExtender类可以有多个类实现IBurpExtender。 创建自己的Panel并加到Burp主窗体,AppPanel是我自己写的一个应用面板。我们可以通过实现ITab 重写getTabCaption和getUiComponent方法(当然实现IBurpExtender接口是必须的)将我们自己的ui嵌套到Burp当中。getTabCaption即获取获取标题,getUiComponent获取组件这里需要给Burp返回你封装的组件对象。</p>
<p>我们可以先写好JPanel再嵌入到Burp当中,这里提供了一个简单的ApplicationPanel小Demo:http://p2j.cn/?p=1512</p>
<pre><code>#!java
package burp;
import java.awt.Component;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class BurpExtender implements IBurpExtender, ITab {
private JPanel jPanel1;
@Override
public void registerExtenderCallbacks(final IBurpExtenderCallbacks callbacks) {
//设置扩展名
callbacks.setExtensionName("应用中心");
//创建我们的窗体
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
//我们的主窗体
jPanel1 = new AppPanel();
//自定义我们的组件
callbacks.customizeUiComponent(jPanel1);
//添加标签到Burp主窗体
callbacks.addSuiteTab(BurpExtender.this);
}
});
}
@Override
public String getTabCaption() {
return "应用中心";
}
@Override
public Component getUiComponent() {
return jPanel1;
}
}
</code></pre>
<p>效果图:</p>
<p><img src="http://static.wooyun.org/20141120/2014112007082764524.jpg" alt="enter image description here" /></p> </p>
</body>
</html>