XSpear 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 855ea130c3f50107d33a888fb4ebf980f407d9c691bae88a56391d6b396b2610
4
- data.tar.gz: 49378b78b909f474d77bd45b5cd42cb455bee921b9e5f119d0ac6e8d8cb9d3c3
3
+ metadata.gz: f7f5c25b7930673a6a500037388b459cbf4e4da94a225c0dc647b1f4d13a956a
4
+ data.tar.gz: 29534ac5308419d4be687ed0d14c5eee69b4cae48c767e3d6433b1d12592cbe8
5
5
  SHA512:
6
- metadata.gz: bbe5ae5c856fb584ce8b9abf1c41ca9cec72134e3a23b61b8ee6d76997cd8884d45c01a4efdbc4e019d0169dd7755f216a16030cde359663260a3b5d5c1fa73c
7
- data.tar.gz: fb677554467b91f06c415f6c13a57eeab6abb516a7160245487eeb538c3ddbf4af88591461bc1dbdd90024a08c7beb9fb2790c68f477e55d52fabdf192ceec99
6
+ metadata.gz: 9e846d4845fc6af2ffbdc0775f0759213ed2c3fd7ea885e56f1dc5f419738e458395f9c293a698c2fd3faf1f19f55b33c34c9a87fb19159728e6e579a772a2b7
7
+ data.tar.gz: de1177287bd050790bed48176fddf8c798f4cc2d250d287937774e19616275901bac511fa8ed33bf03789e782aa4c68ba6e96bd39bf16577b001fbc6b4cb0c98
data/.idea/workspace.xml CHANGED
@@ -3,7 +3,7 @@
3
3
  <component name="ChangeListManager">
4
4
  <list default="true" id="4ee2e581-45d7-4c90-b6a1-e92e4b5829dd" name="Default Changelist" comment="">
5
5
  <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
6
- <change beforePath="$PROJECT_DIR$/XSpear-1.0.1.gem" beforeDir="false" />
6
+ <change beforePath="$PROJECT_DIR$/lib/XSpear.rb" beforeDir="false" afterPath="$PROJECT_DIR$/lib/XSpear.rb" afterDir="false" />
7
7
  <change beforePath="$PROJECT_DIR$/lib/XSpear/version.rb" beforeDir="false" afterPath="$PROJECT_DIR$/lib/XSpear/version.rb" afterDir="false" />
8
8
  </list>
9
9
  <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
@@ -38,16 +38,20 @@
38
38
  </provider>
39
39
  </entry>
40
40
  </file>
41
- <file pinned="false" current-in-tab="false">
42
- <entry file="file://$PROJECT_DIR$/bin/setup">
43
- <provider selected="true" editor-type-id="text-editor" />
41
+ <file pinned="false" current-in-tab="true">
42
+ <entry file="file://$PROJECT_DIR$/lib/XSpear.rb">
43
+ <provider selected="true" editor-type-id="text-editor">
44
+ <state relative-caret-position="213">
45
+ <caret line="262" column="30" lean-forward="true" selection-start-line="262" selection-start-column="30" selection-end-line="262" selection-end-column="30" />
46
+ </state>
47
+ </provider>
44
48
  </entry>
45
49
  </file>
46
50
  <file pinned="false" current-in-tab="false">
47
51
  <entry file="file://$PROJECT_DIR$/lib/XSpear/XSpearRepoter.rb">
48
52
  <provider selected="true" editor-type-id="text-editor">
49
- <state>
50
- <caret column="9" selection-start-column="9" selection-end-column="23" />
53
+ <state relative-caret-position="194">
54
+ <caret line="13" lean-forward="true" selection-start-line="13" selection-end-line="13" />
51
55
  </state>
52
56
  </provider>
53
57
  </entry>
@@ -70,11 +74,11 @@
70
74
  </provider>
71
75
  </entry>
72
76
  </file>
73
- <file pinned="false" current-in-tab="true">
77
+ <file pinned="false" current-in-tab="false">
74
78
  <entry file="file://$PROJECT_DIR$/lib/XSpear/version.rb">
