one_gadget 2.0.0 → 2.1.1

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 (49) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +215 -65
  3. data/README.md +96 -22
  4. data/lib/one_gadget/abi.rb +41 -5
  5. data/lib/one_gadget/builds/libc-2.31-93b46e0027747153e336c3fd9431ce9a5d82ad00.rb +563 -0
  6. data/lib/one_gadget/builds/libc-2.35-891c1403437a4e30e684e0c8e34b87a09e4298e5.rb +434 -0
  7. data/lib/one_gadget/builds/libc-2.39-a1d1cf4badf1f5dfe57ff1d17bd692ccc6fcd5c5.rb +531 -0
  8. data/lib/one_gadget/builds/libc-2.39-cd8f5a207dd67aea370d2b471a54c3e56f44ab18.rb +531 -0
  9. data/lib/one_gadget/builds/libc-2.43-b50ceafbd17dc6bceee344a66671c7eaa152bef4.rb +15 -0
  10. data/lib/one_gadget/emulators/aarch64.rb +5 -2
  11. data/lib/one_gadget/emulators/amd64.rb +1 -0
  12. data/lib/one_gadget/emulators/arm.rb +27 -18
  13. data/lib/one_gadget/emulators/arm_family.rb +35 -160
  14. data/lib/one_gadget/emulators/conditional.rb +28 -22
  15. data/lib/one_gadget/emulators/constraints.rb +269 -0
  16. data/lib/one_gadget/emulators/data_processing.rb +167 -0
  17. data/lib/one_gadget/emulators/i386.rb +4 -6
  18. data/lib/one_gadget/emulators/instruction.rb +24 -1
  19. data/lib/one_gadget/emulators/lambda.rb +6 -4
  20. data/lib/one_gadget/emulators/mips.rb +289 -0
  21. data/lib/one_gadget/emulators/processor.rb +33 -455
  22. data/lib/one_gadget/emulators/register_file.rb +19 -10
  23. data/lib/one_gadget/emulators/riscv64.rb +265 -0
  24. data/lib/one_gadget/emulators/safe_calls.rb +9 -3
  25. data/lib/one_gadget/emulators/tracked_memory.rb +209 -0
  26. data/lib/one_gadget/emulators/x86.rb +32 -22
  27. data/lib/one_gadget/fetchers/aarch64.rb +0 -27
  28. data/lib/one_gadget/fetchers/amd64.rb +0 -24
  29. data/lib/one_gadget/fetchers/argument_resolution.rb +340 -0
  30. data/lib/one_gadget/fetchers/arm.rb +99 -44
  31. data/lib/one_gadget/fetchers/base.rb +142 -640
  32. data/lib/one_gadget/fetchers/candidate_walk.rb +150 -0
  33. data/lib/one_gadget/fetchers/disassembly.rb +252 -0
  34. data/lib/one_gadget/fetchers/dynamic_symbols.rb +104 -0
  35. data/lib/one_gadget/fetchers/i386.rb +5 -8
  36. data/lib/one_gadget/fetchers/mips.rb +478 -0
  37. data/lib/one_gadget/fetchers/objdump.rb +25 -3
  38. data/lib/one_gadget/fetchers/riscv64.rb +78 -0
  39. data/lib/one_gadget/fetchers/x86.rb +19 -0
  40. data/lib/one_gadget/fetchers.rb +22 -6
  41. data/lib/one_gadget/gadget.rb +27 -37
  42. data/lib/one_gadget/helper.rb +19 -5
  43. data/lib/one_gadget/one_gadget.rb +6 -0
  44. data/lib/one_gadget/version.rb +1 -1
  45. data/lib/one_gadget.rb +1 -1
  46. metadata +18 -6
  47. data/lib/one_gadget/builds/libc-2.26-2104f3d4ad5cf68603afbe7ba1a17f5ac99c5988.rb +0 -227
  48. data/lib/one_gadget/builds/libc-2.26-ddcc13122ddbfe5e5ef77d4ebe66d124ae5762c2.rb +0 -300
  49. data/lib/one_gadget/builds/libc-2.26-f65648a832414f2144ce795d75b6045a1ec2e252.rb +0 -199
@@ -10,6 +10,23 @@ module OneGadget
10
10
  # Module for define gadgets.
11
11
  module Gadget
12
12
  # Information of a gadget.
13
+ #
14
+ # Its {Gadget#constraints} are written in this language:
15
+ # REG: OneGadget::ABI.all
16
+ # IMM: [+-]0x[\da-f]+
17
+ # BITS: 8, 16, 32, 64
18
+ # CAST: (<s|u><BITS>)
19
+ # Identity: <REG><IMM>?
20
+ # Identity: [<Identity>]
21
+ # Expr: <REG> is the GOT address of libc
22
+ # Expr: writable: <Identity>
23
+ # Expr: readable: <Identity>
24
+ # Expr: <CAST>?<Identity> == NULL
25
+ # Expr: <REG> & 0xf == <IMM>
26
+ # Expr: (s32)[<Identity>] <= 0
27
+ # Expr: .+ is a valid argv
28
+ # Expr: .+ is a valid envp
29
+ # Expr: <Expr> || <Expr>
13
30
  class Gadget
14
31
  # @return [Integer] Base address of libc. Default: 0.
15
32
  attr_accessor :base
@@ -138,22 +155,9 @@ module OneGadget
138
155
  private
139
156
 
140
157
  # Drops what the rest of the list already settles, so a gadget asks for each