75
79
  <provider selected="true" editor-type-id="text-editor">
76
80
  <state relative-caret-position="15">
77
- <caret line="1" column="19" lean-forward="true" selection-start-line="1" selection-start-column="19" selection-end-line="1" selection-end-column="19" />
81
+ <caret line="1" column="18" selection-start-line="1" selection-start-column="18" selection-end-line="1" selection-end-column="18" />
78
82
  </state>
79
83
  </provider>
80
84
  </entry>
@@ -108,12 +112,12 @@
108
112
  <list>
109
113
  <option value="$PROJECT_DIR$/lib/XSpear/log.rb" />
110
114
  <option value="$PROJECT_DIR$/lib/XSpear/XSpearRepoter.rb" />
111
- <option value="$PROJECT_DIR$/lib/XSpear.rb" />
112
115
  <option value="$PROJECT_DIR$/XSpear.gemspec" />
113
116
  <option value="$PROJECT_DIR$/README.md" />
114
117
  <option value="$PROJECT_DIR$/lib/XSpear/banner.rb" />
115
118
  <option value="$PROJECT_DIR$/exe/XSpear" />
116
119
  <option value="$PROJECT_DIR$/lib/XSpear/version.rb" />
120
+ <option value="$PROJECT_DIR$/lib/XSpear.rb" />
117
121
  </list>
118
122
  </option>
119
123
  </component>
@@ -226,7 +230,7 @@
226
230
  <option name="presentableId" value="Default" />
227
231
  <updated>1562942814778</updated>
228
232
  <workItem from="1562942816004" duration="15337000" />
229
- <workItem from="1563638656518" duration="2097000" />
233
+ <workItem from="1563638656518" duration="3646000" />
230
234
  </task>
231
235
  <task id="LOCAL-00001" summary="init update">
232
236
  <created>1562945899597</created>
@@ -389,11 +393,18 @@
389
393
  <option name="project" value="LOCAL" />
390
394
  <updated>1563646762017</updated>
391
395
  </task>
392
- <option name="localTasksCounter" value="24" />
396
+ <task id="LOCAL-00024" summary="Edit version , release 1.0.2">
397
+ <created>1563646850278</created>
398
+ <option name="number" value="00024" />
399
+ <option name="presentableId" value="LOCAL-00024" />
400
+ <option name="project" value="LOCAL" />
401
+ <updated>1563646850278</updated>
402
+ </task>
403
+ <option name="localTasksCounter" value="25" />
393
404
  <servers />
394
405
  </component>
395
406
  <component name="TimeTrackingManager">
396
- <option name="totallyTimeSpent" value="17434000" />
407
+ <option name="totallyTimeSpent" value="18983000" />
397
408
  </component>
398
409
  <component name="ToolWindowManager">
399
410
  <frame x="-1920" y="-620" width="1920" height="1057" extended-state="6" />
@@ -439,7 +450,8 @@
439
450
  <MESSAGE value="modify dependency rspec" />
440
451
  <MESSAGE value="Change Badge(version)" />
441
452
  <MESSAGE value="Add show version &amp; edit help, version in banner" />
442
- <option name="LAST_COMMIT_MESSAGE" value="Add show version &amp; edit help, version in banner" />
453
+ <MESSAGE value="Edit version , release 1.0.2" />
454
+ <option name="LAST_COMMIT_MESSAGE" value="Edit version , release 1.0.2" />
443
455
  </component>
444
456
  <component name="editorHistoryManager">
445
457
  <entry file="file://$USER_HOME$/.rvm/gems/ruby-2.4.6/gems/bundler-2.0.1/lib/bundler/rubygems_integration.rb">
@@ -452,23 +464,9 @@
452
464
  <entry file="file://$PROJECT_DIR$/bin/console">
453
465
  <provider selected="true" editor-type-id="text-editor" />
454
466
  </entry>
455
- <entry file="file://$PROJECT_DIR$/lib/XSpear.rb">
456
- <provider selected="true" editor-type-id="text-editor">
457
- <state relative-caret-position="1740">
458
- <caret line="116" column="19" selection-start-line="116" selection-start-column="19" selection-end-line="116" selection-end-column="19" />
459
- </state>
460
- </provider>
461
- </entry>
462
467
  <entry file="file://$PROJECT_DIR$/bin/setup">
463
468
  <provider selected="true" editor-type-id="text-editor" />
464
469
  </entry>
465
- <entry file="file://$PROJECT_DIR$/lib/XSpear/XSpearRepoter.rb">
466
- <provider selected="true" editor-type-id="text-editor">
467
- <state>
468
- <caret column="9" selection-start-column="9" selection-end-column="23" />
469
- </state>
470
- </provider>
471
- </entry>
472
470
  <entry file="file://$PROJECT_DIR$/lib/XSpear/log.rb">
473
471
  <provider selected="true" editor-type-id="text-editor">
474
472
  <state relative-caret-position="195">
@@ -513,10 +511,24 @@
513
511
  </state>
514
512
  </provider>
515
513
  </entry>
514
+ <entry file="file://$PROJECT_DIR$/lib/XSpear/XSpearRepoter.rb">
515
+ <provider selected="true" editor-type-id="text-editor">
516
+ <state relative-caret-position="194">
517
+ <caret line="13" lean-forward="true" selection-start-line="13" selection-end-line="13" />
518
+ </state>
519
+ </provider>
520
+ </entry>
516
521
  <entry file="file://$PROJECT_DIR$/lib/XSpear/version.rb">
517
522
  <provider selected="true" editor-type-id="text-editor">
518
523
  <state relative-caret-position="15">
519
- <caret line="1" column="19" lean-forward="true" selection-start-line="1" selection-start-column="19" selection-end-line="1" selection-end-column="19" />
524
+ <caret line="1" column="18" selection-start-line="1" selection-start-column="18" selection-end-line="1" selection-end-column="18" />
525
+ </state>
526
+ </provider>
527
+ </entry>
528
+ <entry file="file://$PROJECT_DIR$/lib/XSpear.rb">
529
+ <provider selected="true" editor-type-id="text-editor">
530
+ <state relative-caret-position="213">
531
+ <caret line="262" column="30" lean-forward="true" selection-start-line="262" selection-start-column="30" selection-end-line="262" selection-end-column="30" />
520
532
  </state>
521
533
  </provider>
522
534
  </entry>
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # XSpear
2
2
  XSpear is XSS Scanner on ruby gems
3
3
 
4
- <img src="https://img.shields.io/static/v1.svg?label=lang&message=ruby&color=RED"> <img src="https://img.shields.io/gem/v/XSpear.svg"> <img src="https://img.shields.io/gem/dtv/XSpear.svg"> <img src="https://img.shields.io/github/license/hahwul/XSpear.svg"> <a href="https://twitter.com/intent/follow?screen_name=hahwul"><img src="https://img.shields.io/static/v1.svg?label=follow&message=hahwul&color=black"></a>
4
+ <img src="https://img.shields.io/static/v1.svg?label=lang&message=ruby&color=RED"> <img src="https://img.shields.io/gem/v/XSpear.svg"> <img src="https://img.shields.io/gem/dt/XSpear.svg"> <img src="https://img.shields.io/github/license/hahwul/XSpear.svg"> <a href="https://twitter.com/intent/follow?screen_name=hahwul"><img src="https://img.shields.io/static/v1.svg?label=follow&message=hahwul&color=black"></a>
5
5
 
6
6
  ## Key features
7
7
  - Pattern matching based XSS scanning
@@ -23,7 +23,7 @@ Install it yourself as:
23
23
 
24
24
  Or install it yourself as (local file):
25
25
 
26
- $ gem install XSpear-0.1.0.gem
26
+ $ gem install XSpear-{version}.gem
27
27
 
28
28
  Add this line to your application's Gemfile:
29
29
 
@@ -66,8 +66,15 @@ $ ruby a.rb -u 'https://www.hahwul.com/?q=123' --cookie='role=admin'
66
66
  + v=2 : show scanning log
67
67
  + v=3 : show detail log(req/res)
68
68
  -h, --help Prints this help