141
- # thing once and never offers an option it rules out itself.
142
- #
143
- # Most of it follows from one reading: a constraint that accesses an address
144
- # says that address is mapped memory (see {#mapped?}), which in turn says it
145
- # is readable and not NULL. So:
146
- # * A +readable:+ on an address a dereference already reaches repeats it.
147
- # * A +== NULL+ option for a mapped address can never be taken.
148
- # * A +!= NULL+ requirement on one is already met.
149
- # The last rule reads a value rather than an address: one the list pins to a
150
- # literal answers every other comparison against it, so a bound that literal
151
- # already satisfies asks for nothing.
152
- #
153
- # Each needs the constraint doing the settling to hold outright: one inside a
154
- # +||+ is an option among several and settles nothing. They run until the
155
- # list stops changing, because dropping an option can leave a constraint
156
- # holding outright and settle the next thing.
158
+ # thing once and never offers an option it rules out itself. Only a
159
+ # constraint holding outright settles anything, since one inside a +||+ is an
160
+ # option among several; the rules run until the list stops changing.
157
161
  # @param [Array<String>] cons
158
162
  # @return [Array<String>]
159
163
  # @example An option the same list rules out.
@@ -305,29 +309,14 @@ module OneGadget
305
309
  end
306
310
  end
307
311
 
308
- # REG: OneGadget::ABI.all
309
- # IMM: [+-]0x[\da-f]+
310
- # BITS: 8, 16, 32, 64
311
- # CAST: (<s|u><BITS>)
312
- # Identity: <REG><IMM>?
313
- # Identity: [<Identity>]
314
- # Expr: <REG> is the GOT address of libc
315
- # Expr: writable: <Identity>
316
- # Expr: readable: <Identity>
317
- # Expr: <CAST>?<Identity> == NULL
318
- # Expr: <REG> & 0xf == <IMM>
319
- # Expr: (s32)[<Identity>] <= 0
320
- # Expr: .+ is a valid argv
321
- # Expr: .+ is a valid envp
322
- # Expr: <Expr> || <Expr>
323
312
  def calculate_score(expr)
324
313
  return expr.split(' || ').map(&method(:calculate_score)).max if expr.include?(' || ')
325
314
 
326
315
  return 0.95 if stack_alignment?(expr)
327
316
  # Zero is the easy value to arrange and every other one is hard, so a mask
328
- # tells them apart rather than making them easier: asking for zero in some
329
- # of a value's bits is a little easier than zeroing all of it, while asking
330
- # a mask for any other value is as hard as asking for that value anywhere.
317
+ # tells them apart rather than making them easier: some of a value's bits
318
+ # zeroed is a little easier than all of them, while a mask asking for any
319
+ # other value is as hard as asking for it anywhere.
331
320
  return 0.92 if MASKED_ZERO.match?(expr)
332
321
  # Any other mask asks for a particular value, which the mask does nothing
333
322
  # to make easier, so it is the relation it looks like.
@@ -424,6 +413,8 @@ module OneGadget
424
413
  0.9**(depth + base)
425
414
  end
426
415
 
416
+ # The constraints as a reader wants them: every +writable:+ folded into one
417
+ # sentence naming all of the addresses, the rest left alone.
427
418
  def merge_constraints
428
419
  key = 'writable: '
429
420
  w_cons, normal = constraints.partition { |c| c.start_with?(key) }
@@ -455,8 +446,7 @@ module OneGadget
455
446
  table = OneGadget::Helper.remote_builds.find { |c| c.include?(build_id) }
456
447
  return build_not_found if table.nil? # remote doesn't have this one either.
457
448
 
458
- # builds found in remote! Ask update gem and download remote gadgets.
459
- OneGadget::Logger.ask_update(msg: 'The desired one-gadget can be found in lastest version!')
449
+ OneGadget::Logger.info("#{build_id} is not shipped with the gem, fetching it from the repository\n")
460
450
  tmp_file = OneGadget::Helper.download_build(table)
461
451
  require tmp_file.path
462
452
  tmp_file.unlink
@@ -466,7 +456,7 @@ module OneGadget
466
456
  # Returns the comments in builds/libc-*-<build_id>*.rb
467
457
  # @param [String] build_id
468
458
  # Supports give only few starting bytes, but a warning will be shown
469
- # if multiple BulidIDs are matched.
459
+ # if multiple BuildIDs are matched.
470
460
  # @return [String?]
471
461
  # Lines of comments.
472
462
  # @example
@@ -190,7 +190,6 @@ module OneGadget
190
190
  nil
191
191
  end
192
192
 
193
- # Fetch the ELF architecture of +file+.
194
193
  # What this tool calls each architecture it can search. Keyed by the
195
194
  # header's own value, which is fixed by the ELF ABI, rather than by the name a
196
195
  # reader library prints for it -- that is the library's wording and does
@@ -199,9 +198,12 @@ module OneGadget
199
198
  ELFTools::Constants::EM::EM_386 => :i386,
200
199
  ELFTools::Constants::EM::EM_ARM => :arm,
201
200
  ELFTools::Constants::EM::EM_X86_64 => :amd64,
202
- ELFTools::Constants::EM::EM_AARCH64 => :aarch64
201
+ ELFTools::Constants::EM::EM_AARCH64 => :aarch64,
202
+ ELFTools::Constants::EM::EM_RISCV => :riscv64,
203
+ ELFTools::Constants::EM::EM_MIPS => :mips
203
204
  }.freeze
204
205
 
206
+ # Fetch the ELF architecture of +file+.
205
207
  # @param [String] file The target ELF filename.
206
208
  # @return [Symbol]
207
209
  # One of +:amd64+, +:i386+, +:arm+ or +:aarch64+, +:unknown+ for a valid ELF
@@ -302,8 +304,18 @@ module OneGadget
302
304
  def objdump_arch_supported?(bin, arch)
303
305
  return false if bin.nil?
304
306
 