69
- --update Update with online (not supported)
69
+ --version Show XSpear version
70
+ --update Update with online
70
71
  ```
72
+ ### Result types
73
+ - (I)NFO: Get information ( e.g sql error , filterd rule, reflected params, etc..)
74
+ - (V)UNL: Vulnerable XSS, Checked alert/prompt/confirm with Selenium
75
+ - (L)OW: Low level issue
76
+ - (M)EDIUM: medium level issue
77
+ - (H)IGH: high level issue
71
78
 
72
79
  ### Case by Case
73
80
  **Scanning XSS**
@@ -213,6 +220,21 @@ class ScanCallbackFunc()
213
220
  end
214
221
  ```
215
222
 
223
+ ## Update
224
+ if nomal user
225
+ ```
226
+ $ gem update XSpear
227
+ ```
228
+
229
+ if developers (soft)
230
+ ```
231
+ $ git pull -v
232
+ ```
233
+ if develpers (hard)
234
+ ```
235
+ $ git reset --hard HEAD; git pull -v
236
+ ```
237
+
216
238
  ## Development
217
239
 
218
240
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -232,5 +254,5 @@ The gem is available as open source under the terms of the [MIT License](https:/
232
254
  Everyone interacting in the XSpear project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/XSpear/blob/master/CODE_OF_CONDUCT.md).
233
255
 
234
256
  ## ScreenShot
235
- <img src="https://user-images.githubusercontent.com/13212227/61550885-a7467000-aa8e-11e9-9677-2a0c5800e1cc.png" width=100%>
257
+ <img src="https://user-images.githubusercontent.com/13212227/61582619-ed233700-ab67-11e9-94f7-33cb6af5997c.png" width=100%>
236
258
  <img src="https://user-images.githubusercontent.com/13212227/61311071-8b459300-a830-11e9-8e60-c08e984fdacb.png" width=100%>
data/XSpear-1.0.2.gem ADDED
Binary file
@@ -1,3 +1,3 @@
1
1
  module XSpear
2
- VERSION = "1.0.2"
2
+ VERSION = "1.0.3"
3
3
  end
data/lib/XSpear.rb CHANGED
@@ -128,9 +128,116 @@ class XspearScan
128
128
 
129
129
  def run
130
130
  r = []
131
+ event_handler = [
132
+ 'onAbort',
133
+ 'onActivate',
134
+ 'onAfterPrint',
135
+ 'onAfterUpdate',
136
+ 'onBeforeActivate',
137
+ 'onBeforeCopy',
138
+ 'onBeforeCut',
139
+ 'onBeforeDeactivate',
140
+ 'onBeforeEditFocus',
141
+ 'onBeforePaste',
142
+ 'onBeforePrint',
143
+ 'onBeforeUnload',
144
+ 'onBeforeUpdate',
145
+ 'onBegin',
146
+ 'onBlur',
147
+ 'onBounce',
148
+ 'onCellChange',
149
+ 'onChange',
150
+ 'onClick',
151
+ 'onContextMenu',
152
+ 'onControlSelect',
153
+ 'onCopy',
154
+ 'onCut',
155
+ 'onDataAvailable',
156
+ 'onDataSetChanged',
157
+ 'onDataSetComplete',
158
+ 'onDblClick',
159
+ 'onDeactivate',
160
+ 'onDrag',
161
+ 'onDragEnd',
162
+ 'onDragLeave',
163
+ 'onDragEnter',
164
+ 'onDragOver',
165
+ 'onDragDrop',
166
+ 'onDragStart',
167
+ 'onDrop',
168
+ 'onEnd',
169
+ 'onError',
170
+ 'onErrorUpdate',
171
+ 'onFilterChange',
172
+ 'onFinish',
173
+ 'onFocus',
174
+ 'onFocusIn',
175
+ 'onFocusOut',
176
+ 'onHashChange',
177
+ 'onHelp',
178
+ 'onInput',
179
+ 'onKeyDown',
180
+ 'onKeyPress',
181
+ 'onKeyUp',
182
+ 'onLayoutComplete',
183
+ 'onLoad',
184
+ 'onLoseCapture',
185
+ 'onMediaComplete',
186
+ 'onMediaError',
187
+ 'onMessage',
188
+ 'onMouseDown',
189
+ 'onMouseEnter',
190
+ 'onMouseLeave',
191
+ 'onMouseMove',
192
+ 'onMouseOut',
193
+ 'onMouseOver',
194
+ 'onMouseUp',
195
+ 'onMouseWheel',
196
+ 'onMove',
197
+ 'onMoveEnd',
198
+ 'onMoveStart',
199
+ 'onOffline',
200
+ 'onOnline',
201
+ 'onOutOfSync',
202
+ 'onPaste',
203
+ 'onPause',
204
+ 'onPopState',
205
+ 'onProgress',
206
+ 'onPropertyChange',
207
+ 'onReadyStateChange',
208
+ 'onRedo',
209
+ 'onRepeat',
210
+ 'onReset',
211
+ 'onResize',
212
+ 'onResizeEnd',
213
+ 'onResizeStart',
214
+ 'onResume',
215
+ 'onReverse',
216
+ 'onRowsEnter',
217
+ 'onRowExit',
218
+ 'onRowDelete',
219
+ 'onRowInserted',
220
+ 'onScroll',
221
+ 'onSeek',
222
+ 'onSelect',
223
+ 'onSelectionChange',
224
+ 'onSelectStart',
225
+ 'onStart',
226
+ 'onStop',
227
+ 'onStorage',
228
+ 'onSyncRestored',
229
+ 'onSubmit',
230
+ 'onTimeError',
231
+ 'onTrackChange',
232
+ 'onUndo',
233
+ 'onUnload',
234
+ 'onURLFlip'
235
+ ]
236
+
131
237
  log('s', 'creating a test query.')
132
238
  r.push makeQueryPattern('d', 'XsPeaR"', 'XsPeaR"', 'i', "Found SQL Error Pattern", CallbackErrorPatternMatch)
133
239
  r.push makeQueryPattern('r', 'rEfe6', 'rEfe6', 'i', 'reflected parameter', CallbackStringMatch)
240
+ # Check Special Chat
134
241
  r.push makeQueryPattern('f', 'XsPeaR>', 'XsPeaR>', 'i', "not filtered "+">".blue, CallbackStringMatch)
135
242
  r.push makeQueryPattern('f', '<XsPeaR', '<XsPeaR', 'i', "not filtered "+"<".blue, CallbackStringMatch)
136
243
  r.push makeQueryPattern('f', 'XsPeaR"', 'XsPeaR"', 'i', "not filtered "+'"'.blue, CallbackStringMatch)
@@ -151,14 +258,21 @@ class XspearScan
151
258
  r.push makeQueryPattern('f', 'XsPeaR-', 'XsPeaR-', 'i', "not filtered "+"-".blue, CallbackStringMatch)
152
259
  r.push makeQueryPattern('f', 'XsPeaR=', 'XsPeaR=', 'i', "not filtered "+"=".blue, CallbackStringMatch)
153
260
  r.push makeQueryPattern('f', 'XsPeaR$', 'XsPeaR$', 'i', "not filtered "+"$".blue, CallbackStringMatch)
261
+ # Check Event Handler
262
+ r.push makeQueryPattern('f', '<xspear/onhwul=64>', 'onhwul=64', 'i', "not filtered event handler "+"on{any} pattern".blue, CallbackStringMatch)
263
+ event_handler.each do |ev|
264
+ r.push makeQueryPattern('f', "\"<xspear #{ev}=64>", "#{ev}=64", 'i', "not filtered event handler "+"#{ev}=64".blue, CallbackStringMatch)
265
+ end
154
266
  r.push makeQueryPattern('x', '"><script>alert(45)</script>', '<script>alert(45)</script>', 'h', "reflected "+"XSS Code".red, CallbackStringMatch)
155
267
  r.push makeQueryPattern('x', '<svg/onload=alert(45)>', '<svg/onload=alert(45)>', 'h', "reflected "+"XSS Code".red, CallbackStringMatch)