305
- arch = objdump_arch(arch)
306
- `#{::Shellwords.join([bin, '--help'])}`.lines.any? { |c| c.split.include?(arch) }
307
+ objdump_targets(bin).include?(objdump_arch(arch))
308
+ end
309
+
310
+ # The target names an objdump binary lists as supported. Asked of the binary
311
+ # once: the answer is a property of that build, while the question is asked
312
+ # again for every command a search assembles.
313
+ # @param [String] bin Path to the objdump binary.
314
+ # @return [Array<String>]
315
+ # @example Every word of the help text, a target looked for among them.
316
+ # objdump_targets('/usr/bin/objdump').include?('elf64-x86-64') #=> true
317
+ def objdump_targets(bin)
318
+ (@objdump_targets ||= {})[bin] ||= `#{::Shellwords.join([bin, '--help'])}`.split
307
319
  end
308
320
 
309
321
  # Converts to the architecture name shown in objdump's +--help+ command.
@@ -317,6 +329,7 @@ module OneGadget
317
329
  def objdump_arch(arch)
318
330
  case arch
319
331
  when :amd64 then 'i386:x86-64'
332
+ when :riscv64 then 'riscv:rv64'
320
333
  else arch.to_s
321
334
  end
322
335
  end
@@ -331,7 +344,8 @@ module OneGadget
331
344
  aarch64: 'aarch64-linux-gnu-objdump',
332
345
  amd64: 'x86_64-linux-gnu-objdump',
333
346
  arm: 'arm-linux-gnueabihf-objdump',
334
- i386: 'i686-linux-gnu-objdump'
347
+ i386: 'i686-linux-gnu-objdump',
348
+ riscv64: 'riscv64-linux-gnu-objdump'
335
349
  }[arch]
336
350
  end
337
351
 
@@ -79,6 +79,12 @@ module OneGadget
79
79
  take_until(high, 3)
80
80
  end
81
81
 
82
+ # The +count+ best-scoring of +ary+, in the order they were given, plus
83
+ # anything scoring as well as the last of them -- so a tie is never broken
84
+ # arbitrarily, and more than +count+ may come back.
85
+ # @param [Array<OneGadget::Gadget::Gadget>] ary
86
+ # @param [Integer] count
87
+ # @return [Array<OneGadget::Gadget::Gadget>]
82
88
  def take_until(ary, count)
83
89
  return ary if ary.size <= count
84
90
 
@@ -2,5 +2,5 @@
2
2
 
3
3
  module OneGadget
4
4
  # Current gem version.
5
- VERSION = '2.0.0'
5
+ VERSION = '2.1.1'
6
6
  end
data/lib/one_gadget.rb CHANGED
@@ -16,7 +16,7 @@ require 'one_gadget/version'
16
16
  # @param [String?] arg
17
17
  # Can be either +build_id+ or path to libc.
18
18
  # @param [Mixed] options
19
- # See {OneGadget#gadgets} for ore information.
19
+ # See {OneGadget#gadgets} for more information.
20
20
  # @return [Array<OneGadget::Gadget::Gadget>, Array<Integer>]
21
21
  # The gadgets found.
22
22
  # @example
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: one_gadget
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - david942j
@@ -15,7 +15,7 @@ dependencies:
15
15
  requirements:
16
16
  - - ">="
17
17
  - !ruby/object:Gem::Version
18
- version: 2.0.0
18
+ version: 2.2.0
19
19
  - - "<"
20
20
  - !ruby/object:Gem::Version
21
21
  version: 3.0.0
@@ -25,7 +25,7 @@ dependencies:
25
25
  requirements:
26
26
  - - ">="
27
27
  - !ruby/object:Gem::Version
28
- version: 2.0.0
28
+ version: 2.2.0
29
29
  - - "<"
30
30
  - !ruby/object:Gem::Version
31
31
  version: 3.0.0
@@ -139,9 +139,6 @@ files:
139
139
  - lib/one_gadget/builds/libc-2.23-991d173c6b9056712812d98507cbe95f937db7cf.rb
140
140
  - lib/one_gadget/builds/libc-2.24-8cba3297f538691eb1875be62986993c004f3f4d.rb
141
141
  - lib/one_gadget/builds/libc-2.24-fd0655c4d2073eda4235084e1d0e558f0251be8a.rb
142
- - lib/one_gadget/builds/libc-2.26-2104f3d4ad5cf68603afbe7ba1a17f5ac99c5988.rb
143
- - lib/one_gadget/builds/libc-2.26-ddcc13122ddbfe5e5ef77d4ebe66d124ae5762c2.rb
144
- - lib/one_gadget/builds/libc-2.26-f65648a832414f2144ce795d75b6045a1ec2e252.rb
145
142
  - lib/one_gadget/builds/libc-2.27-53f40c1d2f3739ae017dcdcef1a17314786e3709.rb
146
143
  - lib/one_gadget/builds/libc-2.27-63b3d43ad45e1b0f601848c65b067f9e9b40528b.rb
147
144
  - lib/one_gadget/builds/libc-2.27-8c2d375f8d23a7b58de23a60b37bef2d80b23aef.rb
@@ -149,16 +146,20 @@ files:
149
146
  - lib/one_gadget/builds/libc-2.31-00537087f0a4c4381deb83f49cc19e6abfd47a12.rb
150
147
  - lib/one_gadget/builds/libc-2.31-5792732f783158c66fb4f3756458ca24e46e827d.rb
151
148
  - lib/one_gadget/builds/libc-2.31-749e6d13e587d608128a097381cd44b9aca59927.rb
149
+ - lib/one_gadget/builds/libc-2.31-93b46e0027747153e336c3fd9431ce9a5d82ad00.rb
152
150
  - lib/one_gadget/builds/libc-2.31-9fdb74e7b217d06c93172a8243f8547f947ee6d1.rb
153
151
  - lib/one_gadget/builds/libc-2.31-aa18dedb2aa800a743aac3bb546b8bd5816dbca6.rb
154
152
  - lib/one_gadget/builds/libc-2.35-1a0246cddde3e301e0cd5a85630aa26e89cb34b5.rb
155
153
  - lib/one_gadget/builds/libc-2.35-22ca0a83a4004122e30a69b597be96e134068616.rb
156
154
  - lib/one_gadget/builds/libc-2.35-4a81130bc30ded618f1edc030ecc5439e066dc68.rb
155
+ - lib/one_gadget/builds/libc-2.35-891c1403437a4e30e684e0c8e34b87a09e4298e5.rb
157
156
  - lib/one_gadget/builds/libc-2.35-a91d1bc05ce8f54989de1172c24b2b736378901f.rb
158
157
  - lib/one_gadget/builds/libc-2.39-328820b908de8ea1ef79afa8995e302e819163d7.rb
159
158
  - lib/one_gadget/builds/libc-2.39-54ae5337044aaabab70d65e0c3444f7e4735e059.rb
160
159
  - lib/one_gadget/builds/libc-2.39-70d6616bcfd43eaa73962220df98dd9c82ca6687.rb
160
+ - lib/one_gadget/builds/libc-2.39-a1d1cf4badf1f5dfe57ff1d17bd692ccc6fcd5c5.rb
161
161
  - lib/one_gadget/builds/libc-2.39-a7e93008cd7dad7a713e3eaf1f9dec78ce7c68a6.rb
162
+ - lib/one_gadget/builds/libc-2.39-cd8f5a207dd67aea370d2b471a54c3e56f44ab18.rb
162
163
  - lib/one_gadget/builds/libc-2.39-f5b510cd91b956148e885994f55a0e476462bf92.rb
163
164
  - lib/one_gadget/builds/libc-2.43-7a08e84aa7f1e0bd80a7da6227c3a006c3ff327d.rb
164
165
  - lib/one_gadget/builds/libc-2.43-8c7af7f227b3871d6afba752cbb617f317023de5.rb
@@ -170,21 +171,32 @@ files:
170
171
  - lib/one_gadget/emulators/arm.rb
171
172
  - lib/one_gadget/emulators/arm_family.rb
172
173
  - lib/one_gadget/emulators/conditional.rb
174
+ - lib/one_gadget/emulators/constraints.rb
175
+ - lib/one_gadget/emulators/data_processing.rb
173
176
  - lib/one_gadget/emulators/i386.rb
174
177
  - lib/one_gadget/emulators/instruction.rb
175
178
  - lib/one_gadget/emulators/lambda.rb
179
+ - lib/one_gadget/emulators/mips.rb
176
180
  - lib/one_gadget/emulators/processor.rb
177
181
  - lib/one_gadget/emulators/register_file.rb
182
+ - lib/one_gadget/emulators/riscv64.rb
178
183
  - lib/one_gadget/emulators/safe_calls.rb
184
+ - lib/one_gadget/emulators/tracked_memory.rb
179
185
  - lib/one_gadget/emulators/x86.rb
180
186
  - lib/one_gadget/error.rb
181
187
  - lib/one_gadget/fetchers.rb
182
188
  - lib/one_gadget/fetchers/aarch64.rb
183
189
  - lib/one_gadget/fetchers/amd64.rb
190
+ - lib/one_gadget/fetchers/argument_resolution.rb
184
191
  - lib/one_gadget/fetchers/arm.rb
185
192
  - lib/one_gadget/fetchers/base.rb
193
+ - lib/one_gadget/fetchers/candidate_walk.rb
194
+ - lib/one_gadget/fetchers/disassembly.rb
195
+ - lib/one_gadget/fetchers/dynamic_symbols.rb
186
196
  - lib/one_gadget/fetchers/i386.rb
197
+ - lib/one_gadget/fetchers/mips.rb
187
198
  - lib/one_gadget/fetchers/objdump.rb
199
+ - lib/one_gadget/fetchers/riscv64.rb
188
200
  - lib/one_gadget/fetchers/x86.rb
189
201
  - lib/one_gadget/gadget.rb
190
202
  - lib/one_gadget/helper.rb