156
268
  r.push makeQueryPattern('x', '<img/src onerror=alert(45)>', '<img/src onerror=alert(45)>', 'h', "reflected "+"XSS Code".red, CallbackStringMatch)
157
- r.push makeQueryPattern('x', '"><script>alert(45)</script>', '<script>alert(45)</script>', 'v', "injected "+"<script>alert(45)</script>".red, CallbackXSSSelenium)
158
- r.push makeQueryPattern('x', '\'"><svg/onload=alert(45)>', '\'"><svg/onload=alert(45)>', 'v', "injected "+"<svg/onload=alert(45)>".red, CallbackXSSSelenium)
159
- r.push makeQueryPattern('x', 'jaVasCript:/*-/*`/*\`/*\'/*"/**/(/* */oNcliCk=alert(45) )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert(45)//>\x3e', '\'"><svg/onload=alert(45)>', 'v', "running "+"XSS Polyglot payload".red, CallbackXSSSelenium)
160
- r.push makeQueryPattern('x', 'javascript:"/*`/*\"/*\' /*</stYle/</titLe/</teXtarEa/</nOscript></Script></noembed></select></template><FRAME/onload=/**/alert(45)//-->&lt;<sVg/onload=alert`45`>', '\'"><svg/onload=alert(45)>', 'v', "running "+"XSS Polyglot payload".red, CallbackXSSSelenium)
161
- r.push makeQueryPattern('x', 'javascript:"/*\'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*&lt;svg/*/onload=alert(45)//>', '\'"><svg/onload=alert(45)>', 'v', "running "+"XSS Polyglot payload".red, CallbackXSSSelenium)
269
+ r.push makeQueryPattern('x', '"><iframe/src=JavaScriPt:alert(45)>', '"><iframe/src=JavaScriPt:alert(45)>', 'h', "reflected "+"XSS Code".red, CallbackStringMatch)
270
+ r.push makeQueryPattern('x', '"><script>alert(45)</script>', '<script>alert(45)</script>', 'v', "triggered "+"<script>alert(45)</script>".red, CallbackXSSSelenium)
271
+ r.push makeQueryPattern('x', '<xmp><p title="</xmp><svg/onload=alert(45)>">', '<xmp><p title="</xmp><svg/onload=alert(45)>">', 'v', "triggered "+"<xmp><p title='</xmp><svg/onload=alert(45)>'>".red, CallbackXSSSelenium)
272
+ r.push makeQueryPattern('x', '\'"><svg/onload=alert(45)>', '\'"><svg/onload=alert(45)>', 'v', "triggered "+"<svg/onload=alert(45)>".red, CallbackXSSSelenium)
273
+ r.push makeQueryPattern('x', 'jaVasCript:/*-/*`/*\`/*\'/*"/**/(/* */oNcliCk=alert(45) )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert(45)//>\x3e', '\'"><svg/onload=alert(45)>', 'v', "triggered "+"XSS Polyglot payload".red, CallbackXSSSelenium)
274
+ r.push makeQueryPattern('x', 'javascript:"/*`/*\"/*\' /*</stYle/</titLe/</teXtarEa/</nOscript></Script></noembed></select></template><FRAME/onload=/**/alert(45)//-->&lt;<sVg/onload=alert`45`>', '\'"><svg/onload=alert(45)>', 'v', "triggered "+"XSS Polyglot payload".red, CallbackXSSSelenium)
275
+ r.push makeQueryPattern('x', 'javascript:"/*\'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*&lt;svg/*/onload=alert(45)//>', '\'"><svg/onload=alert(45)>', 'v', "triggered "+"XSS Polyglot payload".red, CallbackXSSSelenium)
162
276
  r = r.flatten
163
277
  r = r.flatten
164
278
  log('s', "test query generation is complete. [#{r.length} query]")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: XSpear
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - hahwul
@@ -157,6 +157,7 @@ files:
157
157
  - LICENSE.txt
158
158
  - README.md
159
159
  - Rakefile
160
+ - XSpear-1.0.2.gem
160
161
  - XSpear.gemspec
161
162
  - bin/console
162
163
  - bin/setup