@@ -1,227 +0,0 @@
1
- require 'one_gadget/gadget'
2
- # spec/data/libc-2.26-2104f3d4ad5cf68603afbe7ba1a17f5ac99c5988.so
3
- #
4
- # Advanced Micro Devices X86-64 processor
5
- #
6
- # GNU C Library (GNU libc) stable release version 2.26, by Roland McGrath et al.
7
- # Copyright (C) 2017 Free Software Foundation, Inc.
8
- # This is free software; see the source for copying conditions.
9
- # There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
10
- # PARTICULAR PURPOSE.
11
- # Compiled by GNU CC version 7.2.0.
12
- # Available extensions:
13
- # crypt add-on version 2.1 by Michael Glad and others
14
- # GNU Libidn by Simon Josefsson
15
- # Native POSIX Threads Library by Ulrich Drepper et al
16
- # BIND-8.2.3-T5B
17
- # libc ABIs: UNIQUE IFUNC
18
- # For bug reporting instructions, please see:
19
- # <https://bugs.archlinux.org/>.
20
-
21
- build_id = File.basename(__FILE__, '.rb').split('-').last
22
- OneGadget::Gadget.add(build_id, 269312,
23
- constraints: ["(u64)rax <= 0xfffffffffffff000", "eax == 0x0", "rbx == NULL", "{\"sh\", \"-c\", r12, NULL} is a valid argv"],
24
- effect: "execve(\"/bin/sh\", rsp+0x30, environ)")
25
- OneGadget::Gadget.add(build_id, 269324,
26
- constraints: ["eax == 0x0", "rbx == NULL", "{\"sh\", \"-c\", r12, NULL} is a valid argv"],
27
- effect: "execve(\"/bin/sh\", rsp+0x30, environ)")
28
- OneGadget::Gadget.add(build_id, 269963,
29
- constraints: ["rbx == NULL", "{\"sh\", \"-c\", r12, NULL} is a valid argv"],
30
- effect: "execve(\"/bin/sh\", rsp+0x30, environ)")
31
- OneGadget::Gadget.add(build_id, 269970,
32
- constraints: ["rbx == NULL", "rax == NULL || {rax, \"-c\", r12, NULL} is a valid argv"],
33
- effect: "execve(\"/bin/sh\", rsp+0x30, environ)")
34
- OneGadget::Gadget.add(build_id, 269977,
35
- constraints: ["rbx == NULL", "rsi == NULL", "rax == NULL || {rax, \"-c\", r12, NULL} is a valid argv"],
36
- effect: "execve(\"/bin/sh\", rsp+0x30, environ)")
37
- OneGadget::Gadget.add(build_id, 269979,
38
- constraints: ["rbx == NULL", "rdx == NULL", "rsi == NULL", "rax == NULL || {rax, \"-c\", r12, NULL} is a valid argv"],
39
- effect: "execve(\"/bin/sh\", rsp+0x30, environ)")
40
- OneGadget::Gadget.add(build_id, 269984,
41
- constraints: ["rbx == NULL", "rdx == NULL", "rsi == NULL", "rax == NULL || {rax, \"-c\", r12, NULL} is a valid argv"],
42
- effect: "execve(\"/bin/sh\", rsp+0x30, environ)")
43
- OneGadget::Gadget.add(build_id, 269989,
44
- constraints: ["rbx == NULL", "rdx == NULL", "rsi == NULL", "rax == NULL || {rax, \"-c\", [rsp+0x40], NULL} is a valid argv"],
45
- effect: "execve(\"/bin/sh\", rsp+0x30, environ)")
46
- OneGadget::Gadget.add(build_id, 269998,
47
- constraints: ["rbx == NULL", "rdx == NULL", "rsi == NULL", "rax == NULL || {rax, \"-c\", [rsp+0x40], [rsp+0x48], ...} is a valid argv"],
48
- effect: "execve(\"/bin/sh\", rsp+0x30, environ)")
49
- OneGadget::Gadget.add(build_id, 270003,
50
- constraints: ["rbx == NULL", "rdx == NULL", "rsi == NULL", "[rsp+0x30] == NULL || {[rsp+0x30], \"-c\", [rsp+0x40], [rsp+0x48], ...} is a valid argv"],
51
- effect: "execve(\"/bin/sh\", rsp+0x30, environ)")
52
- OneGadget::Gadget.add(build_id, 270010,
53
- constraints: ["rbx == NULL", "rdx == NULL", "rsi == NULL", "[rsp+0x30] == NULL || {[rsp+0x30], rax, [rsp+0x40], [rsp+0x48], ...} is a valid argv"],
54
- effect: "execve(\"/bin/sh\", rsp+0x30, environ)")
55
- OneGadget::Gadget.add(build_id, 270015,
56
- constraints: ["rbx == NULL", "rdx == NULL", "rsi == NULL", "[rsp+0x30] == NULL || {[rsp+0x30], [rsp+0x38], [rsp+0x40], [rsp+0x48], ...} is a valid argv"],
57
- effect: "execve(\"/bin/sh\", rsp+0x30, environ)")
58
- OneGadget::Gadget.add(build_id, 270020,
59
- constraints: ["rbx == NULL", "[rsp+0x30] == NULL || {[rsp+0x30], [rsp+0x38], [rsp+0x40], [rsp+0x48], ...} is a valid argv"],
60
- effect: "execve(\"/bin/sh\", rsp+0x30, environ)")
61
- OneGadget::Gadget.add(build_id, 270027,
62
- constraints: ["rbx == NULL", "rsi == NULL", "[rsp+0x30] == NULL || {[rsp+0x30], [rsp+0x38], [rsp+0x40], [rsp+0x48], ...} is a valid argv"],
63
- effect: "execve(\"/bin/sh\", rsp+0x30, environ)")
64
- OneGadget::Gadget.add(build_id, 270029,
65
- constraints: ["rbx == NULL", "rdx == NULL", "rsi == NULL", "[rsp+0x30] == NULL || {[rsp+0x30], [rsp+0x38], [rsp+0x40], [rsp+0x48], ...} is a valid argv"],
66
- effect: "execve(\"/bin/sh\", rsp+0x30, environ)")
67
- OneGadget::Gadget.add(build_id, 270034,
68
- constraints: ["rbx == NULL", "rdx == NULL", "rsi == NULL", "[rsp+0x30] == NULL || {[rsp+0x30], [rsp+0x38], [rsp+0x40], [rsp+0x48], ...} is a valid argv"],
69
- effect: "execve(\"/bin/sh\", rsp+0x30, environ)")
70
- OneGadget::Gadget.add(build_id, 270039,
71
- constraints: ["rbx == NULL", "[rsp+0x30] == NULL || {[rsp+0x30], [rsp+0x38], [rsp+0x40], [rsp+0x48], ...} is a valid argv"],
72
- effect: "execve(\"/bin/sh\", rsp+0x30, environ)")
73
- OneGadget::Gadget.add(build_id, 270041,
74
- constraints: ["rbx == NULL", "[rsp+0x30] == NULL || {[rsp+0x30], [rsp+0x38], [rsp+0x40], [rsp+0x48], ...} is a valid argv"],
75
- effect: "execve(\"/bin/sh\", rsp+0x30, environ)")
76
- OneGadget::Gadget.add(build_id, 270044,
77
- constraints: ["rsi == NULL", "[rsp+0x30] == NULL || {[rsp+0x30], [rsp+0x38], [rsp+0x40], [rsp+0x48], ...} is a valid argv"],
78
- effect: "execve(\"/bin/sh\", rsp+0x30, environ)")
79
- OneGadget::Gadget.add(build_id, 270049,
80
- constraints: ["rsi == NULL", "[rsp+0x30] == NULL || {[rsp+0x30], [rsp+0x38], [rsp+0x40], [rsp+0x48], ...} is a valid argv"],
81
- effect: "execve(\"/bin/sh\", rsp+0x30, environ)")
82
- OneGadget::Gadget.add(build_id, 270055,
83
- constraints: ["[rsp+0x30] == NULL || {[rsp+0x30], [rsp+0x38], [rsp+0x40], [rsp+0x48], ...} is a valid argv"],
84
- effect: "execve(\"/bin/sh\", rsp+0x30, environ)")
85
- OneGadget::Gadget.add(build_id, 270062,
86
- constraints: ["readable: rax", "[rsp+0x30] == NULL || {[rsp+0x30], [rsp+0x38], [rsp+0x40], [rsp+0x48], ...} is a valid argv", "[[rax]] == NULL || [rax] == NULL || [rax] is a valid envp"],
87
- effect: "execve(\"/bin/sh\", rsp+0x30, [rax])")
88
- OneGadget::Gadget.add(build_id, 805713,
89
- constraints: ["[rsi] == 0x0", "rdi == NULL || {\"/bin/sh\", rdi, NULL} is a valid argv", "[rdx] == NULL || rdx == NULL || rdx is a valid envp"],
90
- effect: "execve(\"/bin/sh\", rsp-0x48, rdx)")
91
- OneGadget::Gadget.add(build_id, 805723,
92
- constraints: ["[rsi] == 0x0", "rdi == NULL || {\"/bin/sh\", rdi, NULL} is a valid argv", "[rdx] == NULL || rdx == NULL || rdx is a valid envp"],
93
- effect: "execve(\"/bin/sh\", rsp-0x48, rdx)")
94
- OneGadget::Gadget.add(build_id, 805728,
95
- constraints: ["[rsi] == 0x0", "rdi == NULL || {\"/bin/sh\", rdi, NULL} is a valid argv", "[rdx] == NULL || rdx == NULL || rdx is a valid envp"],
96
- effect: "execve(\"/bin/sh\", rsp-0x48, rdx)")
97
- OneGadget::Gadget.add(build_id, 805729,
98
- constraints: ["[rsi] == 0x0", "rdi == NULL || {\"/bin/sh\", rdi, NULL} is a valid argv", "[rdx] == NULL || rdx == NULL || rdx is a valid envp"],
99
- effect: "execve(\"/bin/sh\", rsp-0x40, rdx)")
100
- OneGadget::Gadget.add(build_id, 805731,
101
- constraints: ["[rsi] == 0x0", "rdi == NULL || {\"/bin/sh\", rdi, NULL} is a valid argv", "[rdx] == NULL || rdx == NULL || rdx is a valid envp"],
102
- effect: "execve(\"/bin/sh\", rsp-0x40, rdx)")
103
- OneGadget::Gadget.add(build_id, 805734,
104
- constraints: ["[rsi] == 0x0", "writable: rbp-0x40", "rdi == NULL || {\"/bin/sh\", rdi, NULL} is a valid argv", "[rdx] == NULL || rdx == NULL || rdx is a valid envp"],
105
- effect: "execve(\"/bin/sh\", rbp-0x40, rdx)")
106
- OneGadget::Gadget.add(build_id, 805736,
107
- constraints: ["[rsi] == 0x0", "writable: rbp-0x40", "rdi == NULL || {\"/bin/sh\", rdi, NULL} is a valid argv", "[rdx] == NULL || rdx == NULL || rdx is a valid envp"],
108
- effect: "execve(\"/bin/sh\", rbp-0x40, rdx)")
109
- OneGadget::Gadget.add(build_id, 805738,
110
- constraints: ["[rsi] == 0x0", "writable: rbp-0x40", "rdi == NULL || {\"/bin/sh\", rdi, NULL} is a valid argv", "[rdx] == NULL || rdx == NULL || rdx is a valid envp"],
111
- effect: "execve(\"/bin/sh\", rbp-0x40, rdx)")
112
- OneGadget::Gadget.add(build_id, 805739,
113
- constraints: ["[rsi] == 0x0", "writable: rbp-0x40", "rdi == NULL || {\"/bin/sh\", rdi, NULL} is a valid argv", "[rdx] == NULL || rdx == NULL || rdx is a valid envp"],
114
- effect: "execve(\"/bin/sh\", rbp-0x40, rdx)")
115
- OneGadget::Gadget.add(build_id, 805742,
116
- constraints: ["[rsi] == 0x0", "writable: rbp-0x40", "rdi == NULL || {\"/bin/sh\", rdi, NULL} is a valid argv", "[r12] == NULL || r12 == NULL || r12 is a valid envp"],
117
- effect: "execve(\"/bin/sh\", rbp-0x40, r12)")
118
- OneGadget::Gadget.add(build_id, 805746,
119
- constraints: ["[rsi] == 0x0", "writable: rbp-0x40", "rdi == NULL || {\"/bin/sh\", rdi, NULL} is a valid argv", "[r12] == NULL || r12 == NULL || r12 is a valid envp"],
120
- effect: "execve(\"/bin/sh\", rbp-0x40, r12)")
121
- OneGadget::Gadget.add(build_id, 805755,
122
- constraints: ["[rsi] == 0x0", "writable: rbp-0x40", "rdi == NULL || {\"/bin/sh\", rdi, NULL} is a valid argv", "[r12] == NULL || r12 == NULL || r12 is a valid envp"],
123
- effect: "execve(\"/bin/sh\", rbp-0x40, r12)")
124
- OneGadget::Gadget.add(build_id, 805759,
125
- constraints: ["[rsi] == 0x0", "writable: rbp-0x40", "rdi == NULL || {\"/bin/sh\", rdi, NULL} is a valid argv", "[r12] == NULL || r12 == NULL || r12 is a valid envp"],
126
- effect: "execve(\"/bin/sh\", rbp-0x40, r12)")
127
- OneGadget::Gadget.add(build_id, 805761,
128
- constraints: ["[rsi] == 0x0", "writable: rbp-0x40", "rdi == NULL || {\"/bin/sh\", rdi, NULL} is a valid argv", "[r12] == NULL || r12 == NULL || r12 is a valid envp"],
129
- effect: "execve(\"/bin/sh\", rbp-0x40, r12)")
130
- OneGadget::Gadget.add(build_id, 805767,
131
- constraints: ["writable: rbp-0x40", "rdi == NULL || {\"/bin/sh\", rdi, NULL} is a valid argv", "[r12] == NULL || r12 == NULL || r12 is a valid envp"],
132
- effect: "execve(\"/bin/sh\", rbp-0x40, r12)")
133
- OneGadget::Gadget.add(build_id, 805888,
134
- constraints: ["[r13] == NULL || r13 == NULL || r13 is a valid argv", "[r12] == NULL || r12 == NULL || r12 is a valid envp"],
135
- effect: "execve(\"/bin/sh\", r13, r12)")
136
- OneGadget::Gadget.add(build_id, 805891,
137
- constraints: ["[r13] == NULL || r13 == NULL || r13 is a valid argv", "[rdx] == NULL || rdx == NULL || rdx is a valid envp"],
138
- effect: "execve(\"/bin/sh\", r13, rdx)")
139
- OneGadget::Gadget.add(build_id, 805894,
140
- constraints: ["[rsi] == NULL || rsi == NULL || rsi is a valid argv", "[rdx] == NULL || rdx == NULL || rdx is a valid envp"],
141
- effect: "execve(\"/bin/sh\", rsi, rdx)")
142
- OneGadget::Gadget.add(build_id, 805936,
143
- constraints: ["writable: rbp-0x40", "rdi == NULL || {\"/bin/sh\", rdi, NULL} is a valid argv", "[r12] == NULL || r12 == NULL || r12 is a valid envp"],
144
- effect: "execve(\"/bin/sh\", rbp-0x40, r12)")
145
- OneGadget::Gadget.add(build_id, 805943,
146
- constraints: ["writable: rbp-0x40", "rax == NULL || {rax, rdi, NULL} is a valid argv", "[r12] == NULL || r12 == NULL || r12 is a valid envp"],
147
- effect: "execve(\"/bin/sh\", rbp-0x40, r12)")
148
- OneGadget::Gadget.add(build_id, 805947,
149
- constraints: ["writable: r13+0x10", "writable: rbp-0x40", "[r13] == NULL || r13 == NULL || r13 is a valid argv", "[r12] == NULL || r12 == NULL || r12 is a valid envp"],
150
- effect: "execve(\"/bin/sh\", r13, r12)")
151
- OneGadget::Gadget.add(build_id, 805950,
152
- constraints: ["writable: r13+0x10", "writable: rbp-0x40", "[r13] == NULL || r13 == NULL || r13 is a valid argv", "[r12] == NULL || r12 == NULL || r12 is a valid envp"],
153
- effect: "execve(\"/bin/sh\", r13, r12)")
154
- OneGadget::Gadget.add(build_id, 805954,
155
- constraints: ["writable: r13+0x10", "writable: rbp-0x40", "[r13] == NULL || r13 == NULL || r13 is a valid argv", "[r12] == NULL || r12 == NULL || r12 is a valid envp"],
156
- effect: "execve(\"/bin/sh\", r13, r12)")
157
- OneGadget::Gadget.add(build_id, 805958,
158
- constraints: ["writable: r13+0x10", "[r13] == NULL || r13 == NULL || r13 is a valid argv", "[r12] == NULL || r12 == NULL || r12 is a valid envp"],
159
- effect: "execve(\"/bin/sh\", r13, r12)")
160
- OneGadget::Gadget.add(build_id, 805968,
161
- constraints: ["writable: r13+0x10", "[r13] == NULL || r13 == NULL || r13 is a valid argv", "[r12] == NULL || r12 == NULL || r12 is a valid envp"],
162
- effect: "execve(\"/bin/sh\", r13, r12)")
163
- OneGadget::Gadget.add(build_id, 805976,
164
- constraints: ["[r13] == NULL || r13 == NULL || r13 is a valid argv", "[r12] == NULL || r12 == NULL || r12 is a valid envp"],
165
- effect: "execve(\"/bin/sh\", r13, r12)")
166
- OneGadget::Gadget.add(build_id, 927795,
167
- constraints: ["[rsp+0x38] != 0x0", "[rsp+0x60] == NULL || {[rsp+0x60], [rsp+0x68], [rsp+0x70], [rsp+0x78], ...} is a valid argv"],
168
- effect: "execve(\"/bin/sh\", rsp+0x60, environ)",
169
- closed_fds: ["[rsp+0x5c]", "[rsp+0x58]"])
170
- OneGadget::Gadget.add(build_id, 927799,
171
- constraints: ["[rsp+0x38] != 0x0", "[rsp+0x60] == NULL || {[rsp+0x60], [rsp+0x68], [rsp+0x70], [rsp+0x78], ...} is a valid argv"],
172
- effect: "execve(\"/bin/sh\", rsp+0x60, environ)",
173
- closed_fds: ["rdi", "[rsp+0x58]"])
174
- OneGadget::Gadget.add(build_id, 927804,
175
- constraints: ["[rsp+0x38] != 0x0", "[rsp+0x60] == NULL || {[rsp+0x60], [rsp+0x68], [rsp+0x70], [rsp+0x78], ...} is a valid argv"],
176
- effect: "execve(\"/bin/sh\", rsp+0x60, environ)",
177
- closed_fds: ["[rsp+0x58]"])
178
- OneGadget::Gadget.add(build_id, 927808,
179
- constraints: ["ecx != 0x0", "[rsp+0x60] == NULL || {[rsp+0x60], [rsp+0x68], [rsp+0x70], [rsp+0x78], ...} is a valid argv"],
180
- effect: "execve(\"/bin/sh\", rsp+0x60, environ)",
181
- closed_fds: ["[rsp+0x58]"])
182
- OneGadget::Gadget.add(build_id, 927898,
183
- constraints: ["([rsp+0x98] & 0xf000) == 0x2000", "[rsp+0xa8] == 0x103", "eax == 0x0", "[rsp+0x60] == NULL || {[rsp+0x60], [rsp+0x68], [rsp+0x70], [rsp+0x78], ...} is a valid argv"],
184
- effect: "execve(\"/bin/sh\", rsp+0x60, environ)",
185
- closed_fds: ["[rsp+0x58]"])
186
- OneGadget::Gadget.add(build_id, 927902,
187
- constraints: ["([rsp+0x98] & 0xf000) == 0x2000", "[rsp+0xa8] == 0x103", "[rsp+0x60] == NULL || {[rsp+0x60], [rsp+0x68], [rsp+0x70], [rsp+0x78], ...} is a valid argv"],
188
- effect: "execve(\"/bin/sh\", rsp+0x60, environ)",
189
- closed_fds: ["[rsp+0x58]"])
190
- OneGadget::Gadget.add(build_id, 927909,
191
- constraints: ["(eax & 0xf000) == 0x2000", "[rsp+0xa8] == 0x103", "[rsp+0x60] == NULL || {[rsp+0x60], [rsp+0x68], [rsp+0x70], [rsp+0x78], ...} is a valid argv"],
192
- effect: "execve(\"/bin/sh\", rsp+0x60, environ)",
193
- closed_fds: ["[rsp+0x58]"])
194
- OneGadget::Gadget.add(build_id, 927914,
195
- constraints: ["[rsp+0xa8] == 0x103", "eax == 0x2000", "[rsp+0x60] == NULL || {[rsp+0x60], [rsp+0x68], [rsp+0x70], [rsp+0x78], ...} is a valid argv"],
196
- effect: "execve(\"/bin/sh\", rsp+0x60, environ)",
197
- closed_fds: ["[rsp+0x58]"])
198
- OneGadget::Gadget.add(build_id, 927921,
199
- constraints: ["[rsp+0xa8] == 0x103", "[rsp+0x60] == NULL || {[rsp+0x60], [rsp+0x68], [rsp+0x70], [rsp+0x78], ...} is a valid argv"],
200
- effect: "execve(\"/bin/sh\", rsp+0x60, environ)",
201
- closed_fds: ["[rsp+0x58]"])
202
- OneGadget::Gadget.add(build_id, 928074,
203
- constraints: ["[rsp+0x60] == NULL || {[rsp+0x60], [rsp+0x68], [rsp+0x70], [rsp+0x78], ...} is a valid argv"],
204
- effect: "execve(\"/bin/sh\", rsp+0x60, environ)",
205
- closed_fds: ["[rsp+0x58]"])
206
- OneGadget::Gadget.add(build_id, 928087,
207
- constraints: ["[rsp+0x60] == NULL || {[rsp+0x60], [rsp+0x68], [rsp+0x70], [rsp+0x78], ...} is a valid argv"],
208
- effect: "execve(\"/bin/sh\", rsp+0x60, environ)",
209
- closed_fds: ["[rsp+0x58]"])
210
- OneGadget::Gadget.add(build_id, 928091,
211
- constraints: ["[rsp+0x60] == NULL || {[rsp+0x60], [rsp+0x68], [rsp+0x70], [rsp+0x78], ...} is a valid argv"],
212
- effect: "execve(\"/bin/sh\", rsp+0x60, environ)",
213
- closed_fds: ["rdi"])
214
- OneGadget::Gadget.add(build_id, 928096,
215
- constraints: ["[rsp+0x60] == NULL || {[rsp+0x60], [rsp+0x68], [rsp+0x70], [rsp+0x78], ...} is a valid argv"],
216
- effect: "execve(\"/bin/sh\", rsp+0x60, environ)")
217
- OneGadget::Gadget.add(build_id, 928103,
218
- constraints: ["readable: rax", "[rsp+0x60] == NULL || {[rsp+0x60], [rsp+0x68], [rsp+0x70], [rsp+0x78], ...} is a valid argv", "[[rax]] == NULL || [rax] == NULL || [rax] is a valid envp"],
219
- effect: "execve(\"/bin/sh\", rsp+0x60, [rax])")
220
- OneGadget::Gadget.add(build_id, 928108,
221
- constraints: ["readable: rax", "[rsi] == NULL || rsi == NULL || rsi is a valid argv", "[[rax]] == NULL || [rax] == NULL || [rax] is a valid envp"],
222
- effect: "execve(\"/bin/sh\", rsi, [rax])")
223
- OneGadget::Gadget.add(build_id, 928154,
224
- constraints: ["[rsp+0x38] != 0x0", "[rsp+0x60] == NULL || {[rsp+0x60], [rsp+0x68], [rsp+0x70], [rsp+0x78], ...} is a valid argv"],
225
- effect: "execve(\"/bin/sh\", rsp+0x60, environ)",
226
- closed_fds: ["[rsp+0x58]"])
227
-