Compare commits

...
1364 Commits
Author SHA1 Message Date
Mathias Svensson 91768424ba Release 3.9.1 2017-09-28 11:33:14 +02:00
Zach Riggle af2f8b4bf4 Fix shellcraft.arm.trap (#1041) 2017-09-27 16:21:32 -05:00
Zach Riggle ab0ac00c73 Disable glibc buffering in fread for processes using PTYs
See issue #1038 for extensive details
2017-09-26 11:26:45 -05:00
Zach Riggle d87ab3ac65 Try to cut down on the crazy verbosity of logging (#1036)
* Prevent Sphinx from dumping all level=INFO logging output to stdout.

See Gallopsled/pwntools#1036 for more information.

* Filter out Paramiko logs too, apply filter to all root handlers during testing

* Remove unused import

(cherry picked from commit 54c47b3daa)
2017-09-26 11:26:45 -05:00
Zach Riggle 23cd5cb819 Fix some unicode problems in readline (#1029)
Technically this introduces issues with e.g. 'unhex ffdf | python foo.py' if
foo.py uses .interactive().  However, that was already broken for other reasons.

Fixes #1004

(cherry picked from commit ebbe917713)
2017-09-26 11:26:45 -05:00
Kristoffer Søholm bb25140807 DynELF bug fixes (#1017)
* DynELF: trust ELF base address

* Bug fixes for DynELF:

 * Fixed lookup when not using libcdb
 * Fixed _find_linkmap returning 0 instead of None when linkmap doesn't
   exist
 * Fixed _lookup_build_id crashing if linkmap cannot be found
 * Misc cleanup

* Changes based on feedback
2017-09-21 14:10:21 -07:00
Mathias Svensson 92ad1a4933 Release 3.9.0 2017-09-11 18:52:47 +02:00
Zach Riggle 3e163e9cf2 Merge branch 'stable' into beta 2017-09-08 12:41:06 -05:00
Zach Riggle 267c6cc15a Force Ubuntu 12.04 until we can migrate to 14.04 (#1023)
* Force use of Ubuntu 12 builds on Travis CI until we can migrate to 14

* Fix Travis Dockerfile

* Add bash command logging to Travis scripts, since Travis removed its own logging

* curl should follow redirects when grabbing Ubuntu packages

* Update Travis cache directories to newer version of Python, as seen in Travis logs

* Use ::1 instead of ip6-localhost since Travis 12.04 changes broke it
2017-09-08 12:40:31 -05:00
Christophe GRENIER c438893d7e Fix for overwritten env when parsing core file (#1014)
* Fix for overwritten env when parsing core file

* warn_once message when dealing with overwritten pointer to env variable in core file
2017-09-06 12:55:37 -05:00
Mathias Svensson 1a94acab67 Release 3.9.0beta0 2017-07-29 12:23:04 +02:00
Mathias Svensson 6263a347bd Release 3.8.0 2017-07-29 10:23:27 +02:00
Mathias Svensson a344047348 Make concat_all faster while also simplifying it's logic (#1003) 2017-07-21 16:34:39 -05:00
Mathias Svensson 4aa96b48ba Merge branch 'beta' into dev 2017-07-15 00:21:49 +02:00
Mathias Svensson 6f2598aee0 Merge branch 'stable' into beta 2017-07-15 00:20:04 +02:00
Mathias Svensson 3f42ce8636 Change the author_email since the new pypi didn't accept the old one 2017-07-15 00:19:05 +02:00
Mathias Svensson 901f3eddb1 Merge branch 'beta' into dev 2017-07-14 22:57:36 +02:00
Mathias Svensson 5180230f04 Merge branch 'stable' into beta; release 3.8.0beta1 2017-07-14 09:05:40 +02:00
Mathias Svensson 1ab07de033 Release 3.7.1 2017-07-14 09:00:42 +02:00
Zach Riggle 5936d0f565 Merge branch 'beta' into dev 2017-06-27 13:53:03 -05:00
Zach Riggle e3fd03458a Merge branch 'stable' into beta 2017-06-27 13:52:27 -05:00
Zach Riggle 55016fb416 Fix config types for integer values (#998)
* Fix config types for integer values

Fixes Gallopsled/pwntools#988

* Add warning for unsupported configuration types
2017-06-26 18:52:38 -05:00
Zach Riggle 08b316098b Update ISSUE_TEMPLATE.md 2017-06-22 00:26:47 -05:00
Zach Riggle a27cb1c168 Update ISSUE_TEMPLATE.md 2017-06-21 11:37:26 -05:00
Zach Riggle d923729dfb Update ISSUE_TEMPLATE
Closes Gallopsled/pwntools#994
2017-06-21 11:35:14 -05:00
Mathias Svensson db75ecb897 Start working on 3.9.0dev 2017-06-19 23:42:29 +02:00
Mathias Svensson 0dc2949790 Release 3.8.0beta0 2017-06-19 22:31:39 +02:00
Mathias Svensson 52b8f4fa29 Release 3.7.0 2017-06-19 22:19:31 +02:00
Zach Riggle 89a848b51f Update CHANGELOG 2017-06-19 13:36:51 -05:00
Zach Riggle 672b4dd090 Update CHANGELOG 2017-06-19 13:34:42 -05:00
Zach Riggle 094e44fd65 Merge branch 'beta' into dev 2017-06-12 12:45:30 -05:00
Zach Riggle 4552624883 Merge branch 'stable' into beta 2017-06-09 17:30:50 -05:00
Kenny K b171f1e2e3 pwn template start() doesn't return io object if only local. (#975) 2017-06-09 17:29:05 -05:00
pedroysb 85523e6d8a Fixing error when setuid=True (#992)
Importing stat module to fix some errors on lines 361 to 364. The errors are caused when using the parameter setuid=True.
2017-06-09 12:41:38 -05:00
Zach Riggle 8b761fc0e3 Fix test which relies on w3challs (#993) 2017-06-09 12:23:00 -05:00
Zach Riggle b83db46c34 Fix issue with newer versions of ADB 2017-06-05 15:45:21 -05:00
Zach Riggle 40c1796fc4 Correct recvrepeat docs 2017-05-28 19:39:32 -05:00
Zach Riggle 984d54d9b2 Empty commit to test whether Docker.io rebuilds are large or small 2017-05-25 20:06:16 -05:00
Zach Riggle 3cbc527deb Update Makefile and generated Makefiles 2017-05-25 14:51:09 -05:00
Zach Riggle 1482fb7545 Add base configuration 2017-05-25 14:48:09 -05:00
Zach Riggle 7ed6f5fe6b Make pwntools:stable depend on pwntools:base 2017-05-25 14:47:36 -05:00
Zach Riggle fd5a7fea68 Fix "Full RELRO" detection in ELFs (targeting dev) (#981)
* Fix Full RELRO detection in ELFs.

This add supports for the newer DF_BIND_NOW and DF_1_NOW flags.
These are used instead of DT_BIND_NOW when linking with gold.
Also fixed the order of checks, now it reports "No RELRO" when
BIND_NOW is present but GNU_RELRO is not (in which case the bindings
are done at start but they will not be marked as read-only).

* Add x86 test binaries for relro check.
2017-05-25 14:32:35 -05:00
Steven Van Acker 8953dc3d5c bandit.labs.overthewire.org SSH is now on port 2220 (#984) 2017-05-25 14:32:05 -05:00
Zach Riggle fda1821fd9 LibcDB Docs, Doctests, Negative Caching, Sane Cache (#986)
* Make libcdb optional

* Add negative caching for libc databases

* Add docs and doctests, add md5/sha1/sha256

* Add libcdb to main docs

* Slightly more useful doctests

* Expose functions in __all__

* Slightly better logging messages

* Fix __all__
2017-05-23 04:42:09 -05:00
Zach Riggle f7568b47b3 Capitalize first words of sentences 2017-05-21 13:40:30 -05:00
Zach Riggle 2ccd36ca7f Fix Ubuntu versions 2017-05-21 13:38:13 -05:00
Zach Riggle 9062360041 Fix document heading 2017-05-15 18:37:00 -05:00
Zach Riggle 3f9c192a5e Add a bit more args docs 2017-05-15 13:02:59 -05:00
Mathias Svensson b8e902b611 Merge branch 'beta' into dev 2017-05-12 10:21:37 +02:00
Mathias Svensson d586d6f660 Merge branch 'stable' into beta 2017-05-12 10:06:53 +02:00
Mathias Svensson 6709a4f747 Release 3.6.1 2017-05-12 10:01:41 +02:00
Mathias Svensson 1a4a1e11ba Follow-up to #980 making it actually work 2017-05-12 09:57:34 +02:00
Zach Riggle f82c0aa3a2 Add mako files to MANIFEST (#980) 2017-05-10 19:59:41 -05:00
Zach Riggle 646ca1eb26 Attempt at fixing #974; I don't have a keyboard with a keypad right now, so can't test. (#979) 2017-05-10 17:00:33 -05:00
Mathias Svensson 8055ec98ce Prepare work on 3.8.0 2017-05-08 20:56:08 +02:00
Mathias Svensson aa1f3f7f5a Merge branch 'beta' into dev 2017-05-08 20:22:39 +02:00
Mathias Svensson 043627a56d Release 3.6.0 2017-05-08 20:00:47 +02:00
Mathias Svensson a40a0ecab4 Merge branch 'stable' into beta 2017-05-08 19:59:31 +02:00
Zach Riggle bbe20c9748 Update CHANGELOG 2017-05-04 13:40:55 -05:00
Zach Riggle c700f9194c Update CHANGELOG 2017-05-04 13:40:08 -05:00
Zach Riggle 71a3e43be3 Update CHANGELOG 2017-05-04 13:38:44 -05:00
Zach Riggle 267b9990c2 Update CHANGELOG 2017-05-04 13:38:32 -05:00
Zach Riggle cfee8e0b24 Update CHANGELOG 2017-05-04 13:37:45 -05:00
Zach Riggle 32a767d469 Update CHANGELOG 2017-05-04 13:37:06 -05:00
Zach Riggle eaea783e2a Verify corefiles are the same via hash before using cached copy (#970) 2017-05-04 13:04:48 -05:00
Zach Riggle 9bda42e45d Merge remote-tracking branch 'upstream/beta' into dev 2017-05-01 23:50:16 -05:00
Zach Riggle f4b3469fb4 Fix incorrect ordering in template for non-ssh remotes (#968) 2017-05-01 23:49:57 -05:00
Zach Riggle 0903f9055b Fix typo: PRSP vs PRPS 2017-05-01 15:13:45 -05:00
Zach Riggle 0a23a457c5 Add ARCH_HAS_ELF_RANDOMIZE 2017-05-01 15:13:45 -05:00
David Tomaschik 7fe6dd0e8e Respect TERM_PROGRAM for run_in_new_terminal. Fixes #964. (#967)
* Respect TERM_PROGRAM for run_in_terminal.  Fixes #964.

* Set args for TERM_PROGRAM.
2017-05-01 01:22:49 -05:00
Zach Riggle 4772a22fed Only use PPA for older Ubuntu releases (#961)
Fixes Gallopsled/pwntools#953
2017-04-28 12:25:38 -05:00
Roman 42692c685e Add ability to set env vars in template (#960)
* added ability to set env vars in template

* changed env param to general *a, **kw
2017-04-21 15:11:09 -05:00
micbou aa3acc162f Fix dd documentation (#959) 2017-04-21 15:10:51 -05:00
Mathias Svensson 676e6869a0 Merge branch 'beta' into dev 2017-04-20 01:25:48 +02:00
Mathias Svensson 9b50163760 Allow setting the terminal through a tuple instead of a list (#957) 2017-04-20 01:25:25 +02:00
Zach Riggle 289109f499 Merge remote-tracking branch 'upstream/beta' into dev 2017-04-18 13:44:45 -05:00
Roman e90fb15596 Fixed processing of lists in config file (#954)
* fixed handling of lists in config file

* changed list to tuple
2017-04-18 13:44:40 -05:00
Zach Riggle 3b9c0db1a2 Better error messages for run_in_new_terminal 2017-04-18 13:44:29 -05:00
Roman dd7a67b6d7 Fixed errors in template generator (#952)
* fixed port type

* missed exploit.py template

* fixed condition availability parameters
2017-04-17 12:35:47 -05:00
Mathias Svensson ad87c17f73 Merge branch 'beta' into dev 2017-04-15 11:24:55 +02:00
Mathias Svensson 2714a30488 Release 3.6.0beta1 2017-04-15 10:52:38 +02:00
Mathias Svensson ac386877d1 Release 3.5.1 2017-04-15 10:43:55 +02:00
Zach Riggle 4f08b6d79c Allow setting context.device=None, and use context.arch to determine default ABI for adb.compile (#950) 2017-04-13 13:54:17 -05:00
Zach Riggle 348f6dfbe7 Update CHANGELOG for 3.5.1 and 3.6.1beta release 2017-04-13 13:40:43 -05:00
Zach Riggle 80219df5cc Require a path for 'pwn template' (#947)
Closes Gallopsled/pwntools#943
2017-04-13 10:37:21 -05:00
Zach Riggle 065c79d29c Speed up ssh via caching checksec results (#945)
* Speed up ssh via caching checksec results

Closes Gallopsled/pwntools#944

* Fix logging message

(cherry picked from commit 8a7bb9b9f4)
2017-04-12 21:47:41 -05:00
Zach Riggle 310f186e5f Do not attempt to populate GOT and PLT symbols for Corefiles (#948)
Closes Gallopsled/pwntools#946
2017-04-12 21:47:05 -05:00
Hlynur Óskar Guðmundsson bac44542ed Made an error message when a default terminal is not found more verbose and helpful (#941) 2017-04-11 12:10:30 -05:00
Zach Riggle a54e697b55 Add CONFIG_COP_ACCESS from CVE-2017-0583 2017-04-04 17:06:18 -05:00
Gábor Szarka 5f1294af09 Make DynELF more robust to different base addresses (#933)
The check for when certain ELF fields contain offsets instead of pointers can be
made more precise by checking for the type field in the ELF header instead of
comparing the value to some hard-coded range.
2017-04-02 17:07:08 -05:00
Grazfather 7cc4ced8d6 gdb: Use quiet (-q) option (#940) 2017-04-02 17:06:17 -05:00
Mathias Svensson 5c72d62c90 Update the CRC list 2017-03-30 13:56:44 -05:00
Zach Riggle 925cb43024 Run autopep8 on known crcsums before merging Idolf's change, so that the difference is visible 2017-03-30 13:55:08 -05:00
Zach Riggle 6f42e1c337 Fix more logging messages 2017-03-28 11:16:08 -05:00
Zach Riggle 8a7bb9b9f4 Fix logging message 2017-03-28 11:14:50 -05:00
Mathias Svensson 512c2544b5 Start working on 3.7.0 2017-03-26 22:43:05 +02:00
Mathias Svensson 8120b5c037 Merge branch 'stable' into beta 2017-03-26 22:18:01 +02:00
Mathias Svensson 55456814fc Release 3.5.0 2017-03-26 21:13:03 +02:00
Zach Riggle eb3e3797cd Update CHANGELOG for 3.6.0beta release 2017-03-23 13:15:03 -05:00
Zach Riggle 3416b7c949 Fix conditional for logging 2017-03-19 17:11:33 -05:00
Zach Riggle dc9882abe7 Use _run for objdump output 2017-03-06 14:27:13 -06:00
Zach Riggle 664622fa07 Use all symbols in inverted PLT search 2017-03-06 14:05:53 -06:00
Zach Riggle 930f2a4a32 Do not dump PLT emulation data to DEBUG logs unless explicitly set via PLT_DEBUG 2017-03-04 18:31:24 -06:00
Zach Riggle 10ef77b997 Add missing link to Changelog 2017-03-04 16:10:50 -06:00
Zach Riggle ecba8e4b38 Update changelog for 3.5.0 2017-03-04 16:09:08 -06:00
Mathias Svensson 0d3b97b378 Merge branch 'beta' into dev 2017-03-03 23:20:08 +01:00
Zach Riggle 33945f6885 Clean up socket-class and socket-type code in sock/remote/listen (#920)
* Clean up socket-class and socket-type code in sock/remote/listen

* Slight change to docs

* Add doctests for listen and attribute documentation

* Fix bug in listen.close()

* Fix regression on ipv6 sockets

* Simplify documentation

* Fix doctest
2017-03-03 14:04:58 -06:00
Zach Riggle b7ddfa995e Fix ARM PLT parsing, and big-endian ARM emulation (#910)
* Do not use UC_MODE_BIG_ENDIAN, its support is poor

* Ghetto-swap endianness for emulation of PLT instructions

* Reduce instruction alignment so that all ARM PLT entries are found

* Add tests for ELF PLT loading

* Fix canary detection on PowerPC

* Fix x32 emulation

* Fix two failing doctests

* Add AArch64 to supported big-endian architectures

* Add MIPS GOT parsing code, fix unpack macros to use ELF settings

* Why, MIPS, are you so complicated?

* Catch weird edge cases

* I don't know what's real anymore

* Fix synthetic symbol generation and add tests

* Remove canary test

* Guard against errors in MIPS GOT

* Fix doctests
2017-03-02 19:03:45 -06:00
Mathias Svensson 3b2be2b2a7 Merge branch 'stable' into beta 2017-03-02 11:47:55 +01:00
Zach Riggle 0a3ac521ad Work around appdirs error for Travis CI builds (#924)
Closes Gallopsled/pwntools#921
2017-03-01 17:58:22 -06:00
Zach Riggle 1f72e45eaf Attempt appdirs workaround 2017-02-25 01:44:55 -05:00
Zach Riggle 421a3093fc Remove spinners that will probably get us yelled at 2017-02-25 01:25:08 -05:00
Zach Riggle d08fc6d3a0 Simplify Travis Dockerfile 2017-02-24 15:50:33 -05:00
Zach Riggle dd6931907a Update user-agents 2017-02-24 14:15:29 -05:00
Zach Riggle de3a68d8b4 Update 'pwn template' template to support argv and auto-downloading the target file (#919) 2017-02-22 12:09:55 -05:00
Zach Riggle 93b828ff97 Add missing basic templates for AArch64 (#918)
* Add missing basic templates for AArch64

* Simplify aarch64 templates

* Fix broken doctests
2017-02-21 19:48:58 -05:00
Zach Riggle 326dd83321 Handle errors during ssh.checksec() (#917)
* Handle errors during ssh.checksec()

Closes Gallopsled/pwntools#916

* Add additional error handling for ulimit checks
2017-02-21 14:57:58 -05:00
Mathias Svensson f8bb49c78f Merge branch 'beta' into dev 2017-02-17 14:56:39 +01:00
Mathias Svensson 510e247034 Merge branch 'stable' into beta 2017-02-17 14:48:14 +01:00
Mathias Svensson 4d529cd543 Release 3.4.1 2017-02-17 14:29:51 +01:00
Kristoffer Søholm e021f57806 Fixed bug in generatePadding (issue #891) 2017-02-17 14:15:31 +01:00
Zach Riggle b6cfec6284 Do not fail with gdb.debug() over ssh when given an absolute path (#894)
* Do not fail with gdb.debug() over ssh when given an absolute path

Fixes Gallopsled/pwntools#885

* Prevent failing on stable since this directory doesn't exist
2017-02-17 00:02:53 -05:00
Zach Riggle 4834032b14 Doctest all members, even if they are not exported via __all__ (#914)
* Doctest all members

* Fix doctest failures in asm and remove canary in context

* Fix failing doctest

* Use automodule for pwnlib.context

* Fix failing tests in context module

* Use automodule for pwnlib.memleak
2017-02-16 23:40:50 -05:00
Zach Riggle 1273552189 Do not skip "hidden" doctests (#912)
* Check to see if hidden members are doctested

* Do not skip undocumented members

* Fix broken tests, promote missing tests
2017-02-16 21:30:35 -05:00
Zach Riggle ef1e3cfb97 Fix regression in f4b0e3a5 2017-02-16 19:43:26 -05:00
Zach Riggle e9fc0125a6 Add "pwn template" command for generating templates (#909) 2017-02-16 19:38:34 -05:00
Zach Riggle 81239be429 Fix checksec nx, execstack, relro reporting (#904)
* Fix checksec nx, execstack, relro reporting

Also add a disable_nx function

* Add disablenx command-line utility

Also fix bug where invoking command-line utilities directly by module name
(python -m pwnlib.commandline.foo) would fail
2017-02-16 17:20:28 -05:00
Zach Riggle f4b0e3a5b9 Do not allow interactive assembly, it doesn't work anyway 2017-02-16 16:48:59 -05:00
Kristoffer Søholm 1f1a6667a1 Added test for issue #891 (#903) 2017-02-15 17:00:54 -05:00
Zach Riggle 464e9e54e1 Add 'pwn debug' command-line utility (#905)
Also fixes a bug in process() which would throw the wrong exception
when qemu-user cannot be located for a non-native binary.
2017-02-15 17:00:24 -05:00
Zach Riggle a786a58db7 Emulate PLT for better symbols (#899)
* Emulate all relocation sections for PLT symbols

This adds a dependency on Unicorn

* Don't look up empty symbols
2017-02-15 16:57:24 -05:00
Zach Riggle bc471d13f9 Fix MIPS ELF bit-ness by checking masks in increasing order (#901)
Closes Gallopsled/pwntools#900
2017-02-14 11:36:28 -05:00
Zach Riggle 6af464fc0e Make SROP doctests slightly more verbose 2017-02-13 18:12:52 -05:00
Zach Riggle 29e38a7d49 Add missing --init to docker invocation 2017-02-13 18:02:11 -05:00
Zach Riggle 658589704a Add pwnlib.config module and documentation (#893)
This adds functionality for user configuration files at ~/.pwn.conf
and /etc/pwn.conf.  Previously this was only used by the pwnlib.log
module, and was entirely undocumented.

This is now documented, and offers an easy mechanism for other parts
of the code to have extension points.
2017-02-13 17:55:01 -05:00
Zach Riggle 71855ebd2f Fix Aarch64 syscalls (#897)
* Remove unavailable syscalls from AArch64

The Linux kernel has apparently stopped supporting these

* Rewrite shellcraft.aarch64.linux.cat, add open which uses openat

Fixes Gallopsled/pwntools#896

* Fix doctests to use openat
2017-02-13 17:50:45 -05:00
Zach Riggle 393751351b Add dockerfile for testing-in-a-box on Xenial (#895) 2017-02-13 17:34:26 -05:00
Mathias Svensson c8a690d617 Removed all uses of sh_command_with and sh_prepare (#892) 2017-02-13 14:59:27 -05:00
Kristoffer Søholm 8b8a50b580 Fixed bug in generatePadding (issue #891) 2017-02-13 11:39:42 +01:00
Mathias Svensson 3b07dfe7cc Begin work on 3.6.0 2017-02-13 01:52:59 +01:00
Mathias Svensson 5877f8e97e Merge branch 'stable' into beta-staging 2017-02-13 01:34:31 +01:00
Mathias Svensson 4ebcbee34b Release 3.4.0 2017-02-13 01:31:16 +01:00
Mathias Svensson d25d62c126 Merge branch 'stable' into stable-staging 2017-02-13 01:31:00 +01:00
Zach Riggle 5392611ed5 Use updated testing scripts from 3.5.0 on 3.4.0 2017-02-13 01:17:57 +01:00
Zach Riggle 7c139c7179 Shellcode syscall templates (#871)
* Add templates from generator

* Add abi.stack to all ABIs

* Enable shellcraft.arch.os.foobar.template

* Add pwnlib.registers.current()

* Add syscalls symlinks

* Add syscall generator

* Enable shellcraft.foo() shortcut for shellcraft.arch.os.syscalls.foo()

* Make templates more verbose

* Remove old templates

* Add makefile

* Delete old templates, make shellcraft --list work

This also speeds up boot time by like 0.05 seconds

* Remove unnecessary execve wrappers

* Check for common arch as well

* Don't explode on string arguments that are register names

* Catch bad argument names

* Remove accidental import

* Add aarch64 ABIs since we enabled aarch64 tests

* Fix mmap vs mmap2 syscall

* Make shellcraft command-line work for syscalls

* Remove unnecessary wrapper templates

* Set all default values to zero

* Add example of automatic determination of types

* Add missing register architectures

* Add PowerPC ABIs

* More syscall examples

* Handle mmap vs mmap2

* Add missing import, use full path

* Just use the string name

* Fix rt_sigreturn on amd64

* __NR_ --> SYS_ because of old expectations

* rstrip to remove blankline

* Fix Thumb doctests which uses unpredictable jump labels

* Import additional syscalls by updating the function source.

Support variable-argument syscalls.

Support spilling to the stack.

* Simplified constants.eval logic means no extra parens

* Simplify vararg representation; fix oepn() argument name explicitly

* Fix syscall examples

* Fix reordering of arguments, since we have to support stack spill

* Fix argument name in doctest

* Make Codacy happy

* Restore connect template accidentally removed in 9fceb12b

* Scrape all architectures for syscall names

* Enable void* and void** to be pushed

* Make Codacy happy

* Add __doc__ to sdist

* Follow shellcraft template symlinks

* Detect syscall shellcodes in shellcraft based on path

(cherry picked from commit 94462845fa)
2017-02-12 18:37:20 -05:00
Zach Riggle da9ce55dfd Fix changelog formatting 2017-02-12 18:26:11 -05:00
Zach Riggle 9d394e0df1 Add missing info to 3.4.0 changelog 2017-02-12 18:26:02 -05:00
Zach Riggle f962d2bd21 Add missing info to 3.4.0 changelog 2017-02-12 18:24:50 -05:00
Zach Riggle 667d290d9b Fix regression from 189b1fb3c 2017-02-11 15:16:14 -05:00
Zach Riggle 766c4d8a7f sh_string should return '' for empty strings (#887) 2017-02-11 15:02:46 -05:00
Zach Riggle 189b1fb3c2 Add missing registers to AArch64 sigreturn frame, and update test 2017-02-10 22:54:24 -05:00
Zach Riggle 6c1b882b40 Upgrade warnings to errors in demo 2017-02-10 22:38:04 -05:00
Zach Riggle 0c76348072 Fix AArch64 SROP register name 2017-02-10 22:37:23 -05:00
Zach Riggle 2f7d78bc64 Add sigreturn/corefile examples and sanity tests 2017-02-10 22:34:27 -05:00
Zach Riggle 646723fa8e Remove unneded arg from aarch64 sigreturn 2017-02-10 22:19:11 -05:00
Zach Riggle e77915fba6 Handle PC/SP being invalid in Corefiles 2017-02-10 22:16:13 -05:00
Zach Riggle a02e8da1ea Add AArch64 support to corefiles 2017-02-10 22:16:13 -05:00
Zach Riggle 6979cb0d2b Search for QEMU coredumps first 2017-02-10 21:57:18 -05:00
Zach Riggle bc8942006b Convert alignment error to a warning; add AArch64 2017-02-10 21:54:26 -05:00
Zach Riggle 07c7b51f25 Add ip and fp aliases to user_regs_struct on arm 2017-02-10 21:51:53 -05:00
Zach Riggle ee655cac60 Add Android and AArch64 support to SigreturnFrame 2017-02-10 21:19:48 -05:00
Zach Riggle b668815323 Fix elf.functions not containing back-references 2017-02-10 21:07:56 -05:00
Zach Riggle a26a1a1f35 Permit setting SROP arguments directly 2017-02-10 21:03:26 -05:00
Zach Riggle ab42519e26 Enable disassembling entire functions 2017-02-10 19:28:59 -05:00
Zach Riggle 59b44b4fe6 Fix typo from 0c8006ca 2017-02-10 19:28:26 -05:00
Zach Riggle f4f21f147b Squelch error messages when restarting the server 2017-02-10 12:54:01 -05:00
Zach Riggle c06822571f Do not overrite tube.flat with ADB protocol Client 2017-02-10 12:40:22 -05:00
Zach Riggle 383a4f4596 adb.push() should return the target path 2017-02-09 15:25:13 -05:00
Zach Riggle 25d63da30e Do not print connection messages when using AdbClient 2017-02-09 15:20:01 -05:00
Zach Riggle dd2ad30a51 Catch exceptions when SSHing into machines with unsupported architectures (#884)
Fixes fefd48f34
2017-02-05 17:00:09 -05:00
Zach Riggle d160f9b7c9 Make corefiles great again (#839)
Adds a large amount of functionality around Corefiles, to support smarter exploitation

Adds a ".corefile" property to both local and remote (ssh) processes.  See the
documentation for the corefile module for extensive examples and tests.

Additionally, context.delete_corefiles and context.rename_corefiles have been added,
to control the behavior of the ".corefile" property.
2017-02-05 10:49:50 -05:00
Zach Riggle 0bdbc2b8c3 Make pwnlib.rop consistent with context.bytes (#882)
Fixes Gallopsled/pwntools#879
2017-02-05 09:36:45 -05:00
Zach Riggle d0c4d8488e Disable exit-on-error at the end of bash scripts (#881) 2017-02-05 07:43:38 -05:00
Zach Riggle f3968afbbb Add aarch64 documentation, which enables doctests (#875)
* Add aarch64 documentation, which enables doctests

* Fix failing doctest

* Attempt to figure out whats going on with Travis

* Use the Xenial version of qemu-static since the Zesty version is broken for AArch64
2017-02-02 00:32:25 -05:00
Zach Riggle 2d04acb867 Enhance adb.which to support all=True 2017-01-31 15:05:26 -05:00
Zach Riggle 62842e20f0 Make command-line tools work better 2017-01-29 18:50:46 -05:00
Zach Riggle c929217947 Restore dupsh from d21af22f82
Closes Gallopsled/pwntools#873
2017-01-27 08:17:16 -05:00
Zach Riggle ff08a859f8 Docker: Install unprivileged user pwntools, use correct tags 2017-01-26 16:03:26 -05:00
Zach Riggle ba24b440c5 Convert symlink to actual file, since Docker Hub doesnt like symlinks 2017-01-26 14:40:34 -05:00
Zach Riggle b31adf27d0 Update dockerfiles and add various distros / release versions 2017-01-26 14:04:37 -05:00
Zach Riggle 20d27c651a Silence commits in the build logs 2017-01-25 18:14:06 -05:00
Zach Riggle ba7911651e Install a recent version of GDB onto Travis (#872)
These files should be cached automagically.
2017-01-25 17:21:59 -05:00
Zach Riggle cded6cda47 Make upgrades / add fields to process() (#869)
- Show the PID when a process is created
- Make process.cwd into a property, which fetches the real CWD from procs
- Record the UID/GID and SUID/SGID of the executed file
- Add a few doctests
- Make _stop_noticed a timestamp
2017-01-24 19:30:26 -05:00
Zach Riggle 25941b52bb Multiple SSH enhancements (#868)
- Break out ssh_channel into subclass ssh_process
- Make ssh.process() directly instantiate ssh_process
- Add ssh_process().ELF
- Add ssh_process().corefile
- Record the UID and GID of the executed binary
- Add the created PID to the ssh_process message
2017-01-24 19:02:57 -05:00
Zach Riggle b79a750af6 Force-install libcapstone3 since it is causing errors 2017-01-24 18:02:43 -05:00
Zach Riggle eede2e2e1d Always upgrade Pip first 2017-01-24 17:43:19 -05:00
Zach Riggle 2a59f5cf4c Fix chunked reading of ELF files (#865)
* Fix chunked reading of ELF files

This introduces a new dependency on 'intervaltree', which is used
to automatically select segments which are relevant for a given
virtual-address range.

This also introduces a new ELF.memory attribute, which is the tree
of memory ranges, which point at the segment objects that describe
the memory range.

These are recalculated when ELF.address is adjusted, and we have
tests for that.

This also optimizes some of the other routines to avoid the wrapped
file-seeking, and to just use the mmap.

* Rewrite install scripts to use more modern versions of binutils

* Load segments in file-order, chop any overlaps
2017-01-24 13:41:29 -05:00
Mathias Svensson a3e82e27bb Fix a few edge cases in weird ELF files (#867)
* Fix a few edge cases in weird ELF files

* Add a check for PT_LOAD
2017-01-24 19:14:29 +01:00
Zach Riggle 368a708663 Upgrade documentation requirements on Travis 2017-01-24 12:00:34 -05:00
Zach Riggle 4a7de306f0 Convert impossible doctest into a code-block 2017-01-23 15:47:43 -05:00
Zach Riggle 69bbd0839a Clean up pwnlib.asm documentation and doctests 2017-01-23 15:39:36 -05:00
Zach Riggle 475ffa632e Always run Android tests on staging branches and new tags (#866) 2017-01-23 14:43:32 -05:00
Zach Riggle 06db497901 Add a bit more documentation to context.rst 2017-01-23 12:16:30 -05:00
Zach Riggle 5106c4eb75 Fix test in dpkg_search_for_binutils 2017-01-23 12:11:02 -05:00
Zach Riggle 08b7b190a7 A few documentation touch-ups 2017-01-23 12:08:36 -05:00
Zach Riggle 8259d07207 Remove useless doctest lines 2017-01-23 12:01:27 -05:00
Zach Riggle ad2eb77cfa Explicitly run a few asm tests 2017-01-23 12:00:08 -05:00
Zach Riggle ec04c860c0 Remove unnecessary doctests:: blocks 2017-01-23 11:59:48 -05:00
Zach Riggle ffe4cf6807 Add doctest for print_binutils_instructions 2017-01-23 11:19:36 -05:00
Zach Riggle 673073f08d Add a test for pwnlib.asm.dpkg_search_for_binutils 2017-01-23 11:15:57 -05:00
Zach Riggle 0e45f23af8 Add pwnlib.protocols module (#860)
* Add pwnlib.protocols module

Migrate pwnlib.adb.protocol into that directory, and add compatibility shims

* Add documentation links, and run doctests

* Make doctests run

* pwnlib.protocols.adb.Client.transport should work with no device
2017-01-20 18:59:23 -05:00
Zach Riggle 31cd98affe Do not truncate the ELF file when saving to the same path 2017-01-20 15:27:46 -05:00
Zach Riggle 3e4a1bcc72 Fix errant version number printing 2017-01-20 15:22:59 -05:00
Zach Riggle 85c3074574 Allow calling ELF.save() with no arguments 2017-01-20 15:22:59 -05:00
Zach Riggle 178e64a4f7 Add symlink option for ssh.set_working_directory to simplify exploits (#862)
* Add symlink option for ssh.set_working_directory to simplify exploit code

* Add additional options and tests to symlink=xxx
2017-01-20 14:58:08 -05:00
Zach Riggle 179476604e Fix error message format string
Closes Gallopsled/pwntools#863
2017-01-20 14:38:37 -05:00
Zach Riggle fc6e00d9f0 Update changelog for 3.5.0 2017-01-19 15:18:17 -05:00
Zach Riggle 8b1f1dce84 Update changelog for 3.5.0 2017-01-19 15:11:44 -05:00
Zach Riggle 8345bc3824 Add parse_kconfig and kernel information to pwnlib.elf.ELF (#861) 2017-01-19 11:01:31 -05:00
Zach Riggle 300f8e0c1a Speed up processing of symbols slightly, by not checking for each entry 2017-01-17 16:38:01 -05:00
Zach Riggle 9ace73a977 Replace broken function-decorator context.quiet with working context.quietfunc
Fixes: ae6a0745f
2017-01-17 15:10:25 -05:00
Zach Riggle fb16e158ec Use tubes.buffer for net.wget, add more tests 2017-01-17 13:58:49 -05:00
Jakub Wilk e519874947 Fix typos (#859) 2017-01-16 11:42:38 -05:00
Zach Riggle 2e90d05156 Actually implement ssh.sftp setter, so it can be set to None 2017-01-14 15:05:15 -05:00
Zach Riggle b6e3d5d8c5 Fix register usage in execve shellcode (#857)
The previous code worked, but we emitted a register swap that hid the fact we were using the wrong registers

Fixes Gallopsled/pwntools#856
2017-01-13 14:00:28 -05:00
Zach Riggle 0726d8d339 Fix hexdump alignment for weird widths
Closes Gallopsled/pwntools#849
2017-01-12 17:57:54 -05:00
Mathias Svensson bd5a368754 Merge branch 'beta' into dev 2017-01-12 23:48:54 +01:00
Mathias Svensson 602efd2790 Release 3.4.0beta4 2017-01-12 23:42:25 +01:00
Mathias Svensson 2f7f0de984 Release 3.3.4 2017-01-12 23:40:13 +01:00
Zach Riggle 45d2c11535 Update changelog for 3.3.4 2017-01-12 17:30:30 -05:00
Zach Riggle 16b507e197 Change hexdump_iter to not rely on the length of its input file (#850)
We cannot determine the length of the file if passed e.g. a tube or a pipe or PTY or character device (e.g. stdin or /dev/null).

Supercedes: 9c2f0f4e
(cherry picked from commit 14f717b7b4)
2017-01-12 17:20:15 -05:00
Zach Riggle 53f041a4d2 Fix shellcraft.amd64.popad registers (#853)
Fixes Gallopsled/pwntools#848
2017-01-12 16:47:44 -05:00
Zach Riggle b2a5b76cf7 Do not perform temporary register selection if we don't need to (#852)
Fixes Gallopsled/pwntools#847
2017-01-12 16:36:49 -05:00
Zach Riggle 9cb438842c Use class- and init-level documentation for Sphinx autodocs 2017-01-12 16:09:23 -05:00
Zach Riggle 14f717b7b4 Change hexdump_iter to not rely on the length of its input file
We cannot determine the length of the file if passed e.g. a tube or a pipe or
or PTY or character device (e.g. stdin or /dev/null).
2017-01-12 15:01:42 -05:00
Zach Riggle f792407c19 Remove hanging comment 2017-01-11 19:22:48 -05:00
Zach Riggle 9c2f0f4e89 Fix hexdump_iter for actual file objects, like those used by phd (#846) 2017-01-11 15:06:11 -05:00
Zach Riggle eb0bb6ea8d Add doctest for hexdump_iter 2017-01-11 00:51:28 -05:00
Zach Riggle f46112e873 Fix hexdump_iter for actual file objects, like those used by phd 2017-01-11 00:45:39 -05:00
Zach Riggle 975844d83d Add SigreturnFrame.__flat__ 2017-01-10 21:29:36 -05:00
Zach Riggle 466c0e4179 Add elf.process, elf.fit, process.fit
Also fix the implementation of elf.flag
2017-01-10 21:27:50 -05:00
Zach Riggle 17e4f01976 Enhance output of amd64.mov shellcraft for very large values 2017-01-10 18:18:34 -05:00
Mathias Svensson fecd6f8222 Merge branch 'beta' into dev 2017-01-11 00:03:09 +01:00
Mathias Svensson 7ba3a1b32f Release 3.4.0beta3 2017-01-10 23:53:59 +01:00
Mathias Svensson d1edd275d9 Release 3.3.3 2017-01-10 23:52:50 +01:00
Zach Riggle 8f012947e9 Add build-essential and pip upgrade to installation steps (#845)
Fixes Gallopsled/pwntools#844
2017-01-10 17:35:50 -05:00
Zach Riggle 36b05bac2b Add doctests for the hexdump utility (#842)
Related: Gallopsled/pwntools#837
Related: Gallopsled/pwntools#840
2017-01-10 17:21:54 -05:00
Zach Riggle cb4991c41d Fix regression in amd64.mov with 32-bit values >= 0x80000000 (#843)
Fixes Gallopsled/pwntools#841
Caused by: Gallopsled/pwntools#504 (9ca377c)
2017-01-10 15:56:50 -05:00
Mathias Svensson 65f18b6091 Merge branch 'beta' into dev 2017-01-10 18:43:46 +01:00
Mathias Svensson 48616c633d Release 3.4.0beta2 2017-01-10 18:30:16 +01:00
Mathias Svensson 323975f343 Release 3.3.2 2017-01-10 18:28:24 +01:00
Zach Riggle f65c258956 Fix hexdump regression in 3.3.1 (#840) 2017-01-10 12:15:34 -05:00
Mathias Svensson c928a0425e Merge branch 'beta' into dev 2017-01-10 17:00:15 +01:00
Mathias Svensson f5e16d3db6 Release 3.4.0beta1 2017-01-10 16:59:22 +01:00
Mathias Svensson d55874a6d3 Release 3.3.1 2017-01-10 16:53:24 +01:00
Zach Riggle 0426d498d9 Resolve feature regression in hexdump(..., cyclic=True)
This code wasnt updated when the code was changed to operate on file descriptors.

Additionally, there was a functional regression, that the first line would be skipped.

Fixes: Gallopsled/pwntools#836
Caused by: Gallopsled/pwntools#695 (d65991d)
2017-01-09 21:59:19 -05:00
Zach Riggle fefd48f341 Add ssh.checksec functionality (#835)
Looks like this:

[x] Connecting to example.pwnme on port 22
[+] Connecting to example.pwnme on port 22: Done
[*] [email protected]:
    Distro    Ubuntu 14.04
    OS:       linux
    Arch:     amd64
    Version:  3.11.0
    ASLR:     Enabled
    Note:     Susceptible to ASLR ulimit trick (CVE-2016-3672)

Fixes Gallopsled/pwntools#753
2017-01-09 13:55:38 -05:00
Zach Riggle 132f48e6ee Fix failing doctest. Not sure what changed, but it was clearly not guaranteed to be right, given global state. 2017-01-07 19:16:04 -05:00
Zach Riggle e205e17b6d Fix doctests in ELF module 2017-01-07 18:32:37 -05:00
Zach Riggle d0267f3ee7 packing.fit() should handle extremely large offsets as if they are cyclic patterns 2017-01-07 18:21:14 -05:00
Zach Riggle 0c8006ca4e Enable passing an elf.Function to flat() 2017-01-07 18:14:57 -05:00
Zach Riggle bd88c92991 Greatly enhance and update the pwnlib.elf module documentation. 2017-01-07 18:10:59 -05:00
Zach Riggle 12f1bb9126 Add signal names to negative exit codes for process.poll() 2017-01-07 16:37:57 -05:00
Zach Riggle 3fa2c659fd Merge branch 'beta' into dev 2017-01-05 12:41:28 -05:00
Zach Riggle a2c67e5075 Merge branch 'stable' into beta 2017-01-05 12:39:25 -05:00
Zach Riggle 54e722819b Defer attempts to start ADB server until we actually fail to connect (#833)
* Defer attempts to start ADB server until we actually fail to connect

* Upgrade to a warning message; fix .version() multiple calls with _autoclose

* Add doctest which tests the kill/restart behavior
2017-01-05 12:38:51 -05:00
Zach Riggle 179a0656f5 Add better example of NOPTRACE 2017-01-04 23:16:22 -05:00
Zach Riggle 58b2e36a1b Fix empty code-block 2017-01-04 23:13:50 -05:00
Zach Riggle 24ae51dae4 Greatly enhance documentation for the GDB module, and expose its members in toplevel 2017-01-04 23:06:34 -05:00
Zach Riggle 14e68ec226 Remove _raw variants from public documentation 2017-01-04 14:57:22 -05:00
Zach Riggle 485dcede2c Fix heading style for ADB docs 2017-01-04 14:45:54 -05:00
Zach Riggle 50acdbbe41 Add hyperlinks to tube class 2017-01-04 14:44:30 -05:00
Zach Riggle 4e0e9d2acb Add hyperlinks to process class 2017-01-04 14:43:51 -05:00
Zach Riggle bc7c8cd423 Add missing :const: to docstrings 2017-01-04 14:37:43 -05:00
Zach Riggle a8446bef47 Fix sh_string RST formatting 2017-01-04 14:36:21 -05:00
Zach Riggle afdcdec577 Fix sh_string docs 2017-01-04 14:23:06 -05:00
Zach Riggle c13ff2cb08 Clarify documentation and remove leading process.XXX in docs 2017-01-04 14:18:02 -05:00
Zach Riggle a12d0b6a4c Move PTY, PIPE, STDOUT to toplevel 2017-01-04 14:15:38 -05:00
Zach Riggle 3dd6045488 Fix regression caused by 0cead77 2017-01-04 14:14:23 -05:00
Zach Riggle cca9782424 Add PR_SET_PTRACER to process and ssh.process (#828)
* Add PR_SET_PTRACER to initialization, and add doctests for process.leak/corefile

* Add PR_SET_PTRACER to SSH processes

* Do not warn about YAMA if we dont need to

* Fix doctest to use raw strings

* Fix typo in doctest

* Apparently GDB is not installed on Travis by default

* Add warning message to process("foo") vs process("./foo")

* Add gdb.corefile; make run_in_new_terminal return a PID

* Intentionally break doctest because I dont believe that it worked

* Fix codacy issues

* Fix gdb.attach return value

* Add missing import

* Fix typo, use waitpid

* Refactor some code into gdb.version / gdb.binary

* Permit GDB with multipart versions

* Fix repr() on Corefile

* Silence run-in-new-terminal message for gdb.corefile

* Fix version number

* Remove Yama warning message entirely, it should no longer be necessary

* Version detection is hard.  Regular expressions to the rescue!

* Remove process.kill/stop/resume, those will be a different PR

* Fix doctests

* The GDB used by Travis must be so old!

* Apparently Travis is entirely borked.  Use a less robust test.
2017-01-04 12:59:22 -05:00
Zach Riggle 5ce5339ab5 Silence warning during doctests 2017-01-04 12:58:04 -05:00
Zach Riggle 0cead77039 Move STDOUT/PIPE to process class, so they can be referenced directly 2017-01-04 12:52:19 -05:00
Zach Riggle 1d59a90fa8 Change all imports to absolute per PEP-328, and sort imports (#832) 2017-01-03 18:04:45 -05:00
Zach Riggle ac017d97dc Enable leaking memory relatively with MemLeak (#822)
* Enable leaking memory relatively with MemLeak

Fixes Gallopsled/pwntools#758

* Add RelativeMemLeak alias for MemLeak(..., relative=True)

* Make codacy happy
2016-12-29 13:21:02 -05:00
WGH b584ca349a fixed RuntimeError in setup.py caused by pandoc on non-amd64 arches (#820)
If pandoc is not installed locally, pwntools' setup.py
tells pypandoc to download one.

Unfortunately, it fails on non-amd64 arches because
pypandocs provides precompiled binaries only for amd64.

Since pypandoc is not hard dependency for pwntools,
this error can be skipped without major harm.

In fact, pwntools' setup.py already handles ImportError
gracefully. The problem is, arch mismatch causes
a completely different exception.
2016-12-28 19:12:47 -05:00
Mathias Svensson 8b30700f92 Bump to 3.5.0dev 2016-12-24 12:14:05 +01:00
Mathias Svensson 7ed118763b Merge branch 'dev' into beta 2016-12-24 11:54:21 +01:00
Mathias Svensson 5a370162e5 Release 3.3.0 2016-12-24 11:26:18 +01:00
Mathias Svensson 253ab78e4c Merge branch 'stable' into beta 2016-12-24 11:25:12 +01:00
Mathias Svensson e997c17397 Merge branch 'beta' into dev 2016-12-24 11:10:10 +01:00
Mathias Svensson 0acc8ee499 Merge branch 'stable' into beta 2016-12-24 11:00:32 +01:00
Mathias Svensson d39f9a145e Release 3.2.1 2016-12-24 10:53:02 +01:00
Zach Riggle f14e0e5652 Reorder get_buffer_size so that the value is validated
This prevents silly things like tube.recv("abcdef") which will hang
2016-12-22 16:41:51 -05:00
Zach Riggle aaa83983ad Merge branch 'beta' into dev 2016-12-22 16:27:46 -05:00
Zach Riggle 1b76a27bd5 Merge remote-tracking branch 'upstream/stable' into beta-staging 2016-12-22 16:26:31 -05:00
Zach Riggle 87491bf6dc Fix install script for new branches, where TRAVIS_COMMIT_RANGE is empty 2016-12-22 14:40:43 -05:00
Zach Riggle b30835ec5b Fix regression introduced in 386e68691f 2016-12-22 14:03:09 -05:00
Zach Riggle 1241073391 Remove support for installation without psutil (#821)
* Remove support for installation without psutil.

OpenBSD was the edge case we cared about, it is supported for over a year (giampaolo/psutil#615)

* Bump psutil version to when they introduced OpenBSD support
2016-12-20 14:06:06 -05:00
Zach Riggle cfcd79e169 Update install strings to include libffi-dev and be consistent 2016-12-16 11:37:13 -06:00
Zach Riggle 706a784904 Directly invoke sock.close() when we hit POLLHUP 2016-12-15 20:20:07 -06:00
Zach Riggle 70c96330de Make sock.connected much more robust by using socket.poll (#817)
* Make sock.connected much more robust by using socket.poll

* Fix use of socket.socket.recv vs. ssh transport recv
2016-12-15 20:15:19 -06:00
Zach Riggle cae3cddc07 Fix incorrect error message in serialtube 2016-12-15 20:04:12 -06:00
Zach Riggle 5373dcdeed Fix dev-only regression in serialtube constructor, and use Timeout object properties 2016-12-15 20:04:12 -06:00
Zach Riggle 5d4bf3db6c Add MemLeak.u64/u32/... aliases 2016-12-15 17:15:10 -06:00
Zach Riggle fbfa54ad61 Fix failing doctestse on dev 2016-12-15 16:45:08 -06:00
Zach Riggle b323264032 Merge branch 'beta' into dev 2016-12-15 15:05:16 -06:00
Zach Riggle 332c9d2031 Merge remote-tracking branch 'upstream/stable' into beta-staging 2016-12-15 14:52:39 -06:00
Zach Riggle 036397c861 Fix adb.uninstall() typo (#816)
Closes Gallopsled/pwntools#783
2016-12-15 14:52:25 -06:00
Zach Riggle dcf03fd44d Bugfix for None data from field (#815) 2016-12-15 14:13:36 -06:00
Zach Riggle df54bf2bb3 Dont barf if home directory is not writable (#814)
* Handle the home directory being read-only / cache directory being unavailable

Fixes Gallopsled/pwntools#799

* Add doctest for context.cache_dir
2016-12-15 14:04:45 -06:00
Zach Riggle 386e68691f Multiple ADB performance and functionality fixes (#811)
* Fix ADB wait_for_device with ANDROID_SERIAL set, and fix performance

* Fix QEMU usage for native binaries

* Fix adb.write and adb.listdir operating on the wrong type of object

* Fix failing unit test with new behavior in adb.protocol.Client.list

* Fix adb server startup issue

* Rework deferred initialization to work around class-scope superclass attributes, and add test for AdbDevice
2016-12-14 17:34:18 -06:00
Zach Riggle 2c841eaa21 Add adb.{unlink,mkdir,makedirs,isdir,exists} (#809)
* Add adb.{unlink,mkdir,makedirs,isdir,exists}

* Change unlink() to throw an exception rather than return a string

* Fix doctest and code for isdir

* Remove unused variable
2016-12-14 16:49:41 -06:00
Zach Riggle 22f170abc7 Check the name before attempting to call startswith() (#805) 2016-12-14 16:47:38 -06:00
Zach Riggle 350610fbee Fix error message with StrictHostKeyChecking (#813) 2016-12-14 16:37:05 -06:00
Zach Riggle c7b3852eae Fix exception thrown under 32-bit Python interpreters. (#804)
Fixes Gallopsled/pwntools#518
2016-12-14 16:26:29 -06:00
Zach Riggle eaf6402198 Fix adb.partitions listing (#802)
* Fix adb.partitions listing

* Add adb.walk and adb.find functions to ensure adb.partitions works on devices without a find binary

* Add adb.readlink to simplify logic for reading symlinks
2016-12-14 15:37:47 -06:00
Zach Riggle d2c6184a00 Add missing changelog entry 2016-12-14 14:58:00 -06:00
Zach Riggle e5645e7b53 Update CHANGELOG missing links 2016-12-14 14:49:54 -06:00
Zach Riggle 09dbe0a54d Update CHANGELOG links 2016-12-14 14:49:27 -06:00
Zach Riggle 0bd0de78f9 Update CHANGELOG 2016-12-14 14:48:19 -06:00
Zach Riggle 546061e577 Modify coredump_filter of spawned processes so that library contents are included 2016-12-12 18:26:46 -06:00
Zach Riggle 5ebc8b5bb7 Check the name before attempting to call startswith() 2016-12-12 18:26:46 -06:00
Zach Riggle b83a6c7db8 Fix process.leak by providing a sane default leak size 2016-12-05 15:44:04 -05:00
Owlz 5d9792fb4c Variable Size Buffer Fill (#806)
Support custom buffer-read sizes for `tube` objects via their internal `Buffer` object.  Default buffer size is 4096.  Buffer size can be set per-object at instantiation-time (`tube(buffer_fill_size=...)`), by attribute (`tube.buffer_fill_size=...`), or in a context (`context.buffer_size=...`).
2016-12-05 15:21:08 -05:00
Zach Riggle 1c54e347f2 Add 'shell' option for ssh.process to pass to "sh -c" (#800)
Add 'shell' option for ssh.process to pass to "sh -c"
2016-11-29 11:52:44 -07:00
Ricky Zhou 2f597f41d4 Properly handle exceptions in remote._connect. (#793)
Previously, if getaddrinfo or socket.socket threw an exception,
_connect would return without ever calling h.success or h.failure. As a
result, progress indicators would continue to update indefinitely.

Fix this by using a with statement instead.

(Also remove an unused variable and fix a typo.)
2016-11-28 14:45:20 -07:00
Zach Riggle 7545dafffb Wrap context.log_console when using terminal I/O (#797)
Fixes Gallopsled/pwntools#792
2016-11-23 11:11:17 -07:00
Zach Riggle 3acec5421f Set shell=False 2016-11-12 23:16:32 -08:00
Mathias Svensson 620364dd1d Fixed a link in CHANGELOG.md 2016-11-12 21:10:05 +01:00
Mathias Svensson b441cf967a Start work on 3.4.0 2016-11-12 20:39:25 +01:00
Mathias Svensson 76c21548db Release 3.3.0beta0 2016-11-12 19:33:58 +01:00
Mathias Svensson ad71d9235b Release 3.2.0 2016-11-12 13:43:56 +01:00
Mathias Svensson 2e5f8061b2 Merge branch 'stable' into beta 2016-11-12 12:59:46 +01:00
Zach Riggle 099404277e Enhance documentation and error logging for ssh.process preexec_fn usage (#787)
Also fix other incorrect log usage

Fixes Gallopsled/pwntools#786
2016-11-12 12:58:24 +01:00
Zach Riggle 30c34b785a Fix ROP.call(Function(...)) breaking dump()
Fixes #770
2016-11-10 14:23:28 -08:00
Zach Riggle 6c304d3511 Add a bit more docs to the ADB module 2016-11-10 13:50:15 -08:00
Zach Riggle dc297e17ae Fix docstring commit [skip ci] 2016-11-07 18:52:12 -08:00
Zach Riggle fa402ceb57 Add adb.uptime and adb.boot_time 2016-11-07 17:53:52 -08:00
Zach Riggle 483adb8e2d Update ISSUE_TEMPLATE.md 2016-11-07 12:05:00 -08:00
Zach Riggle 76fe04e356 Fix log message error in adb.uninstall 2016-11-01 16:14:55 -07:00
Justin Steven 82312baba0 Add cyclic_metasploit() and cyclic_metasploit_find() (#785)
* Add cyclic_metasploit and cyclic_metasploit_find

* Stop using mutable default arguments
2016-10-26 17:19:19 -07:00
Zach Riggle d101a775aa Fix adb.uninstall() typo
Closes Gallopsled/pwntools#783
2016-10-26 10:25:34 -07:00
Mathias Svensson 5fda6580e8 Expose the BitPolynom (#755) 2016-10-23 22:38:50 +02:00
Mathias Svensson 9185437626 Merge branch 'beta' into dev 2016-10-23 11:35:03 +02:00
Mathias Svensson bde40c36ae Merge branch 'stable' into beta 2016-10-23 11:12:35 +02:00
Mathias Svensson 894b17e74a Release 3.1.1 2016-10-23 11:11:39 +02:00
Mathias Svensson 33b734cbc6 Added a doctest for MemLeak.struct 2016-10-23 11:11:32 +02:00
Morten Brøns-Pedersen 3e8454412e Bugfix in MemLeak.struct. (#768)
The function didn't work due to `sizeof` not being defined.  This PR imports
`ctypes` and uses `ctypes.sizeof`.
2016-10-23 10:53:04 +02:00
Zach Riggle 420f99c5d0 Automatic update checking should not log to stdout. (#774)
This breaks piping into files for all of the command-line utilities.
2016-10-20 15:41:00 -07:00
Zach Riggle 98052e4166 Add an error to cyclic() if the requested length is too long (#782)
$ cyclic 999999999
[ERROR] Can't create a pattern length=999999999 with len(alphabet)==26 and n==4

Fixes Gallopsled/pwntools#781
2016-10-19 09:18:41 -07:00
Mathias Svensson e971856c74 Merge branch 'beta' into dev 2016-10-18 23:09:45 +02:00
Mathias Svensson 09ee73c31d Merge branch 'stable' into beta 2016-10-18 22:58:20 +02:00
Zach Riggle 0c4d1365e9 Fix documentation generation since autoprogram broke Python2 2016-10-18 22:57:32 +02:00
Mathias Svensson b3f941c3f5 Merge branch 'beta' into dev 2016-10-18 22:42:29 +02:00
Justin Steven 67e11a9aeb Fix typos in cyclic.py's docstrings (#775) 2016-10-18 13:26:42 -07:00
Mathias Svensson 7d5f8ca4b4 Release 3.2.0beta4 2016-10-18 22:22:19 +02:00
Zach Riggle 7695acc798 Fix bash completion regression (#772)
Fixes Gallopsled/pwntools#767
2016-10-18 22:17:31 +02:00
Zach Riggle 3f48a0b803 Remove all Github update checks (#761)
These were nice-to-have, but as long as PyPi is updated and functioning
properly, we don't need to check Github.

Fixes Gallopsled/pwntools#756
2016-10-18 21:58:03 +02:00
Zach Riggle fd731154ff Make process.argv optional, using context.binary 2016-10-15 14:29:13 -07:00
Isaac 906bc94a5f fix typo in TESTING.md (#769) 2016-10-15 13:31:42 +02:00
bstub db03e7de10 Adding escaped hex output format to shellcraft -f option (#765)
* adding output format for python hex-notation

* cleaned up implementation

* changed format identifier to {a} --escaped

* {a] was taken by asm, changed format identifier to {d} --escaped

* adding {e}lf to help
2016-10-14 13:13:02 -07:00
Morten Brøns-Pedersen 97e03fd29f Bugfix in MemLeak.struct. (#768)
The function didn't work due to `sizeof` not being defined.  This PR imports
`ctypes` and uses `ctypes.sizeof`.
2016-10-14 13:11:18 -07:00
Zach Riggle 09b8bb93a7 Fix regressions introduced by f9133b1680 2016-10-14 13:10:13 -07:00
Zach Riggle f9133b1680 Add STDERR argument, and write docs for args module (#760)
Add STDERR argument, and write docs for args module

Fixes Gallopsled/pwntools#759
2016-10-10 19:13:45 -07:00
Mathias Svensson 8aa21bd99a Merge branch 'beta' into dev 2016-10-11 03:06:21 +02:00
Mathias Svensson e5b6aedd3d Release 3.2.0beta3 2016-10-11 03:00:18 +02:00
Zach Riggle 4b405c69b6 Fix incorrect usage of argv in unhex 2016-10-11 02:59:52 +02:00
Zach Riggle 9af20c778f Fix incorrect usage of argv in unhex 2016-10-10 17:55:13 -07:00
Mathias Svensson d1621dca87 Merge branch 'beta' into dev 2016-10-10 15:50:53 +02:00
Mathias Svensson 31b047d29b Release 3.2.0beta2 because pypi is being retarded 2016-10-10 15:48:52 +02:00
Mathias Svensson 39970c3847 Merge branch 'beta' into dev 2016-10-10 14:59:41 +02:00
Mathias Svensson e0c65c9d6d Release 3.2.0beta1 2016-10-10 14:58:51 +02:00
Zach Riggle 59d0cd2eeb Fix wait-for-device with kick=True re-using the same client (#757) 2016-10-10 14:58:00 +02:00
Zach Riggle 8d11fb8594 Fix wait-for-device with kick=True re-using the same client (#757) 2016-10-09 20:00:00 -07:00
Zach Riggle aec3fa6879 Remove all Github update checks (#761)
These were nice-to-have, but as long as PyPi is updated and functioning
properly, we don't need to check Github.

Fixes Gallopsled/pwntools#756
2016-10-07 15:30:38 -07:00
Zach Riggle ab6602407e Move issue/pr templates to .github 2016-10-07 15:18:58 -07:00
Zach Riggle 42ab0c985d Sort inputs with isort 2016-10-05 15:51:05 -07:00
Zach Riggle b215828133 Make tube.stream() more robust 2016-10-05 15:49:41 -07:00
Zach Riggle e3af4ce6a7 Update changelog 2016-10-05 15:44:13 -07:00
Zach Riggle 96c6edcc37 Update changelog 2016-10-05 15:44:03 -07:00
Zach Riggle b198ec8633 Add tube.stream() 2016-10-05 15:43:04 -07:00
Mathias Svensson c8a87381e8 Merge branch 'beta' into dev 2016-10-02 20:38:08 +02:00
Mathias Svensson 548e033e7e Release 3.2.0beta0 by merging branch 'stable' into beta 2016-10-02 20:32:09 +02:00
Mathias Svensson fc097f3446 Fixed a link in the CHANGELOG 2016-10-02 20:27:51 +02:00
Mathias Svensson eb92a95134 Release 3.1.0 2016-10-02 20:12:51 +02:00
Zach Riggle c706461f10 Add branch table 2016-10-02 20:07:12 +02:00
Zach Riggle b0ad5eb915 Add branch table 2016-09-28 13:31:56 -07:00
Zach Riggle 94f88cc8ba Update changelog 2016-09-28 13:13:53 -07:00
Zach Riggle 1e414afbeb Add connect() alias for remote(), add docs for tcp() and udp() aliases 2016-09-28 13:05:54 -07:00
Zach Riggle 869ec42082 Add ssh.read and ssh.write aliases 2016-09-28 13:04:28 -07:00
Zach Riggle 4893819b4c Add adb.install, adb.uninstall, and adb.packages 2016-09-28 12:42:22 -07:00
Zach Riggle fb1b952769 Do not wrap non-functions 2016-09-27 19:31:50 -07:00
Zach Riggle 859380285f Handle missing properties for AdbDevice 2016-09-27 19:08:41 -07:00
Zach Riggle 2af55c9bc3 Allow device-scoped access to ADB facilities off of AdbDevice 2016-09-27 19:04:24 -07:00
Zach Riggle 4725b1be96 adb.adb(["shell", ...]) should go through adb.process() 2016-09-27 13:55:35 -07:00
Zach Riggle 5af5f0c55d Fix adb.push statement ordering 2016-09-26 18:10:18 -07:00
Zach Riggle e84f395c97 Wait for the currently-selected device in wait_for_device 2016-09-26 18:03:27 -07:00
Zach Riggle fbf51ad96e Fix target adb.push() 2016-09-26 17:56:28 -07:00
Zach Riggle 52433339ec adb.protocol.Connection should always pack as 32-bit 2016-09-26 17:43:26 -07:00
Zach Riggle f277d5502f Allow adb.push to specify a full target filename in an existing directory 2016-09-26 16:53:31 -07:00
Zach Riggle 794122ec13 Add kwargs to handle weird "adb devices" output 2016-09-26 16:49:34 -07:00
Zach Riggle 65b266e9b3 Revert part of 8793dec, fix commands, remove shippable.yml 2016-09-26 16:49:34 -07:00
Zach Riggle ca6eddc235 shellcraft.xxx.linux.sh now passes argv0 (#734)
shellcraft.xxx.linux.sh now passes argv0

If you need shorter shellcode, use "execve" directly.

Fixes Gallopsled/pwntools#626
2016-09-25 18:31:29 -07:00
Zach Riggle 8793decd1c Remove additional references to "--pre" and use "python setup.py develop" instead of "-e" magic
Related to Gallopsled/pwntools#735
2016-09-19 17:18:57 -07:00
Mathias Svensson 628aaabd04 Bump the version number in the pip badge 2016-09-19 23:24:01 +02:00
Mathias Svensson 3544167f26 Merge branch 'beta' into dev 2016-09-19 23:16:04 +02:00
Mathias Svensson 9cca9c989b Merge branch 'stable' into beta 2016-09-19 23:07:53 +02:00
Mathias Svensson f42c291fef Release 3.0.4 2016-09-19 22:57:54 +02:00
Zach Riggle dacdd397ab Merge remote-tracking branch 'upstream/stable' into beta 2016-09-19 13:10:34 -07:00
Zach Riggle c0f02d453a Merge pull request #752 from zachriggle/fix-setup
Add all MD and TXT files to binary distribution; include correct file…
2016-09-19 21:52:55 +02:00
Felix Yan 627ed5cbd5 Fix a typo: termianl -> terminal (#750) 2016-09-19 10:28:18 -07:00
Mathias Svensson 3fb64f9fe0 Merge branch 'beta' into dev 2016-09-19 00:31:31 +02:00
Mathias Svensson 254958bae9 Merge branch 'stable' into beta 2016-09-19 00:28:50 +02:00
Mathias Svensson 1cb47220f1 Fixed this binutils-multiarch path 2016-09-19 00:27:56 +02:00
Mathias Svensson d9be4f9ce0 Made the wget timeout longer 2016-09-19 00:18:37 +02:00
Mathias Svensson 2cd5aadf9d Merge branch 'beta' into dev 2016-09-18 22:58:32 +02:00
Mathias Svensson 6ebcc6f3a2 Merge branch 'stable' into beta 2016-09-18 22:31:34 +02:00
Mathias Svensson 21ce572dd6 Make CHANGELOG.md closer follow dev for easier forwardporting in the future 2016-09-18 22:30:23 +02:00
Mathias Svensson 1c47a30446 Bump the version number in README.md 2016-09-18 22:26:44 +02:00
Mathias Svensson 5b8ccb60a6 Merge branch 'beta' into dev 2016-09-18 22:14:53 +02:00
Mathias Svensson 89fc74facf Merge branch 'stable' into beta 2016-09-18 21:35:21 +02:00
Mathias Svensson 5a79a5e609 Release 3.0.3 2016-09-18 21:21:42 +02:00
Mathias Svensson c92f9bed42 I was being stupid when I did #744, since @zachriggle was not done. This is (hopefully) a more proper fix. 2016-09-18 21:09:29 +02:00
Mathias Svensson bfb534378b Removed verbosity from travis files 2016-09-18 19:35:28 +02:00
Mathias Svensson 0ddcf8b129 Add a test that we will *not* update when we have a never local version 2016-09-18 19:35:06 +02:00
Mathias Svensson a66376b8a0 Merge branch 'faster-update-import' of https://github.com/zachriggle/pwntools into merge-738 2016-09-18 15:23:25 +02:00
Mathias Svensson 9cb53d90fe Merge branch 'corefile-pyelftools' of https://github.com/binjitsu/binjitsu into release-3.0.3 2016-09-18 15:00:37 +02:00
Mathias Svensson a31cec5e81 Removed aarch64 install as it is broken and not currently needed and stopped bailing out even if .ssh exists 2016-09-18 14:50:52 +02:00
Zach Riggle 5367a3528d Promote binutils installation 2016-09-18 14:49:59 +02:00
Zach Riggle 669e7295c6 Auto-detect the current URL for QEMU rather than relying on a hard-coded URL 2016-09-18 14:49:03 +02:00
Zach Riggle a7f32d1b0f Bail on any error 2016-09-18 14:48:05 +02:00
Mathias Svensson efc531a2a9 Merge pull request #744 from Idolf/fix-tests
Fix Travis CI (building upon #743)
2016-09-18 14:45:53 +02:00
Mathias Svensson 8b959c9ede Removed aarch64 install as it is broken and not currently needed and stopped bailing out even if .ssh exists 2016-09-18 14:39:43 +02:00
Zach Riggle 68051f9987 Promote binutils installation 2016-09-17 20:50:20 -07:00
Zach Riggle 3636657ca0 Auto-detect the current URL for QEMU rather than relying on a hard-coded URL 2016-09-17 20:40:26 -07:00
Zach Riggle f282ef8bbc Bail on any error 2016-09-17 20:09:17 -07:00
Zach Riggle d5fbb21f72 Switch from pkg_resources to packaging, for performance reasons
Also backports the PyPi documentation changes to stable.

Fixes #736
2016-09-17 18:13:57 -07:00
Zach Riggle 57e9bf58a5 Update changelog 2016-09-17 18:06:30 -07:00
Zach Riggle 0ce21d9b45 Add pandoc requirement for Travis 2016-09-14 19:00:36 -07:00
Zach Riggle 89649fbeb0 Use HTTPS for link 2016-09-14 15:28:14 -07:00
Zach Riggle 5924c0f340 Use new domain for update_demo 2016-09-14 14:57:05 -07:00
Zach Riggle 2f9f10c182 Remove SSH info 2016-09-14 14:27:34 -07:00
Zach Riggle d7c98c4819 Remove reference to --pre until Gallopsled/pwntools#735 has a solution 2016-09-14 14:10:22 -07:00
Zach Riggle cd0ba369b8 Fix bug introduced by internal changes to pyelftools v0.2.4 2016-09-14 12:23:47 -07:00
Zach Riggle bebc84522d Make update mechanism more robust, add tests (#729)
* Make update mechanism more robust, add tests
* Add pwnlib.update to documentation, enable doctests

Fixes Gallopsled/pwntools#723
Fixes Gallopsled/pwntools#724
2016-09-12 21:09:52 -07:00
Zach Riggle e7875c78bc Add pwnlib.flag and submit_flag (#732)
* Add pwnlib.flag and submit_flag
2016-09-12 21:03:16 -07:00
Zach Riggle 0a37694436 Sort imports with isort 2016-09-12 20:35:36 -07:00
Zach Riggle 742a11bfdc Add links to CONTRIBUTING and TESTING in templates 2016-09-10 17:33:22 -07:00
Zach Riggle 1e7262ce31 Add templates for Pull Requests and Issues (#733)
Fixes #651
2016-09-10 17:27:02 -07:00
Zach Riggle d733cf6560 Fix failing doctest because of httpbin slowness (#731) 2016-09-09 17:46:34 -07:00
Zach Riggle 3818dda9d9 Extract copy-pasted callback routine, add better errors and doctests … (#728)
* Extract copy-pasted callback routine, add better errors and doctests for adb.{push,pull}
* Add protocol submodule to documentation and doctests
* Add and fix doctests in adb.protocol
* Use pprint to sort dicts
2016-09-09 15:29:38 -07:00
Zach Riggle 18c4a49aa3 Add pprint to toplevel 2016-09-08 14:34:47 -07:00
Zach Riggle 77f7a362d0 Version bump 2016-09-08 10:56:38 -07:00
Zach Riggle 738fadc016 Add .os to Device and set it automatically (#727)
The use case here is setting context.os via:

>>> context.device = adb.wait_for_device()
2016-09-07 16:34:10 -07:00
Zach Riggle b97f30f36f Add better description to PyPI, more classifiers (#721) 2016-09-07 16:34:00 -07:00
Mathias Svensson de05e7a4b8 Merge branch 'beta' into dev 2016-09-06 11:46:45 -10:00
Mathias Svensson 5fe024838b Release 3.1.0beta1 2016-09-06 11:36:27 -10:00
Mathias Svensson 8b07fe12e6 Release 3.0.2 2016-09-06 11:33:46 -10:00
Mathias Svensson cd828d6bca Merge branch 'beta' into dev 2016-09-06 11:31:21 -10:00
Mathias Svensson b60103b839 Merge branch 'stable' into beta 2016-09-06 11:30:58 -10:00
Mathias Svensson 684e9f6791 Changed util.fiddling.hexdump_iter to take a file object instead of a string. This massively speeds up phd <file> | less for huge files. (#695) (#725) 2016-09-06 11:30:51 -10:00
Mathias Svensson 5acc4c8ec3 Merge branch 'beta' into dev 2016-09-06 10:07:53 -10:00
Mathias Svensson a5c2b9276a Merge branch 'stable' into beta 2016-09-06 10:07:33 -10:00
Mathias Svensson 8d15fceb92 Backported #720. (#722)
The backport only includes the changes in pwnlib/update.py, not the
stuff in pwnlib/commandline/
2016-09-06 10:06:45 -10:00
Zach Riggle 913a3eba9e Pwn update (#720)
* Fix help printing e.g. "shellcraft shellcraft" instead of "pwn shellcraft" when invoking legacy entry points [skip ci]

* Add "pwn update" command; prevent automatic updates from showing pre-release
2016-09-02 16:58:47 -07:00
Zach Riggle 041e62bf0b Update changelog [skip ci] 2016-09-02 15:20:14 -07:00
Zach Riggle e61f571f7c Add adb.protocol module, and use it for most things (#709) 2016-09-02 15:16:26 -07:00
Zach Riggle 36d00b615d Update changelog [skip ci] 2016-09-02 15:10:10 -07:00
Zach Riggle 25d340b5c5 Re-implement sh_string to use embedded literals, add lots of tests (#717)
* Re-implement sh_string to use embedded literals, add lots of tests
* Add docs for sh_string so that unit tests get picked up
* Mark the docstrings as raw
* Rewrite doctests to not "print" since this breaks with invisible characters (issue with doctest itself)
* Add test which uses 16KB of random non-NUL data
2016-09-02 14:56:05 -07:00
Zach Riggle 8f06c1f90f Add docs for Xenial binutils, and attempt to auto-detect Debian packages (#718)
An error message will be printed like this when a package is found:

>>> context.arch='powerpc'
>>> pwnlib.asm.print_binutils_instructions('objdump', context)
[ERROR] Could not find 'objdump' installed for ContextType(arch = 'powerpc', bits = 32, endian = 'big')
    Try installing binutils for this architecture:
    $ sudo apt-get install binutils-powerpc-linux-gnu
2016-09-02 14:21:40 -07:00
Zach Riggle ae6a0745ff Fix function-decorator use-case for context.quiet (#714) 2016-09-01 16:23:32 -07:00
Zach Riggle 1d924af9d2 Update changelog [skip ci] 2016-09-01 15:36:47 -07:00
Zach Riggle fed432877c Merge pull request #711 from binjitsu/brk
Add heap leak from the linker. Fixes Gallopsled/pwntools#435
2016-09-01 15:35:19 -07:00
Zach Riggle 46261091dd Update date formatting 2016-09-01 15:17:59 -07:00
Zach Riggle c356b69a13 Add notices 2016-09-01 15:16:24 -07:00
Zach Riggle 6cff484b8c Update changelog [skip ci] 2016-09-01 15:15:30 -07:00
Zach Riggle 8314dff386 Update changelog [skip ci] 2016-09-01 15:14:24 -07:00
Zach Riggle dc40ac1117 Add heap leak from the linker. Fixes Gallopsled/pwntools#435
(cherry picked from commit 5808882cfe)
2016-09-01 14:57:00 -07:00
Zach Riggle 288b9668b7 Add Android emulator to Travis (#705)
* Add Android emulator to Travis

* More robust handling of ADB device status, and lack of devices

* Add platform-tools to PATH for adb, fastboot, etc.

* Add basic tests for some ADB code

* Add with_device annotation to auto-detect a device

* Skip Android emulator installation if we dont need it

* Do not install emulator in all cases (e.g. OSX)
2016-08-30 17:44:14 -07:00
Zach Riggle 3c0697b81e Refactor command-line tools to use a single "pwn" entry point. (#701)
Adds an install-time option to disable legacy commands, and only use 'pwn':

  $ pip install --install-option='--only-use-pwn-command'

Documentation is updated to show 'pwn' entry point and sub-commands.

Fixes #404
Fixes #660
2016-08-30 17:37:28 -07:00
Zach Riggle 6e4e46386f Do not install emulator in all cases (e.g. OSX) 2016-08-30 17:30:29 -07:00
Zach Riggle 9b179567da Remove un-cacheable Android SDK and NDK directories from Travis cache 2016-08-30 17:28:30 -07:00
Zach Riggle b20e17dd13 Skip Android emulator installation if we dont need it 2016-08-30 17:27:33 -07:00
Zach Riggle 3dcfafc0de Fix unit test quote style and ELLIPSE formatting 2016-08-30 16:32:05 -07:00
Zach Riggle 348bcac0ff Fix unit test failures in ADB module 2016-08-30 14:40:32 -07:00
Zach Riggle a43c3b4967 Add with_device annotation to auto-detect a device 2016-08-29 14:43:04 -07:00
Zach Riggle 40bf991153 Add basic tests for some ADB code 2016-08-29 14:43:04 -07:00
Zach Riggle 8f98c01b77 More robust handling of ADB device status, and lack of devices 2016-08-29 14:43:04 -07:00
Zach Riggle 18a8cfb88d Disable verbose logging 2016-08-29 14:43:04 -07:00
Zach Riggle 2acdeef320 Add missing bracket 2016-08-29 14:43:04 -07:00
Zach Riggle 23c09b4b1b Add platform-tools to PATH for adb, fastboot, etc. 2016-08-29 14:43:04 -07:00
Zach Riggle 84c71d6b07 Squelch travis 4MB log error 2016-08-29 14:43:04 -07:00
Zach Riggle c6aa6bccb8 Add Android emulator to Travis 2016-08-29 14:43:04 -07:00
Zach Riggle 041c665185 Reorganize Travis stuff; add hook to re-generate demo.pwntools.com on pushes to stable (#708) 2016-08-29 14:24:51 -07:00
Zach Riggle 70f9c0305d Add alarm option for process() (#704)
* Add `alarm` option for process()

* Add signal to toplevel import
2016-08-29 14:20:37 -07:00
Zach Riggle 66e41bd862 Refactor command-line tools to use a single "pwn" entry point.
Adds an install-time option to disable legacy commands, and only use 'pwn':

  $ pip install --install-option='--only-use-pwn-command'

Documentation is updated to show 'pwn' entry point and sub-commands.

Fixes #404
Fixes #660
2016-08-28 11:46:09 -07:00
Zach Riggle 5140d03b4d Add MIPS documentation, which should also trigger doctests (#700)
* Add MIPS documentation, which should also trigger doctests
* Fix broken and missing doctests for MIPS pushstr / syscall
* Add optimization for mips.mov to fix doctest
* Exit cleanly so QEMU doesn't complain
2016-08-28 11:40:42 -07:00
Mathias Svensson b016179ccc Merge branch 'beta' into dev 2016-08-24 20:04:59 -07:00
Mathias Svensson efaea581a1 Merge branch 'stable' into beta 2016-08-24 20:04:06 -07:00
Evan Grim 24dfaa0ff7 Fix typos (#702) 2016-08-24 20:03:37 -07:00
Zach Riggle f4a72da40e Update MIPS execve to use pushstr_array 2016-08-24 14:59:50 -07:00
Zach Riggle 6376d07266 Add MIPS pushstr_array
Example resulting state:

$ shellcraft mips.pushstr_array '$t1' '["hello", "world", "boss!"]' -d --after
...
pwndbg> telescope $t1 4
00:0000| t1 sp  0x76ffec7c --> 0x76ffec8c <-- 'hello'
01:0004|        0x76ffec80 --> 0x76ffec92 <-- 'world'
02:0008|        0x76ffec84 --> 0x76ffec98 <-- 'boss!'
03:000c|        0x76ffec88 <-- 0x0
2016-08-24 17:57:24 -04:00
Zach Riggle ea94ee4ca5 Disallow usage of semicolons in run_in_new_terminal.
Fixes Gallopsled/pwntools#690
Fixes Gallopsled/pwntools#635
2016-08-24 14:36:43 -07:00
Zach Riggle 452605e854 Fix pwnlib.gdb temporary file removal.
In two instances, the file was not removed because of an incorrect lambda.

In two further instances, use of shell concatenation via run_in_new_terminal
were changed into GDB 'shell' commands.

This fixes Gallopsled/pwntools#629
2016-08-24 14:36:43 -07:00
Mathias Svensson dea8f00c01 Merge pull request #698 from Idolf/dev
Merged beta into dev and fixed the version number and changelog
2016-08-24 14:35:11 -07:00
Mathias Svensson b9d6b27b4e Merge branch 'beta' into dev 2016-08-24 14:24:21 -07:00
Mathias Svensson 300ef0b462 Merge branch 'Idolf-beta-changelog' into beta 2016-08-24 14:20:02 -07:00
Mathias Svensson 6e79272e8d Updated the changelog 2016-08-24 14:17:46 -07:00
Morten Brøns-Pedersen d65991d402 Changed util.fiddling.hexdump_iter to take a file object instead of a string. This massively speeds up phd <file> | less for huge files. (#695) 2016-08-24 14:15:29 -07:00
Zach Riggle de94449a87 Remove unreleased version from Changelog 2016-08-22 17:34:44 -07:00
Zach Riggle faeb57b35c Use manual 3.0.1 shield until we figure out how to make this automagic 2016-08-22 16:42:45 -07:00
Mathias Svensson e1332d277c Merge branch 'beta' into dev (#678) 2016-08-22 15:26:40 -07:00
Mathias Svensson e4c2a48696 Merge pull request #679 from Gallopsled/stable
Even more documentation (#678)
2016-08-22 15:22:39 -07:00
Mathias Svensson 6415367f15 Even more documentation (#678) 2016-08-22 15:16:02 -07:00
Mathias Svensson fcf2842d87 I am an idiot 2016-08-22 14:58:42 -07:00
Mathias Svensson 422dccd8da Merge branch 'beta' into dev 2016-08-22 14:54:33 -07:00
Mathias Svensson abd08a94ea Fixed the logo path to be closer to stable 2016-08-22 14:48:26 -07:00
Mathias Svensson e877f7455a Merge branch 'stable' into beta 2016-08-22 14:37:33 -07:00
Mathias Svensson 70c224f429 Merged in some documentation fixes.
Since this commit only changes documentation and not code, it does not
trigger a new release.
2016-08-22 14:33:47 -07:00
Mathias Svensson 5f7c525023 Fix some more documentation 2016-08-22 14:30:11 -07:00
Mathias Svensson 16de5ec22c Fix a lot of documentation (#675) 2016-08-22 13:11:50 -07:00
Mathias Svensson e635bcfea7 Merging #674 into dev 2016-08-20 18:40:54 -07:00
Mathias Svensson 12b60447da Merging #674 into beta 2016-08-20 18:39:00 -07:00
Mathias Svensson 5c804d49d0 Release 3.0.1 after merging #673 2016-08-20 18:26:35 -07:00
Mathias Svensson cde19135eb Fixed some documentation 2016-08-20 18:19:07 -07:00
Mathias Svensson 77da84c5a8 Prepare the dev branch 2016-08-20 17:51:55 -07:00
Mathias Svensson 2663762a9a Prepare the beta branch 2016-08-20 17:48:37 -07:00
Mathias Svensson 7aa9605629 3.0.0 release 2016-08-20 17:24:46 -07:00
Morten Brøns-Pedersen 757d7fe2c6 Merge pull request #667 from Idolf/issue-455
sh_string was broken in some cases, adds functionality to fix it. Fixes #455
2016-08-20 10:52:28 +02:00
Morten Brøns-Pedersen 9e724203b9 Merge pull request #650 from binjitsu/issue-591
Remove old inode-walking code in gdb module
2016-08-20 10:38:58 +02:00
Mathias Svensson 72207cf914 Fixed #455 2016-08-19 20:08:47 -07:00
Zach Riggle 824852bf33 Fix README links so they are valid, and work on pwntools.com (#653) 2016-08-18 13:14:42 -07:00
Zach Riggle b382849671 Add auto-update detection for new releases (#659) 2016-08-18 12:48:43 -07:00
Zach Riggle 0e814c91cc Merge pull request #669 from Idolf/issue-661
Adds some forgotten imports, fixes #661
2016-08-18 12:09:13 -07:00
Mathias Svensson d55a47a8fc Fixed a link in README.md (#670) 2016-08-18 11:58:17 -07:00
Zach Riggle 3b65f8775a Add coveralls.io build steps to .travis.yml (#655)
* Add coveralls.io build steps to .travis.yml

Fixes Gallopsled/pwntools#205

* Fix unit tests which fail under Coveralls

* Remove non-coverage "make doctest"

* Only report coverage for our code

* Add .coveragerc, ignore .coverage, shorten Travis script line

* Add Coveralls shield

* Fix spacing with badges and logo

* Add undocumented command-line tools to increase coverage
2016-08-18 11:22:41 -07:00
Zach Riggle fce5081c30 Make constgrep errors more verbose (#654) 2016-08-18 11:19:41 -07:00
Zach Riggle 39afc7998a Missed case where p_type needs to be converted to a string (#647) 2016-08-18 11:18:30 -07:00
Zach Riggle 1bfc56daa0 Actually enable the Thumb encoder (#646)
* Actually enable the Thumb encoder

* Fix thumb nop encoding NUL bytes
2016-08-18 11:14:47 -07:00
Zach Riggle 2d08e7cd99 Fix encoders.null typo (#645) 2016-08-18 11:14:10 -07:00
Mathias Svensson f7696f0388 Fixes #661 2016-08-18 11:07:47 -07:00
avarx 2947fb16dd Fix typo (#666) 2016-08-18 09:30:43 -07:00
Zach Riggle 9e57328d1b Add warning described in Gallopsled/pwntools#518 (#652) 2016-08-17 19:57:24 -07:00
Kristoffer Søholm 2198df5ea5 Merge pull request #664 from Gallopsled/fix-link
Fix install.html link.
2016-08-17 14:43:30 -07:00
Zach Riggle 40cc12ba95 Fix install.html link.
Fixes Gallopsled/pwntools#641
2016-08-17 13:31:27 -07:00
Zach Riggle 13f1815b7d Merge branch 'master' into issue-591 2016-08-17 12:04:43 -07:00
Zach Riggle 16846a80c6 Merge pull request #663 from Gallopsled/fix-link
Fix URL.  Fixes #662
2016-08-17 11:09:40 -07:00
Zach Riggle b29467dab6 Fix URL. Fixes Gallopsled/pwntools#662 2016-08-17 10:53:08 -07:00
Zach Riggle 969a9fe754 Remove old inode-walking code in gdb module
Fixes Gallopsled/pwntools#591
2016-07-26 15:03:04 +01:00
Mathias Svensson 23b0a019da Fixed a keyfile bug 2016-07-23 12:03:07 +02:00
Zach Riggle 99f9c80f15 Merge pull request #643 from PtxDK/patch-1
Update README.md
2016-07-18 17:53:46 +01:00
Kristoffer Søholm 3d5f859dd0 Merge pull request #638 from Idolf/remove-stale-files
Various stuff not merged correctly in #636.
2016-07-03 23:19:02 +02:00
Kristoffer Søholm 5c5e797cbf Merge pull request #637 from Idolf/remove-self-import
Builder imported itself
2016-07-03 23:04:43 +02:00
Patrick Krøll Brandt b2698f5513 Update README.md 2016-07-03 21:51:12 +02:00
Mathias Svensson 2baebf9e51 Use the pwntools twitter handle 2016-07-03 21:29:47 +02:00
Mathias Svensson 640051d41c Updated README.md based on the binjitsu-arm-syscall branch 2016-07-03 21:11:03 +02:00
Mathias Svensson 2f8de42cd8 Fixed IRC reference 2016-07-03 20:54:06 +02:00
Mathias Svensson ac8e053ca0 Removed binjitsu files not identified as stale in #636. 2016-07-02 23:09:57 +02:00
Mathias Svensson 741dffb47d Builder imported itself 2016-07-02 22:36:53 +02:00
Mathias Svensson ee77289111 Merge pull request #636 from binjitsu/pwntools-merge
Pwntools merge with Binjitsu
2016-07-02 21:10:42 +02:00
Zach Riggle 01cda51e3e Add date 2016-06-30 14:52:24 +02:00
Zach Riggle 2d72ccc30c Add commit count to changelog 2016-06-30 14:51:59 +02:00
Zach Riggle eee6ce3521 Add test for QEMU installation 2016-06-30 14:39:00 +02:00
Zach Riggle 7f933d3ffc Update QEMU static version 2016-06-30 14:38:16 +02:00
Zach Riggle 8680f2eeb6 Update Changelog for 3.0.0 release 2016-06-30 14:17:35 +02:00
Zach Riggle 06b81a3279 Remove Binjitsu fork info 2016-06-30 13:36:11 +02:00
Zach Riggle 33cdabf0ab Replace project name references 2016-06-30 02:28:42 +02:00
Zach Riggle c32ae58811 Replace domain names 2016-06-30 02:26:46 +02:00
Zach Riggle d4e42f86d0 Replace binjitsu/binjitsu with Gallopsled/pwntools 2016-06-30 02:26:22 +02:00
Zach Riggle bd6ef3f45e Merge remote-tracking branch 'gallopsled/master' into pwntools-merge 2016-06-30 02:24:01 +02:00
Zach Riggle a613d75abb Move logger functions to toplevel (add success) 2016-06-28 12:57:13 +02:00
Zach Riggle 2d8c8593de Modify ADB commands to specify host and port if they are provided via environment 2016-06-28 12:56:47 +02:00
Zach Riggle 054e3d50d5 Move logger functions to toplevel 2016-06-28 12:56:23 +02:00
Zach Riggle b06b544323 Clean up ADB partition code, enable enumeration and tab-completion 2016-06-21 06:29:17 +02:00
Zach Riggle 18d9646498 Do not return "." in listdir() 2016-06-21 06:22:01 +02:00
Zach Riggle e8d8f4c4cc Do not record one-time warnings if they are not actually emitted 2016-06-14 16:04:02 -07:00
Zach Riggle e18eef7fae Add --file option to checksec for checksec.sh compatibility 2016-06-09 19:12:08 -06:00
Zach Riggle 396efcf71a Extend process() display changes to "stopped" message 2016-06-07 15:54:44 -06:00
Zach Riggle ee485a68d5 Strip adb shell from the display 2016-06-07 15:52:28 -06:00
Zach Riggle c0bc668450 Add a few twiddly bits for better process logs 2016-06-07 15:51:10 -06:00
Zach Riggle 7c8806950b Wrap all property accessors with str() 2016-06-07 12:42:12 -06:00
Zach Riggle ba5815bba5 Convert absolute paths to relative paths 2016-06-07 11:36:08 -06:00
Zach Riggle 25016264e7 Fix listdir implementation for some phones lacking a -1 option for LS 2016-06-07 11:31:38 -06:00
Zach Riggle 4d83a0d017 Silence GDB license on attach 2016-05-29 19:08:37 -04:00
Zach Riggle 67fd986360 Support unauthorized devices; old devices dont support -t 2016-05-29 19:00:43 -04:00
Zach Riggle fc1a7e2d11 Add warning message to cyclic_find; fix two-space indentation 2016-05-29 13:19:58 -05:00
Zach Riggle 112a246881 Minor fix for OS X serialtube naming for certain adapters 2016-05-28 20:07:19 -05:00
Zach Riggle c0c91841a7 Fix install info 2016-05-25 14:00:21 -05:00
Zach Riggle 70df2fa5f3 Fix double-warning for GDB without ASLR 2016-05-24 17:51:45 -07:00
Zach Riggle aedbafd9d6 Add ASLR-disabled warning to GDB 2016-05-24 17:50:16 -07:00
Zach Riggle 51f62206f6 Add ASLR-disabled warning to SSH 2016-05-24 17:49:30 -07:00
Zach Riggle a9ac751b89 Add ASLR disabled warning message 2016-05-24 17:47:57 -07:00
Zach Riggle ab31b3091c Add context.verbose 2016-05-24 17:47:43 -07:00
Zach Riggle 322942f2d3 Fix elfpatch so it doesnt spew logging info 2016-05-21 22:15:25 -07:00
Zach Riggle 9967347d70 Rename Property.name to support ro.product.name 2016-05-17 22:36:22 -07:00
Zach Riggle 01ec1328f9 Refactor adb.partitions to provide an iterator 2016-05-17 21:48:15 -07:00
Zach Riggle 020469788a Add adb.address, fix adb.symbols, add adb.partitions 2016-05-17 21:41:43 -07:00
Zach Riggle 348456e290 Merge pull request #78 from Manouchehri/patch-2
libffi-dev is required.
2016-05-17 18:12:07 -07:00
David Manouchehri 01e5057b05 libffi-dev is required. 2016-05-18 01:04:43 +00:00
Zach Riggle c97da1524c Merge pull request #77 from Manouchehri/patch-1
Use Trusty for Dockerfile?
2016-05-17 17:50:00 -07:00
Zach Riggle ec506414ee Catch reconnect exception, fix listdir() 2016-05-17 20:22:11 -04:00
Zach Riggle 10eb718058 Allow pwnlib.adb.Property objects to be compared to strings 2016-05-17 19:56:02 -04:00
Zach Riggle c575c66895 Stringify device in argv 2016-05-17 19:46:54 -04:00
Zach Riggle a30ab0ca80 Add pwnlib.device.Device class 2016-05-17 19:46:02 -04:00
Zach Riggle a598103ca9 Add auto-transform support for Android ABIs 2016-05-17 19:30:05 -04:00
Zach Riggle d2a377cfbc Add "kick" option to adb.wait_for_device 2016-05-17 19:18:09 -04:00
Zach Riggle 3ab9063d43 Force TTY allocation for ADB shell 2016-05-17 19:18:09 -04:00
David Manouchehri 8958123e3e Use Trusty. 2016-05-17 22:31:06 +00:00
Zach Riggle c57aa1a507 Fix failing tests 2016-05-17 14:47:35 -07:00
Zach Riggle ffe2e7cf1f Pwndbg and its depenencies should not be in the Binjitsu dockerfile 2016-05-16 22:41:50 -07:00
Zach Riggle fdbd19fdd2 Add decorators for common MemLeak scenarios, make the class more robust / transparent. 2016-05-16 22:41:50 -07:00
Zach Riggle 30bfc92037 Add vsyscall to Corefile 2016-05-11 21:02:41 -07:00
Zach Riggle d84a1073d7 Add unit test for generating shared libraries 2016-05-11 20:46:01 -07:00
Zach Riggle 8d934d65e1 Make vdso detection better; add Mapping.data so you can do core.vdso.data 2016-05-11 20:44:36 -07:00
Zach Riggle a77aa1be73 Add adb.unlock_bootloader 2016-05-10 16:34:36 -07:00
Zach Riggle 176b0af30b Add support for older devices with last_kmsg 2016-05-10 11:43:44 -07:00
Zach Riggle 03e9546127 Remove double-serial-number 2016-05-09 22:48:57 -07:00
Zach Riggle 05672c3e14 Add adb.compile to build single source files or NDK projects 2016-05-09 22:26:00 -07:00
Zach Riggle 7a5760cd39 More robust "adb.push" 2016-05-09 16:58:20 -07:00
Zach Riggle 78584929d7 adb pull shows weird content for newer versions, rely on exit code 2016-05-09 16:53:10 -07:00
Zach Riggle 56ad2276f4 Add kallsyms 2016-05-09 13:51:56 -07:00
Zach Riggle d76b6c5560 Use specific commands for each device 2016-05-06 21:08:34 -07:00
Zach Riggle e59a44d8b3 Auto-detect default serial port on OSX 2016-05-06 21:08:25 -07:00
Zach Riggle 2f11018a1e Add adb.kernel.lastmsg 2016-05-06 18:54:32 -07:00
Zach Riggle 21fc7759e0 Actually use serialtube arguments 2016-05-06 18:53:46 -07:00
Zach Riggle d2933acba2 Make uart_enable() work for Shamu 2016-05-06 14:17:02 -07:00
Zach Riggle efa9c26842 Bulk removal of get_serialno() 2016-05-06 11:22:19 -07:00
Zach Riggle b61941835a Add documentation for ADB module 2016-05-05 14:53:59 -07:00
Zach Riggle c75bf4ad75 Clean up code, silence adb.kernel.cmdline 2016-05-05 14:31:59 -07:00
Zach Riggle 8138315fa6 Minor fixups 2016-05-05 14:27:12 -07:00
Zach Riggle f1e7715e6f Finish implementation of adb.kernel.symbols 2016-05-05 14:25:49 -07:00
Zach Riggle 544342b9fe Use log.debug instead of print 2016-05-05 14:21:48 -07:00
Zach Riggle 430bee44b7 Use fancy new context decorator 2016-05-05 14:20:43 -07:00
Zach Riggle 31c1070ac8 I have an instance of a class “Context” called “context” with a property that returns an object which is actually a Context Manager which can be used as a function decorator to modify the state of the object “context” while in the context of the decorated function. 2016-05-05 14:19:52 -07:00
Zach Riggle 59102739f5 Move enable_uart() into the Kernel object 2016-05-05 14:19:52 -07:00
Zach Riggle a02d3277ce Lots of changes for adb module to support direct access to properties, kernel data, and the ability to enable UART debugging 2016-05-05 14:19:52 -07:00
Zach Riggle 2f75eb6c3a Add context.device so that we can scope serial numbers 2016-05-05 14:19:52 -07:00
Zach Riggle 22c97ee762 Fix package URL for qemu-user-static on Travis 2016-05-04 13:03:39 -07:00
Zach Riggle 500a2720a5 Fix regression with vma=None 2016-05-04 01:08:02 -07:00
Zach Riggle 2fc9a83a50 Fix serial tubes 2016-05-04 00:11:27 -07:00
Zach Riggle b572a9da4a Simplify context.adb for the basic case 2016-05-04 00:11:27 -07:00
Zach Riggle 3db45f46e4 Add "shared" option for ELF-building functions to generate DSOs. 2016-05-03 13:24:24 -07:00
Zach Riggle 41383b3330 ArgumentParser object must be at global scope for documentation generation to work 2016-04-25 15:30:42 -05:00
Zach Riggle 1a3d81f8f1 Do not manually close the log file.
It should get cleaned up by gc anyway.
2016-04-25 15:24:24 -05:00
Zach Riggle 4e04c8bfb3 Add repr() for timeout maximum 2016-04-25 15:12:37 -05:00
Zach Riggle 94abecce80 A bit more documentation for context.proxy 2016-04-25 14:56:02 -05:00
Zach Riggle 7f733aa63b Modify elfdiff to copy the files to a single location so that the first two lines of objdump dont get compared. 2016-04-25 14:39:19 -05:00
Zach Riggle b26a2f21fc Default argument for fit() 2016-04-25 14:04:59 -05:00
Zach Riggle d91b05b43a Switch from error to a single warning. 2016-04-25 14:04:53 -05:00
Zach Riggle 9aff300cee Fix wget() keyword 2016-04-22 14:52:30 -07:00
Zach Riggle 806d506510 Enhancements to Corefile to expose vdso/vvar/exe 2016-04-22 12:56:46 -07:00
Zach Riggle f0010e4413 Switch _lookup_build_id to use compare; remove breakpoint 2016-04-22 11:25:42 -07:00
Zach Riggle 58c61897ba Take failure case with error message 2016-04-22 10:52:32 -07:00
Zach Riggle dc083ae7b9 Fix regression on searching for DT_NULL 2016-04-22 10:51:16 -07:00
Zach Riggle 7029b38cce Refactor and optimize the fast-path DynELF search 2016-04-22 10:36:41 -07:00
Zach Riggle cf19d35d14 Add helpful warning for DynELF without elf= 2016-04-22 10:08:50 -07:00
Zach Riggle c498ddcb6d Switch to exceptions 2016-04-22 10:04:36 -07:00
Zach Riggle 7253234fba Add handling for negative values, extend use of compare 2016-04-22 10:03:35 -07:00
Zach Riggle 7925b44582 Speed up DynELF leaking with field_compare
Also modify log.progress / log.waitfor update frequency.
2016-04-22 10:01:07 -07:00
Zach Riggle 494a078be9 Fix ADB port getenv() as integer 2016-04-21 14:37:48 -07:00
Zach Riggle 8ef546bc34 Only print the banner once per log file per execution 2016-04-21 14:23:06 -07:00
Zach Riggle 64416909bb Sort imports 2016-04-21 14:39:08 -05:00
Zach Riggle 1c6689eca4 Lower log verbosity and fix whitespace 2016-04-21 14:36:16 -05:00
Zach Riggle 4dfc571702 Add fast-path for fit() 2016-04-21 03:51:58 -07:00
Zach Riggle cb40e4b883 Update fit() doctests 2016-04-21 03:45:33 -07:00
Zach Riggle 12564a7e0d It appears that fit() has always been completely broken from my understanding of it. 2016-04-21 03:44:22 -07:00
Zach Riggle d51ad7f989 Various enhancements to DynELF and MemLeak for speed 2016-04-21 02:12:56 -07:00
Zach Riggle bbc91d6211 Add DynELF.stack and a few other improvements 2016-04-21 00:14:40 -07:00
Zach Riggle 21c10be67e Add MemLeak.p for pointer-width sizes 2016-04-21 00:14:40 -07:00
Zach Riggle ca43832880 Pass kwargs to gdb.debug 2016-04-21 00:14:40 -07:00
Zach Riggle c9dabb8606 Must re-root after restarting 2016-04-21 00:14:40 -07:00
Zach Riggle eb8f905449 Fix searching for gadget subsets, and add SYS_rt_sigreturn fallback
Fixes binjitsu/binjitsu#73
2016-04-20 17:11:44 -07:00
Peter Shih 1b9a4ca123 fix inconsistent logging level in tube.
(cherry picked from commit fe4086e710)
2016-04-20 18:24:59 -05:00
Zach Riggle 02e0c3804c Update QEMU url so testing works 2016-04-19 17:39:23 -05:00
Zach Riggle 50624322c4 Remove MIPS documentation, since Travis is on 12.04 and you cant build AArch64 binutils for it. 2016-04-19 17:07:54 -05:00
Zach Riggle 63d564810b Remove AArch64 documentation, since Travis is on 12.04 and you cant build AArch64 binutils for it. 2016-04-19 16:11:42 -05:00
Zach Riggle 03d8efaba2 Fix ELF.process() for non-Android 2016-04-19 14:01:14 -07:00
Zach Riggle c47538da1f Add dateutil to requirements 2016-04-19 13:52:51 -07:00
Zach Riggle 3192839ff8 Restore context clear, but move it inside the local scope.
The clear is necessary because vars(context) will only retrieve the set keys.  Any other context bits set later will not be correctly set to default values.
2016-04-19 14:59:43 -05:00
Zach Riggle abc646511a Simplify a few lines with getattr 2016-04-19 14:51:47 -05:00
Zach Riggle d3ab88364c Remove context clear which breaks things in interactive mode when there is no exception handler. 2016-04-19 14:49:23 -05:00
Zach Riggle 3d61ba339a Add docs for mips shellcode 2016-04-17 18:42:14 -07:00
Zach Riggle 84a1a540b0 Add docs for aarch64 shellcode 2016-04-17 18:41:34 -07:00
Zach Riggle efa8c77d3c adb: Multiple enhancements. Add push and pull. 2016-04-17 18:41:11 -07:00
Zach Riggle 734d3a17e6 gdb: Silence unlink errors, push binaries to Android devices. 2016-04-17 18:40:46 -07:00
Zach Riggle 378a32b390 Fix exception on extract=True for make_elf_from_assembly 2016-04-17 18:40:22 -07:00
Zach Riggle 6bf0989e2f ELF supports ADB 2016-04-17 18:39:45 -07:00
Zach Riggle 158f6d7758 run_in_new_terminal supports argv in addition to strings 2016-04-17 18:39:35 -07:00
Zach Riggle 38047c15c6 Android constants are the same as Linux constants 2016-04-17 17:21:57 -07:00
Zach Riggle 56fbd583e6 Change log levels of ADB commands, better Android support in GDB 2016-04-15 14:40:12 -07:00
Zach Riggle 2d8e5f0050 Fix pid_by_name so that the results are actually sorted, and do not return any zombie processes. 2016-04-15 11:44:37 -07:00
Zach Riggle 1b865681fc Add Android examples, cut down verbosity of adb calls. 2016-04-14 12:19:32 -07:00
Zach Riggle bcc57b3138 Add adb module, lots of refactoring GDB module to be more clean and support Android gdb.attach(). 2016-04-14 11:56:04 -07:00
Zach Riggle 87a612282d Add aarch64 sh for Android 2016-04-14 11:52:05 -07:00
Zach Riggle 215ddafc65 Add aarch64 sh 2016-04-14 11:51:38 -07:00
Zach Riggle 474d96eb52 Use shorthand 2016-04-13 15:40:01 -05:00
Zach Riggle b868c12d63 Update PLT parsing for Thumb mode entries 2016-04-13 15:38:23 -05:00
Zach Riggle d9f120e617 Add host / port support to Binjitsu 2016-04-13 15:22:21 -05:00
Zach Riggle 2c788f4f55 Fix ptrace vararg 2016-04-13 15:22:12 -05:00
Zach Riggle 2d3eb7204d Fixes for Android AArch64 debugging 2016-04-13 12:51:50 -05:00
Zach Riggle 4e2d5f096a Fix typo 2016-04-12 18:37:39 -05:00
Zach Riggle b60218a4d7 First pass support for debugging Android binaries natively. 2016-04-12 16:44:41 -05:00
Zach Riggle 51dd430ad0 Always have context.native return False for Android and CGC 2016-04-12 16:44:27 -05:00
Zach Riggle 60e5a80790 Make run_in_new_terminal work on OSX under tmux 2016-04-12 16:44:03 -05:00
Zach Riggle d4f10b0d6e Don't look for QEMU if running natively. 2016-04-12 16:43:47 -05:00
Zach Riggle 95d4b8e09d Add missing log object 2016-04-12 16:43:32 -05:00
Zach Riggle 0af33f3a6f Simplify process.core since I just learned about the gcore command line tool. 2016-04-04 20:11:54 -07:00
Zach Riggle 68207adbe4 Write the GDB script to the terminal when debugging is enabled 2016-04-04 16:20:52 -07:00
Pi-Hsun Shih 999ad63200 Fix pack when sign=True and word_size='all'
(cherry picked from commit 17caf96582)
2016-03-28 12:10:59 -04:00
Zach Riggle b45ef8dfbd Dont always try to prefix binutils with 'g'.
Fixes Gallopsled/pwntools#607
2016-03-28 12:00:51 -04:00
Zach Riggle 320e0dd80b Fix Gallopsled/pwntools#609 2016-03-28 11:56:58 -04:00
Zach Riggle c1e3d26d29 Add Unicorn, dependencies, tabs->spaces 2016-03-25 18:21:31 -04:00
Zach Riggle 73ddedebb4 Fix doctests for SFTP 2016-03-25 14:24:23 -07:00
martian 7f236f5064 Added support for generating a Dash docset.
Dash docsets can be read by various applications:

Dash         OS X, iOS         https://kapeli.com
Zeal         Linux, Windows    https://zealdocs.org
Velocity     Windows           http://velocity.silverlakesoftware.com
LovelyDocs   Android           http://lovelydocs.io
dasht        POSIX             https://github.com/sunaku/dasht
Helm Dash    emacs             https://github.com/areina/helm-dash

(cherry picked from commit dc37b0b5b2)
2016-03-25 15:57:20 -04:00
Zach Riggle 80ebf7109a Fix binjitsu/binjitsu#69 2016-03-25 13:29:12 -04:00
Morten Brøns-Pedersen 36ccc2bc81 bugfix: ui.yesno() now correctly handles <enter>
This bug happened because we no longer disable input processing in the terminal.
In particular `\r` is now translated to `\n`.  The fix is to interpret both `\r`
and `\n` as <enter> in `term/key.py`.

(cherry picked from commit 383f245082)
2016-03-25 13:21:04 -04:00
Morten Brøns-Pedersen 72416c4705 bugfix: don't call shutdown(2) when calling tubes.sock.close()
This can be a problem since sockets inherited by children will see the
`shutdown(2)` call as well.

(cherry picked from commit 77bfc16341)
2016-03-25 13:20:19 -04:00
Sam Brown 8f2878d0ab corrected util.twiddling.bits implementation to handle 0 validly
(cherry picked from commit 6449e14e9e)
2016-03-25 13:14:39 -04:00
Morten Brøns-Pedersen 10487c23ac added fiddling.bits(0) as a doctest
(cherry picked from commit 10c3f079c5)
2016-03-25 13:13:49 -04:00
Mathias Svensson a18c23cf2d Fix annoying setup.py behaviour.
When installing pwntools, setup.py required a very new version of
requests -- even though we never used any new features.

This is a problem, since the required version is much never than what is
in e.g. ubuntu's package repo. While this by itself is not much of a
problem, it is a problem if one installs python-pip from the distro's
repo as well, since python-pip will try to use the newest version of the
requests library, which caused pip to break.

The solution: Do not force such a new version of python, instead live
with a much older version.

(cherry picked from commit f91299986e)
2016-03-25 13:10:31 -04:00
Sam Brown 714f27fee9 added mailing list link to README.md
(cherry picked from commit 126e2857ad)
2016-03-25 13:08:35 -04:00
peter50216 9942ae157f Don't depend on python dict.item() order.
(cherry picked from commit 3564b9e014)
2016-03-25 13:07:12 -04:00
peter50216 36ead5ac57 Fix inconsistency between error message and code.
Code says context.bits should be > 0, but error message says >= 0.
Since 0 bit architecture doesn't make sense at all, make them all be > 0.
(cherry picked from commit def9400d48)
2016-03-25 13:03:20 -04:00
Morten Brøns-Pedersen 18049ddddb example of gdb.attach
(cherry picked from commit 883ddb30b5)
2016-03-23 13:29:02 -04:00
peter50216 6f74c7f13e Don't depend on python dict.item() order.
(cherry picked from commit 3564b9e014)
2016-03-23 13:27:58 -04:00
Zach Riggle 17b48f7186 Catch corner case in process.leak 2016-03-22 10:27:38 -07:00
Zach Riggle a518a60388 Open in binary mode 2016-03-21 18:05:07 -07:00
Zach Riggle 78e394bd6d Add documentation to process.leak and another option 2016-03-21 18:04:51 -07:00
Zach Riggle 282b853c2a Add process.leak() function for testing leaks 2016-03-21 18:01:06 -07:00
Zach Riggle aa64f71075 Add aliases for connect_remote and listen_remote 2016-03-17 16:42:08 -04:00
Zach Riggle 354213c475 Learn full path to the executable for ssh.process 2016-03-17 16:14:19 -04:00
Zach Riggle d22f6c457f Remove argparse requirement. Fixes Gallopsled/pwntools#598. 2016-03-16 12:58:42 -04:00
Zach Riggle 03baaa3807 Update Docs badge 2016-03-16 12:55:29 -04:00
Zach Riggle a5df5ee6a0 More trying to fix ReadTheDocs build 2016-03-16 07:00:43 -07:00
Zach Riggle c5b3d343ad Fix build for readthedocs.org which dies on terminal stuff. 2016-03-16 06:59:36 -07:00
Zach Riggle 1413caf401 Merge pull request #71 from kbeckmann/master
Import pwnlib.util.safeeval in constgrep
2016-03-16 09:45:37 -04:00
Zach Riggle 09a637eabe Fix more docs links 2016-03-16 06:45:16 -07:00
Zach Riggle bb95c6fbbd Fix docs link 2016-03-16 06:44:26 -07:00
Zach Riggle b0cb09ae67 Complete fix in 0ce1ebb for Gallopsled/pwntools#601 2016-03-16 06:42:39 -07:00
Zach Riggle 669c963290 Fix typo in Dockerfile 2016-03-16 06:15:59 -07:00
Konrad Beckmann 0e0cb7c0e3 Import pwnlib.util.safeeval in constgrep 2016-03-16 10:59:58 +01:00
Zach Riggle bc20216579 Add ASAN/MSAN/UBSAN to checksec 2016-03-15 16:11:21 -07:00
Zach Riggle 0ce1ebbd81 Fixes Gallopsled/pwntools#601 2016-03-14 18:36:33 -04:00
Zach Riggle d3074011d6 Update Dockerfile 2016-03-10 15:59:55 -05:00
Zach Riggle 03b8eb8694 Update Dockerfile 2016-03-10 15:58:25 -05:00
Zach Riggle 3b383ece1c Extract list of data elements from Buffer when unget()'ing a Buffer. Fixes #596
(cherry picked from commit fde04c737b)
2016-03-03 15:51:18 -05:00
Zach Riggle 524a76b925 Skip $PATH resolution for which() when a path component is detected. Also remove carriage returns from ssh.interactive() output. 2016-02-19 23:22:58 -05:00
Zach Riggle 541734a097 Simplify coredump_filter code in case the process dies between the two statements 2016-01-28 13:49:06 -05:00
Zach Riggle cf203cc91e Enable compression for SSH 2016-01-28 00:27:38 -05:00
Zach Riggle b52b970a28 Update ssh.process to match process for usage of setuid 2016-01-28 00:27:25 -05:00
Zach Riggle b36c78805f Add process.corefile; improve process.libs; update process.setuid 2016-01-28 00:26:54 -05:00
Zach Riggle 54584e09c0 Merge pull request #66 from PankajKataria/master
Fix typo
2016-01-24 17:29:39 -05:00
Zach Riggle 2314322369 Add tcp and udb helper classes for remote 2016-01-22 23:29:02 -05:00
Zach Riggle 0ef6a9a383 Add context.device 2016-01-22 23:15:53 -05:00
Zach Riggle 131eefaf05 Add context.noptrace option 2016-01-22 23:14:00 -05:00
Zach Riggle 63ca4f51b1 Ensure coredumps contain *everything* 2016-01-04 18:08:00 -05:00
Zach Riggle e806bf73f6 Fix Corefile parsing verbosity, and make elf.string() bail when reads fail. 2015-12-29 15:09:35 -05:00
Zach Riggle 2cf84db4ca Handle Corefiles with no environment variables 2015-12-29 13:09:59 -05:00
Zach Riggle cb5f04de6b Fix presentation of env on log line when env={} 2015-12-29 12:49:52 -05:00
Zach Riggle c8228729f1 Allow empty environments via SSH 2015-12-29 12:31:40 -05:00
Pankaj Kataria 098888da2f Fix typo
Fix typo
2015-12-27 08:28:06 +05:30
Zach Riggle c250f00abe Fix XOR shellcode and tests for arm and aarch64 2015-12-26 13:13:59 -08:00
Zach Riggle 02ffc4034e Simplify aarch64 by one instruction 2015-12-26 15:10:43 -05:00
Pankaj Kataria 00047af206 Corrected description of download_dir function 2015-12-26 23:22:35 +05:30
Zach Riggle 5a60b591be Fix IRC link 2015-12-21 17:19:22 -05:00
Zach Riggle e54cd0ddf7 Merge branch 'ssh-agent' 2015-12-21 17:02:44 -05:00
Zach Riggle 8eec3e2d12 Disable use of ssh-agent by default 2015-12-21 16:59:44 -05:00
Zach Riggle 1738218f81 Don't be too aggressive with ssh.process() status messages 2015-12-12 02:38:14 -05:00
Zach Riggle e3c1aad702 Fix bug for NT_FILE and environment variable addresses 2015-12-12 02:37:35 -05:00
Zach Riggle df7f08a5ed Fix corefile support for mappings without NT_FILE 2015-12-11 19:19:15 -05:00
Zach Riggle 44548b0a72 Better error handling for ssh.process(), and less verbose log messages 2015-12-11 17:55:24 -05:00
Zach Riggle 5512ecf450 Add warning message for when the corefile isn't loaded 2015-12-11 16:00:26 -05:00
Zach Riggle 8b969da149 Fix regression when parsing some functions like __libc_start_main@@GLIBC_2.0 2015-12-11 15:58:19 -05:00
Zach Riggle 176e45d9f6 Assume that core files are desired 2015-12-11 15:48:09 -05:00
Zach Riggle 594f35e4f7 Enhance corefile parsing to extract environment variable addresses 2015-12-11 15:48:09 -05:00
Zach Riggle ea2493bd56 Do not dump GDB traffic when debugging is verbose 2015-12-11 04:10:37 -05:00
Zach Riggle 3ef1e1a7d5 Further enhancements to Core 2015-12-11 04:10:37 -05:00
Zach Riggle e978986a84 Add support for extracting register state from core files 2015-12-11 04:10:37 -05:00
Zach Riggle faf3e42861 Merge branch 'socks5' 2015-12-11 04:07:30 -05:00
Zach Riggle 32cff88c56 Update .executable to be the original binary, so that .libs and .libc works for process() and ssh_channel() 2015-12-10 22:00:02 -05:00
Zach Riggle f32069589d Convert ssh_channel.exe ==> ssh_channel.executable to be the same as process.executable 2015-12-10 21:46:13 -05:00
Zach Riggle 926231b4ed Fix test 2015-12-08 12:39:45 -05:00
Zach Riggle f08e2c8731 Move output to stdout 2015-12-08 10:24:54 -05:00
Zach Riggle ee1ca61d37 Silence log output in unit test 2015-12-08 10:24:46 -05:00
Zach Riggle 42d08b43fc logging 2015-12-07 17:28:45 -05:00
Zach Riggle ab692c1569 Add logging and socks to the toplevel 2015-12-07 17:23:34 -05:00
Zach Riggle 7640c3fa9f Simplify context setup 2015-12-07 17:23:18 -05:00
Zach Riggle 3db5c4d0ce Add support for SOCKS proxies 2015-12-07 17:15:25 -05:00
Zach Riggle 3bcf57bcd3 Add unit test for aslr==0 to set unlimited stack size 2015-12-07 17:06:23 -05:00
Zach Riggle 714bc320c4 Fix argument for tube.p64 2015-12-03 13:26:57 -05:00
Zach Riggle 24c32f541d Fix log message for ssh.interactive() 2015-12-03 13:26:45 -05:00
Zach Riggle f8753f2f5b Add **kw to run_shellcode 2015-12-03 13:26:20 -05:00
Zach Riggle 507deae10f Add KB,MB,GB globals 2015-12-03 13:25:37 -05:00
Zach Riggle d4dbdb58df Fix "execute" argument to gdb.debug variants 2015-12-03 13:25:12 -05:00
Zach Riggle 59ae1a999a Add ssh.which and other minor bugfixes in ssh 2015-11-30 09:50:42 -05:00
Zach Riggle 1582064bed Add .libc to process and ssh.process; also convert DynELF.libc to a property 2015-11-23 13:10:29 -08:00
Zach Riggle 506be041b7 Add nosetuid to ssh.process 2015-11-20 20:08:44 -08:00
Zach Riggle 8699c98a6f Add signed and unsigned 2015-11-20 20:05:36 -08:00
Zach Riggle 1bcc4626e3 Add option to disable setuid 2015-11-20 23:04:57 -05:00
Zach Riggle d6e4c7d76d Add log.hexdump 2015-11-15 00:16:14 -05:00
Zach Riggle ee8a96c39d Re-add cyclic hexdump to hexdump() 2015-11-15 00:15:57 -05:00
Zach Riggle 49dd666026 Fix dealarm_shell issue where "which" doesnt sent a new line if the binary is missing 2015-11-15 00:15:41 -05:00
Zach Riggle 675155abc8 Convert len => length 2015-11-12 14:58:05 -05:00
Zach Riggle 8d4b1f84f8 Add context.aslr and options to disable ASLR via process() and ssh.process() 2015-11-10 16:26:25 -05:00
Zach Riggle 8ffb0dfacf Enhance error messages 2015-11-09 14:36:48 -05:00
Zach Riggle aff7b8e3a3 Simplify a few lines of code 2015-11-09 14:36:11 -05:00
Zach Riggle 438c9a303b Add tube.sendlines method 2015-11-09 13:10:50 -05:00
Zach Riggle f0f4180fd4 Fix test failure introduced by bc6cc93 2015-11-07 23:15:59 -05:00
Zach Riggle aad6e9ae9b Add support for setting log colors from ~/.pwn.conf 2015-11-07 23:12:37 -05:00
Zach Riggle bc6cc93537 Add option to skip setting TTY raw mode. Use os.environ for process() so that preexec_fn can use it. 2015-11-07 20:06:00 -05:00
Zach Riggle 89a60e71b8 Remove termcap did_init, since it breaks terminals 2015-11-07 16:20:25 -05:00
Zach Riggle 6c6b16bb16 Simplify PTY slave logic 2015-11-07 16:08:21 -05:00
Zach Riggle b1575e6a0f Fix infinite recursion on accessing self.proc in close() 2015-11-07 16:04:00 -05:00
Zach Riggle 4c38d29ac3 Gate termcap.get with an initialization flag 2015-11-07 15:48:14 -05:00
Zach Riggle 232ebd5e6d Update docs/requirements.txt to install all requirements. 2015-11-07 15:43:36 -05:00
Zach Riggle f79b447378 Remove CLA 2015-11-07 15:31:14 -05:00
Zach Riggle 45ea91fa8e Fix syscall stubs using "from" as a variable name. 2015-11-07 15:31:14 -05:00
Zach Riggle 55a47c95b9 Fix documentation errors. 2015-11-07 15:31:14 -05:00
Zach Riggle dbd334673d Fix behavior with getpass() by making stdin also be a raw TTY 2015-11-07 15:31:14 -05:00
Zach Riggle 73d8e06a4b Detect gdbserver in the working directory 2015-11-03 19:16:36 -05:00
Zach Riggle 6f248e8a5e Add context.mask 2015-11-03 17:05:18 -05:00
Zach Riggle d90566d30a Add wait alias for wait_for_close 2015-11-03 16:42:51 -05:00
Zach Riggle 6db7b8cfbf Fix term mode. Broken since 11fa0d8d6d 2015-11-03 16:38:58 -05:00
Zach Riggle aa323a40df Ensure self.cwd is always set; simplifies some logic 2015-11-03 16:29:04 -05:00
Zach Riggle 8fc7e64ff5 Default working directory is "." 2015-11-03 16:27:36 -05:00
Zach Riggle 2264290a6f Don't print e.g. '\x04' * 0x1 2015-10-30 16:27:55 -04:00
Zach Riggle 170d4999eb Update Android sh scripts to properly set arg0 since it is expected. 2015-10-29 19:39:27 -04:00
Zach Riggle 3520393b62 Add Android includes 2015-10-29 19:37:53 -04:00
Zach Riggle 88ff1f3533 Update Thumb execve to properly support string arrays 2015-10-29 19:37:14 -04:00
Zach Riggle e5223e4bd1 Update ARM execve to properly support string arrays 2015-10-29 19:31:53 -04:00
Ryan afdb7a4449 Update about.rst 2015-10-27 15:04:31 -04:00
Zach Riggle d3814a3d39 Add Android OS 2015-10-27 15:02:30 -04:00
Zach Riggle 515af41f85 Update Android sh path 2015-10-27 15:02:25 -04:00
Zach Riggle c66b809006 Add Android templates and headers as symlinks 2015-10-25 23:48:26 -04:00
Zach Riggle c2339b62f1 Fix asm regression 2015-10-25 19:35:57 -04:00
Zach Riggle e7a72e086b Add default arguments for mmap 2015-10-25 19:31:00 -04:00
Zach Riggle 1bed4850b0 Dont send cd command if there's no change 2015-10-25 19:29:58 -04:00
Zach Riggle 4993b4ada7 Simplify header layout 2015-10-25 19:29:41 -04:00
Zach Riggle 2c8652bf91 Detect whether gdbserver is installed 2015-10-25 19:18:05 -04:00
Zach Riggle 2219f183c2 Fix ARM push. There is no push-immediate. 2015-10-25 18:36:02 -04:00
Zach Riggle 278ebee345 Add sublime-settings [skip ci] 2015-10-25 16:51:38 -04:00
Zach Riggle 81de47c025 Add errno command-line helper 2015-10-25 16:40:24 -04:00
Zach Riggle e1b93c77f5 Merge pull request #61 from jaybosamiya/patch-1
Fix typos
2015-10-15 17:34:02 -04:00
Jay Bosamiya 77383048fb Fix typo
"Data" is, by itself plural. "Datas" is not a word.
2015-10-16 01:59:24 +05:30
Jay Bosamiya fb3c55af06 Fix typos
I'm pretty sure it shouldn't be "he" there.
2015-10-16 01:58:00 +05:30
Zach Riggle d7a0bafc5f Permit dot access to symbol names, add elf.sym alias for elf.symbols 2015-10-14 13:22:31 -04:00
Zach Riggle 11fa0d8d6d This contains a large merge from the Samurai internal repo.
Changes:

- `pwn/init` initialization code simplified, and some was moved to `pwnlib/args`
- `scramble` script added to `pwnlib.commandline`; support for encoders added to relevant scripts
- Added shellcode encoders for several architectures
- Added CGC architecture shellcode and constants
- Added Shellcraft templates for every syscall
- Added `xor_key` helper for generating a 4-byte XOR key for a data stream
- Added `getdents` for use with the relevant shellcraft scripts
- Add ELF loaders for all architectures
- Lots of MIPS and AArch64 shellcode
2015-10-12 02:13:13 -04:00
Morten Brøns-Pedersen 768b24e192 added __neq__ method to pwnlib.term.key
(cherry picked from commit 31d06cb807)
2015-10-06 18:09:25 -04:00
Morten Brøns-Pedersen 42d8f59e11 import completer with pwnlib.term and update no-available-completions-text 2015-10-06 18:09:09 -04:00
Morten Brøns-Pedersen c734802900 fix before and after keywords for term.output() 2015-10-06 18:08:58 -04:00
Zach Riggle b4945667c7 Clean up code from 442873e 2015-10-06 18:08:09 -04:00
antoniob 442873e5be close file descriptors in process.close() and avoid leaving zombie processes around
(cherry picked from commit fa2e11391e)
2015-10-06 18:06:10 -04:00
Zach Riggle 29eefaac2b Revert disable-randomization change from 3b9614a535 2015-10-06 18:05:57 -04:00
Zach Riggle c5a92cdfb6 Simplify use if int() 2015-09-21 14:14:40 -04:00
Zach Riggle 4c61ed3b0b Fix #59 2015-09-15 15:11:26 -04:00
Zach Riggle 88d1643804 Fix ssh.run() environment variables 2015-09-01 14:50:44 -04:00
Zach Riggle f12253e34d Add dockerfile 2015-08-31 03:53:31 -04:00
Zach Riggle 783cc096a6 Fix which() precedence 2015-08-30 23:29:46 -04:00
Zach Riggle 549541b6ea Handle EINTR on select 2015-08-30 23:21:30 -04:00
Zach Riggle a2916b7d01 Add live demo 2015-08-30 22:55:00 -04:00
Zach Riggle a6a5cfeb9c Add i686 alias 2015-08-30 15:01:05 -04:00
Zach Riggle c18f8a202d Sockets should be set to non-blocking for spawned processes 2015-08-25 16:54:30 -04:00
Zach Riggle 59a309d6ac Fix UDP socket buffering 2015-08-25 16:47:16 -04:00
Zach Riggle a676adbc52 Update ELF 2015-08-23 16:51:12 -04:00
Zach Riggle e08aebe9fd Remove shippable, since its crap 2015-08-22 15:41:17 -04:00
Zach Riggle f968120997 Only request ptrace_scope when required 2015-08-22 15:40:05 -04:00
Zach Riggle b03d83dfe7 Add elf.functions 2015-08-14 18:20:01 -04:00
Zach Riggle f9c7ea87fa process() now handles empty environments 2015-08-14 17:58:08 -04:00
Zach Riggle 1a389ca2b8 Update binutils.rst 2015-07-30 13:34:27 -04:00
Zach Riggle ecbe0e9fa9 Update binutils.rst 2015-07-30 13:34:16 -04:00
Zach Riggle 76d78a0e7e Install QEMU 2.3 instead of 2.1 2015-07-29 08:03:01 -04:00
Zach Riggle 3f8d4cc37c Add aarch64 binutils 2015-07-29 07:52:19 -04:00
Zach Riggle e7ef1c1029 Merge pull request #55 from eQu1NoX/MAIN-arm
Integration test for ARM
2015-07-15 12:11:09 -04:00
eQuiNoX__ e6752fbd30 Correct tests that depend on 0x900000 vs 0x0 2015-07-15 13:14:59 +02:00
eQuiNoX__ de393e4afa Integration test for ARM 2015-07-15 12:40:44 +02:00
Zach Riggle f92ea95299 Rebuild the ARM constants with __ARM_EABI__ and __KERNEL__ 2015-07-14 16:33:20 -04:00
Zach Riggle ee4028c10a Merge pull request #54 from eQu1NoX/MAIN2
MIPS integration tests for SROP
2015-07-14 08:17:17 -04:00
eQuiNoX__ 69ee58343e Trivial correction 2015-07-14 14:06:43 +02:00
eQuiNoX__ dca6232d97 Mips integration tests 2015-07-14 13:54:55 +02:00
Zach Riggle 8c1565ae3e Update README.md 2015-07-13 20:12:02 -04:00
Zach Riggle d1a70dc0fb Add screenshot 2015-07-13 20:10:35 -04:00
Zach Riggle 48a1cc72b0 Create README.md 2015-07-13 20:07:09 -04:00
Zach Riggle c29aebdb77 Add docstrings to QEMU functions 2015-07-13 16:28:48 -04:00
Zach Riggle ae888803b6 Add qemu-XXX-static binaries to Travis 2015-07-13 15:24:01 -04:00
Zach Riggle 4386b8d82a Merge pull request #49 from eQu1NoX/MAIN2
Adding in Aarch64 support.
2015-07-10 23:23:59 -07:00
eQuiNoX__ a44ba4fa16 Adding in doctests 2015-07-09 16:25:58 +02:00
Zubin Mithra 9ac4e8d9cb Adding in Aarch64 support.
This commit adds in Aarch64 SROP support. PoC that calls mprotect
can be viewed at

https://bitbucket.org/eQu1NoX/pwntest-arm64/src/a7936795d47c\?at\=master
2015-07-09 15:42:18 +02:00
Zach Riggle 9559a99854 Fix doctests in ELF 2015-07-06 22:50:57 -07:00
Zach Riggle 1897045707 Merge remote-tracking branch 'nemopwn/master' 2015-07-06 21:54:57 -07:00
Zach Riggle 973efff68b Merge pull request #48 from binjitsu/asm-large-pages
Fix large page sizes on AMD64
2015-07-06 18:15:27 -07:00
Zach Riggle dd58f40991 Fix large page sizes on AMD64 2015-07-06 21:10:18 -04:00
Zach Riggle 0f710677d3 Touch README to force Travis rebuild 2015-07-06 14:50:20 -07:00
Zach Riggle 6d2ccdcf93 Merge remote-tracking branch 'gallopsled/master' 2015-07-06 14:47:22 -07:00
nemo 5d1e3500f0 Two changes:
- Add .ropeproject to .gitignore
- Make documentation of class ELF display normally
2015-07-06 16:15:47 +08:00
Zach Riggle 37c55233ed Merge pull request #45 from eQu1NoX/MAIN2
Test for amd64
2015-07-02 14:02:44 -07:00
eQuiNoX__ 1f289e3dbd The following changes were made :-
- test for amd64 added in
- sigreturn template for amd64 added in. sigreturn template for i386 modified
- read.asm added for amd64
2015-07-02 19:01:57 +02:00
Zach Riggle d66c273e60 Merge pull request #44 from eQu1NoX/MAIN2
Add in support for mips, mipsel + doctests
2015-06-29 12:27:26 -07:00
eQuiNoX__ ed7b459be9 Following changes were made :-
- Add support for MIPS and MIPSel
- Change format to offset:register in srop.py
- Correct doctests in srop.py
- Change usage in rop.py
2015-06-29 16:11:19 +02:00
Zach Riggle e544cd43b8 Fix test 2015-06-25 12:54:56 -04:00
Zach Riggle cfdfaff37e Fix SigReturnFrame.get_frame docstring [skip ci] 2015-06-25 12:37:55 -04:00
Zach Riggle 38e9f4274d Fix code-blocks [skip ci] 2015-06-25 12:36:29 -04:00
Zach Riggle 88d79af9c9 Update FormatStr doctest formatting 2015-06-25 00:01:38 -04:00
thetlk e675c2068e Enhance FormatString support, and add doctests 2015-06-24 23:42:03 -04:00
Zach Riggle 4cecbac380 Re-enable teset with workaround for Shippable 2015-06-24 16:24:06 -04:00
Zach Riggle b4f8877660 Skip test which fails on Shippable 2015-06-24 16:03:44 -04:00
Zach Riggle 1f5fde3302 Fix listen(fam=socket.AF_INET6) 2015-06-22 23:50:14 -04:00
Zach Riggle 9e17e76054 Simplify test 2015-06-22 23:21:51 -04:00
Zach Riggle 4f5be7144b Fix process(..., stdout=PIPE) and add tests 2015-06-22 23:19:24 -04:00
Zach Riggle 51d8a89d4b Shippable needs apt-get update to find gcc-multilib 2015-06-22 11:58:28 -04:00
Zach Riggle 523344b64e Add gcc-multilib to Travis and Shippable requirements 2015-06-22 11:53:57 -04:00
Zach Riggle 7486c79a67 Update .travis_install.sh 2015-06-22 09:27:47 -04:00
Zach Riggle 3a565a8171 Fix docstring [skip ci] 2015-06-21 15:40:43 -04:00
Zach Riggle 6b82b6b7dc Fix docstring [skip ci] 2015-06-21 15:39:27 -04:00
Zach Riggle c4dd91c5de Fix docstring [skip ci] 2015-06-21 15:38:14 -04:00
Zach Riggle 4b33859132 Add XOR encoder module for docs 2015-06-21 15:37:44 -04:00
Zach Riggle 6aff977171 Fix assembly for arches which want __start 2015-06-21 15:28:21 -04:00
Zach Riggle 6141e7d465 Add shellcode encoders and API 2015-06-21 15:26:55 -04:00
Zach Riggle 71845f6198 Remove unnecessary gadgets in the example 2015-06-21 15:22:49 -04:00
Zach Riggle d00cae41a6 Make stack and code rwx for generated ELFs 2015-06-21 15:22:33 -04:00
Zach Riggle 1327f2b33b :) 2015-06-19 23:43:04 -04:00
Zach Riggle b6ea53696b Fix setregs 2015-06-18 17:23:55 -04:00
Zach Riggle be1e13389a Make disassembly colors better for operators 2015-06-18 17:18:25 -04:00
Zach Riggle 6e562b2bdb Make shifting easier to read 2015-06-18 17:13:32 -04:00
Zach Riggle dd7c0acae1 Make xor easier to read 2015-06-18 16:50:57 -04:00
Zach Riggle b10f109967 Make not easier to read 2015-06-18 16:46:11 -04:00
Zach Riggle 63da39ea18 Make neg easier to read 2015-06-18 16:42:21 -04:00
Zach Riggle 8b459a066e Update doctests 2015-06-18 16:33:03 -04:00
Zach Riggle 1187e544de Optimize i386 mov for a few special cases 2015-06-18 16:19:08 -04:00
Zach Riggle 49e2c52b0b Fix doctests 2015-06-17 13:04:22 -07:00
Zach Riggle fc0c7a0f69 Revert changes to make_elf. Fixes #33 2015-06-17 12:28:28 -07:00
Zach Riggle d7b957c9c1 Merge pull request #32 from thetlk/master
import pwnlib after sys.path's change
2015-06-17 15:03:53 -04:00
thetlk dad217f9ed import pwnlib after sys.path's change 2015-06-17 16:47:11 +02:00
Zach Riggle ba6eba4b13 Fix doctest 2015-06-17 07:32:09 -04:00
Zach Riggle 4f1745fbdf Restore compact size to generated ELFs 2015-06-17 07:32:09 -04:00
Zach Riggle b218776573 Switch syscall over to getregs 2015-06-17 06:20:01 -04:00
Zach Riggle e867643192 Collapse constant values in regsort, since "mov reg,reg" is at most only as expensive as "mov reg,value" and usually cheaper 2015-06-17 05:58:44 -04:00
Zach Riggle 275a3a09d4 Restore compact size to generated ELFs 2015-06-17 05:45:09 -04:00
Zach Riggle 6f0a62e751 Honor -o option in asm; mark output as executable if output format is ELF 2015-06-17 05:32:35 -04:00
Zach Riggle 70645b432b Make pushstr work for things not-a-string but which can go through packing.flat(). This makes push more simple. 2015-06-17 05:31:55 -04:00
Zach Riggle 4ea3a4932e Slightly better cdq 2015-06-17 04:59:00 -04:00
Zach Riggle 8d1f57a345 Add cdq optimization to setregs 2015-06-17 04:59:00 -04:00
Zach Riggle c00e2b1863 Add correct ipv6 address, allow accept to time out 2015-06-17 04:59:00 -04:00
Zach Riggle 2aac79c9ad Honor -o option in shellcraft; mark output as executable if output format is ELF 2015-06-17 04:59:00 -04:00
Zach Riggle 8121a95bc5 Better colorizing, which can be disabled 2015-06-17 03:45:27 -04:00
Zach Riggle 797d416a47 Add support for conditional instruction printing 2015-06-17 03:18:38 -04:00
Zach Riggle 4ad2cb87a9 Remove debug print 2015-06-17 03:17:50 -04:00
Zach Riggle 400f208ca2 Fix output of the GasLexer to parse templates better 2015-06-17 03:16:45 -04:00
Zach Riggle 800f85fe7a Add Pygments to requirements 2015-06-17 03:09:37 -04:00
Zach Riggle 30dcc6af05 Use Pygments to colorize assembly if possible 2015-06-17 03:08:50 -04:00
Zach Riggle 2078c1dca6 Add TextMate / Sublime Text language bundles 2015-06-17 02:43:10 -04:00
Zach Riggle 966cc482fd Add cat doctest 2015-06-16 23:26:33 -04:00
Zach Riggle 98f27f80d8 Fix ROP doctests 2015-06-16 20:07:55 -04:00
Zach Riggle 3c2b2b22c9 Add ROP doctest 2015-06-16 19:15:32 -04:00
Zach Riggle c03c90c204 Add i386 SROP integration test 2015-06-16 17:56:56 -04:00
Zach Riggle 4265424956 Pass kwargs down to ELF.from_bytes 2015-06-16 16:19:28 -04:00
Zach Riggle 085efbc6b4 Defer deletion of temporary files 2015-06-16 16:19:20 -04:00
Zach Riggle 1d5fe92e04 Fix VMA for make_elf 2015-06-16 16:07:10 -04:00
Zach Riggle 8ba3d52955 Add ROP.from_blob for kokjo :D 2015-06-16 15:41:25 -04:00
Zach Riggle 24c1f2d04a Add documentation for checksec 2015-06-15 23:59:25 -04:00
Zach Riggle 1e59b54c4e Add shellcraft --run 2015-06-15 23:57:58 -04:00
Zach Riggle e21f8a0a24 Don't execute binaries which are not dynamically linked 2015-06-15 23:57:45 -04:00
Zach Riggle 58b6ce5ec4 Add asm --run and --infile 2015-06-15 23:56:17 -04:00
Zach Riggle e54c16c5e9 Dont emit CRLF since it shows empty lines 2015-06-15 23:11:26 -04:00
Zach Riggle ac4524607a Dont emit CRLF since it shows empty lines 2015-06-15 23:09:31 -04:00
Zach Riggle 757f60acb0 Unlink GDB temporary files. Fixes #519 2015-06-15 17:29:27 -04:00
Zach Riggle b57beda046 Fix missing imports, simplify runner module 2015-06-15 17:22:05 -04:00
Zach Riggle 1ac87052c2 Add powerpc and powerpc64 register names so you can "li r0,0" 2015-06-15 14:23:54 -04:00
Zach Riggle 502de0c92f Add missing constants 2015-06-15 14:17:18 -04:00
Zach Riggle 2093ca4632 Dont bail on various architectures 2015-06-15 14:16:51 -04:00
Zach Riggle 86e422de0c Update TESTING.md 2015-06-15 09:32:11 -04:00
Zach Riggle af5ba55325 Merge remote-tracking branch 'gallopsled/master' into integration 2015-06-15 09:07:34 -04:00
Zach Riggle 405d9cc2af Import iters 2015-06-15 09:01:32 -04:00
Zach Riggle 1631d2265e Fix tests 2015-06-15 08:57:41 -04:00
Zach Riggle 77cc76769c Merge with gallopsled/master 2015-06-15 08:54:50 -04:00
Zach Riggle 31f05f4c7f Emit nicer assembly comments 2015-06-15 08:38:35 -04:00
Zach Riggle 24f49a46cf Add echo example 2015-06-15 08:37:52 -04:00
Zach Riggle 28307ec699 Update TESTING.md 2015-06-15 08:17:46 -04:00
Zach Riggle c50f224b6b Update TESTING.md 2015-06-15 08:14:39 -04:00
Zach Riggle 3a63c0804d Feed results of unpack() through int() so it doesnt return long() 2015-06-15 08:12:45 -04:00
Zach Riggle 1d5825c844 Fix whitespace, 2015-06-15 08:10:55 -04:00
Zach Riggle 709d834945 Fix whitespace, add amd64 version 2015-06-15 08:08:57 -04:00
Zach Riggle f3b0645568 Fix simple case of regsort. Add i386.setregs 2015-06-15 08:05:53 -04:00
Zach Riggle 640d0261fd Add register sorting and dependency resolution module 2015-06-15 07:59:55 -04:00
Zach Riggle 89dd56a2a3 Use LocalContext for ABI 2015-06-15 02:35:55 -04:00
Zach Riggle e45ee3053e Automatically set arch for shellcraft; update i386 exit; add amd64 exit 2015-06-15 02:32:24 -04:00
Zach Riggle 65a60a6170 Automatically set arch for shellcraft; update i386 exit; add amd64 exit 2015-06-15 02:32:07 -04:00
Zach Riggle 63c5d4fb60 Add doctest for i386.linux.exit 2015-06-15 02:21:01 -04:00
Zach Riggle 6c27af5e16 Update __init__.py 2015-06-14 20:49:37 -04:00
Zach Riggle 931d18f836 Update license from pwntools 2015-06-14 20:47:35 -04:00
Zach Riggle 41350f51cf TESTING 2015-06-14 20:46:37 -04:00
Zach Riggle 75b230c052 Enable @LocalContext for ELF.from_XXXX 2015-06-14 20:38:20 -04:00
Zach Riggle 24a70eb8ff Add better tests and ELF.from_bytes 2015-06-14 18:59:26 -04:00
Zach Riggle 918115302c Add make_elf_from_assembly and ELF.from_assembly 2015-06-14 18:53:03 -04:00
Zach Riggle af92658f42 Add context.clear(...) arguments 2015-06-14 17:18:33 -04:00
Zach Riggle ee35d10303 Add TESTING.md 2015-06-14 17:11:51 -04:00
Zach Riggle 3b0cf3cbaf Nope time is bad, not installed on Travis 2015-06-14 16:44:41 -04:00
Zach Riggle 7292806e08 Explicitly time the run 2015-06-14 16:43:12 -04:00
Zach Riggle f263f9e10d Update docstring 2015-06-14 16:38:47 -04:00
Zach Riggle cfa0d50339 Silence Sphinx warning 2015-06-14 16:38:28 -04:00
Zach Riggle 7cf6360dbb Add runner.rst to index.rst 2015-06-14 16:36:06 -04:00
Zach Riggle 32fef0cf05 Add missing link 2015-06-14 16:32:23 -04:00
Zach Riggle 95b1adebbf Fix Sphinx warnings 2015-06-14 16:30:01 -04:00
Zach Riggle df3a746768 Fix docs 2015-06-14 16:29:39 -04:00
Zach Riggle 11bfb24506 Add testexample link 2015-06-14 16:26:14 -04:00
Zach Riggle ddaa95d6dd Fix testexample 2015-06-14 16:24:02 -04:00
Zach Riggle 77e8ab1d84 No shippable caching 2015-06-14 16:23:23 -04:00
Zach Riggle e9497169f1 Remove set -ex 2015-06-14 16:21:16 -04:00
Zach Riggle 9f552c94cb Fix testexample 2015-06-14 16:20:30 -04:00
Zach Riggle 0cdb715e7c Fix runner banner 2015-06-14 16:14:01 -04:00
Zach Riggle 9a5b4e09af Fix SROP banner 2015-06-14 16:13:52 -04:00
Zach Riggle bac6a9f543 Fix testexample module 2015-06-14 16:13:39 -04:00
Zach Riggle b901ff3b1e Add shippable configuration 2015-06-14 16:12:04 -04:00
Zach Riggle de47ac9cf5 Add Shippable badge 2015-06-14 16:07:10 -04:00
Zach Riggle 72e9b3135e Fix Shippable build since it really doesnt have terminfo 2015-06-14 15:55:52 -04:00
Zach Riggle 7413dffac7 Add test example modules 2015-06-14 15:54:56 -04:00
Zach Riggle 7b4a415a90 Skip failing SROP tests 2015-06-14 15:45:18 -04:00
Zach Riggle 465f5875b7 Fix SROP tests 2015-06-14 15:28:47 -04:00
Zach Riggle a50cd85791 Fix Shippable builds 2015-06-14 15:28:08 -04:00
Zach Riggle 1541b20c19 Run install before SSH setup 2015-06-14 15:26:00 -04:00
Zach Riggle 54551eb072 Fix doctest 2015-06-14 15:25:18 -04:00
Zach Riggle a45da211db Move srop module 2015-06-14 15:25:08 -04:00
Zach Riggle 5bfde777bf Fix naming 2015-06-14 15:14:13 -04:00
Zach Riggle 6e0ee86cb9 Import ALL THE THINGS 2015-06-14 15:12:50 -04:00
Zach Riggle b78b91180f Add runner module, for shellcode unit tests 2015-06-14 15:08:04 -04:00
Zach Riggle 77326199e4 Fast path for LocalContext 2015-06-14 14:59:57 -04:00
Zach Riggle 287bcae4c4 Merge pull request #25 from eQu1NoX/master
ARM srop support
2015-06-11 06:58:30 -04:00
Zach Riggle 6148801e95 Fix feature regression in cyclic_find which permits integer lookups 2015-06-11 06:58:01 -04:00
Zubin Mithra f23c297d7b moving integ to different branch
Add information about various ARM coprocessors that might be present.

Correct typo

Add in comments

Change how magic numbers and offsets are stored

Use namedtuple

Renaming variables

srop.py doc modified

ARM sp check added in

Cleanup
2015-06-11 12:38:51 +02:00
Zach Riggle a4c5492772 Enable maximum number of bytes to read 2015-06-11 03:45:15 -04:00
Zach Riggle 01365128dc Fix feature regression in cyclic_find which permits integer lookups 2015-06-11 03:45:09 -04:00
Zach Riggle cbcf23c70d Fail disassembly gracefully 2015-06-10 17:32:53 -04:00
Zach Riggle 1bc94ccc58 Fix doctests 2015-06-10 16:18:40 -04:00
Zach Riggle 347ab75af5 Add parens so ARM doesnt shit itself 2015-06-10 15:36:04 -04:00
Zach Riggle 72768d8b4a Fix doctest 2015-06-10 15:28:07 -04:00
Zach Riggle d3a3359c77 Save pretty name of things passed through constants.eval 2015-06-10 15:27:29 -04:00
Zach Riggle c3b006ef50 Add docs 2015-06-09 12:53:18 -04:00
Zach Riggle 14093c2d54 Fix doctest 2015-06-09 12:51:37 -04:00
Zach Riggle c21426e3a0 Don't modify original representation 2015-06-09 12:49:21 -04:00
Zach Riggle 6034b2b312 Enable disassembly with stripping the offsets and columns 2015-06-09 12:45:06 -04:00
Zach Riggle ff5f634a76 Add sockaddr changes from upstream 2015-06-09 12:04:08 -04:00
Zach Riggle af9fe4c0d2 Merge pull request #26 from binjitsu/constants
Use complex constants
2015-06-08 14:17:28 -04:00
Zach Riggle 9b9ae29a71 Fix arm shellcode 2015-06-08 14:01:03 -04:00
Zach Riggle 62b3964225 Fix thumb shellcode 2015-06-08 13:56:42 -04:00
Zach Riggle cec172ee9b Use complex constants 2015-06-07 02:35:28 -04:00
Zubin Mithra b349eaff6f Add in ARM support for SROP 2015-06-06 12:24:41 +02:00
Zubin Mithra dfa96abb09 Merge branch 'master' of http://github.com/binjitsu/binjitsu 2015-06-06 03:40:16 +02:00
Zach Riggle 8922d369e9 Allow lookups of libraries running under qemu-user by walking /etc/qemu-binfmt 2015-06-01 12:59:36 -07:00
Zach Riggle 043232336f Added docs for ELF.libc 2015-06-01 12:40:08 -07:00
Zach Riggle ffa321103b Add automatic extraction of libc.so 2015-06-01 12:39:01 -07:00
Zach Riggle 4ac5bce80e Enable .libs detection for alternate-architecture libraries when run via qemu-user. 2015-06-01 12:35:44 -07:00
Zach Riggle 9cf7e8f7e7 More more more verbose 2015-05-29 14:38:47 -04:00
Zach Riggle b7731b32e5 Verbose logging for Shippable troubleshooting 2015-05-29 14:37:14 -04:00
Zach Riggle eec0b68b52 Update docs [skip ci] 2015-05-29 14:34:45 -04:00
Zach Riggle e1331055ae Detect if current user is travis, for Shippable 2015-05-29 14:33:28 -04:00
Zach Riggle 2b909824b8 Compress debug send/recv output if it's the same byte 2015-05-28 17:56:06 -04:00
eQuiNoX__ f9d080141f Commit code that sets the esp to the next gadget 2015-05-27 12:38:31 +02:00
Zach Riggle 00d9460422 Show a better error message when connecting to an unknown host 2015-05-25 16:15:27 -04:00
Zach Riggle 525f35c143 Fix/optimize dealarm 2015-05-22 20:50:01 -04:00
Zach Riggle b36bd7ace5 Add dealarm_shell 2015-05-22 20:46:19 -04:00
Zach Riggle ce458c7fc0 Update docstring [skip ci] 2015-05-20 23:31:16 -04:00
Zach Riggle 329ef332b4 Fix docstring 2015-05-20 23:28:26 -04:00
Zach Riggle 5c0d5132e2 Add DynELF.libc() function 2015-05-20 23:23:55 -04:00
Zach Riggle 06fc1eecd5 Make Call() pretty printing... prettier 2015-05-20 23:21:09 -04:00
Zach Riggle 79c718aa43 Update docstring 2015-05-20 22:59:53 -04:00
Zach Riggle d99f7160bf Integrate new ROP building tools 2015-05-20 22:41:13 -04:00
Zach Riggle de4f14c5d2 Fix up call(0x1234,..) and .migrate 2015-05-20 21:52:19 -04:00
Zach Riggle b064c45d5e Add "cat" shellcode 2015-05-20 21:48:00 -04:00
Zach Riggle 5064a75f1f Fix str() and dump() 2015-05-18 13:25:13 -04:00
Zach Riggle 2e4692ff22 Add log.info since it wont show up otherwise 2015-05-17 10:05:39 -04:00
Zach Riggle 3b9614a535 WIPWIPWIP 2015-05-16 07:55:49 -04:00
Zach Riggle 4acd9bc928 WIPWIPWIP 2015-05-16 00:21:54 -04:00
Zach Riggle da475754fe Enable flat(-1) 2015-05-15 18:35:54 -04:00
Zach Riggle e2ddcf2471 Dont lose any more work 2015-05-15 15:13:22 -04:00
Zach Riggle 40dae903cc Example for context and cleanliness 2015-05-13 18:13:48 -04:00
Zach Riggle eecafc6ed6 Add @LocalContext decorator 2015-05-13 18:02:43 -04:00
eQuiNoX__ 32e85f5791 We dont store the registers inside srop; we just call get_registers when we need them 2015-05-13 22:33:40 +02:00
eQuiNoX__ e58a661375 The following changes were made :-
- changed usage of "self.arch to with context.local..."
2015-05-13 22:29:26 +02:00
eQuiNoX__ 9eadd74bed get_regpos_mapping removed 2015-05-13 22:07:53 +02:00
eQuiNoX__ 525650bc5b The following changes were made :-
- rop.py does not import _registers_* anymore; instead imports get_registers from srop.py
- rop.py now has a self.arch that is set to context.arch inside __init__
- (_registers_32, _registers_64) => (_registers_i386, _registers_amd64)
- get_registers and get_regpos_mapping added in
- _initialize_values now handles all archs
- get_stackpointer_index changed to get_spindex; made cleaner
- get_frame made cleaner
2015-05-13 22:06:57 +02:00
Zach Riggle d3e73d231b Merge pull request #16 from eQu1NoX/master
Initial set of commits integrating SROP with ROP
2015-05-13 00:19:22 -04:00
eQuiNoX__ d7933badf2 Add in the skeleton of integrating SROP with ROP
So now we can populate the accumulator register with the sigreturn syscall number

rop.py now finds "int 0x80" instructions.

Adding in more to srop skeleton; integrating with finding int 0x80 instruction

The following changes were made :-
- s/find/index correction for list
- required imports added in
- None as argument removed

Now generates srop frames whenever function cannot be resolved

Add in code that pivots only if the gadget is not a "pop"

dump is now modified to print out the register information from srop

Uses constants.linux.i386 for syscall numbers now

Added in some exception handling code

Rely on constants to get us the right syscall number based on context.arch

The following changes were made :-
- getattr when getting syscall_number now returns None by default
- ropgadget now looks for syscall and sysenter
- added in getattr("syscall") and getattr("sysenter")

rop.search now returns a namedtuple

The following changes were made :-
1. self.int80, self.syscall and self.sysenter now return namedtuples.
2. We have functions self.raw_address and self.raw_data to specify
   how the raw values that are added in, need to be interpreted so that
   the chain can be built accordingly.

Added in a function _get_syscall_inst that returns the address of a syscall instruction

Checking if travis builds it properly/

The following changes were made :-
- Change the body of _get_syscall_inst, make it cleaner
- Add in a self._syscall_instruction that caches the address of
  a syscall instruction that was found

Removed raw_address and raw_data; modified srop implementation to use raw()

Cleanup getattr

Now the stack pointer is modified so that we can continue constructing the ROP chain if rop.base is specified

No need of enumerate; removed

doctest for rop-srop integration added in
2015-05-13 03:53:03 +02:00
Zach Riggle e4d44c54d8 Detect fortify-source 2015-05-12 02:08:35 -04:00
Zach Riggle c5ec095b7f Fix debugging of thumb shellcode 2015-05-09 15:42:06 -07:00
Zach Riggle 476e8991ca Fix debugging of thumb shellcode 2015-05-09 15:37:58 -07:00
Zach Riggle 6e4f616c44 Allow debugging of thumb shellcode 2015-05-09 15:34:33 -07:00
Zach Riggle ffc44ece88 Fix write-ups link
Closes #15
2015-04-28 17:20:35 -04:00
Zach Riggle 40db24653c Merge pull request #13 from eQu1NoX/master
Adding in doctests + renaming x86/x64 to i386/amd64
2015-04-27 11:24:49 -04:00
Zubin Mithra 9908afd495 Adding in docs for sphinx
Dropping the doctest ifmain statements

Correct underline in rst

Add testsetup to srop.rst

Now uses packing.pack instead of struct.pack

Added in context.arch information to srop.rst and srop.py doctest

Added "context.clear()" to the doctest

Cleaned up _reg_pos_mapping up a bit

Corrected reference link

Replace "print repr()" with "unpack_many"

Added in import to srop.rst
2015-04-27 10:24:26 +02:00
eQuiNoX__ f81993c303 The following changes were made :-
1. Added in doctests for i386 and amd64.
2. Renamed x86/x64 to i386/amd64.
2015-04-26 13:56:41 +02:00
Zach Riggle 3b9e9bf3a0 Merge pull request #9 from eQu1NoX/master
Initial commit adding in SROP support for x86 and x64
2015-04-25 13:32:17 -04:00
Zach Riggle ebef41df05 Fix the architecture for mips646 ELFs 2015-04-25 10:26:33 -07:00
eQuiNoX__ 9f5c2e77b8 Renamed the registers a bit, made the example a bit more complete 2015-04-25 08:15:16 +02:00
eQuiNoX__ 116491c54c Rename registers, add references 2015-04-25 08:09:04 +02:00
eQuiNoX__ 285a370378 Add comments for the SigreturnFrame class 2015-04-25 07:41:53 +02:00
Zubin Mithra 9da1c64513 Removed unused imports 2015-04-24 20:54:56 +02:00
Zubin Mithra 8845115b1f Initial commit for adding in SROP support for x86 and x64 2015-04-24 20:50:26 +02:00
Zach Riggle 6f22a11559 Make ELF work with mips64 binaries 2015-04-24 06:00:09 -07:00
Zach Riggle b7ce1b4ccd Fix mips64 2015-04-24 05:27:23 -07:00
Zach Riggle 19f4009b6e Switch from single-arg "arch" to local context 2015-04-24 04:05:29 -07:00
Zach Riggle 17b0d4efe6 Remove redundant info from checksec, realign fields 2015-04-23 21:49:04 -07:00
Zach Riggle 2077846087 Fix newlines at EOF 2015-04-21 02:43:08 -07:00
Zach Riggle b43be94aaa Add undocumented flag to prevent ASLR from being disabled 2015-04-18 19:58:35 -04:00
Zach Riggle 8a671ac1a7 Switch to GitLab since they have a 10GB quota. Add error handling :) 2015-04-17 01:22:44 -04:00
Zach Riggle c503c9c7d5 Respect timeout for wget 2015-04-16 14:27:47 -04:00
Zach Riggle ad05fda608 Add missing architectures 2015-04-16 01:18:07 -04:00
Zach Riggle 402e324725 Fix unknown architectures throwing exceptions on GOT/PLT failure. Hide RWX comment if NX is disabled. 2015-04-16 01:08:01 -04:00
Zach Riggle d81e63f03d Remove unneeded fields 2015-04-16 00:25:55 -04:00
Zach Riggle fcd04a5c91 Add code for libcdb lookups 2015-04-16 00:14:49 -04:00
Zach Riggle 9d9b880954 i386 vs x86 fixup 2015-04-15 23:52:32 -04:00
Zach Riggle 38097d724f Add .buildid property to ELF 2015-04-15 20:58:13 -04:00
Zach Riggle 230cdafe31 ASM => ELF 2015-04-11 15:38:13 -07:00
Zach Riggle 27b7f15c9c Fix VMA for ASM 2015-04-11 15:38:13 -07:00
Zach Riggle 33ca18f931 Tell user if there are RWX segments 2015-04-09 21:05:14 -04:00
Zach Riggle 5f8ae0ef2d Allow passing in an ELF object or just a path 2015-04-09 20:52:38 -04:00
Zach Riggle 821b08240a Enable passing arguments to the marshalled function; use the same naming scheme as subprocess and pwnlib.tubes.process 2015-04-06 04:34:22 -04:00
Zach Riggle 40ea374001 Enable marshalling simple functions to the remote Python instance 2015-04-05 23:41:53 -04:00
Zach Riggle 7399918a54 By default, recv an ~= infinite number of lines 2015-04-05 23:41:42 -04:00
Zach Riggle 367af48420 Evidently whatever android-ndk uses to build binaries zeroes out sh_info for rel.plt 2015-04-02 17:56:55 -04:00
Zach Riggle 3745f6fd03 Round up mmap size; optionally skip loop after recv 2015-03-31 08:23:35 -04:00
Zach Riggle f643bf8722 Remove ~5 bytes from stager 2015-03-31 07:51:48 -04:00
Zach Riggle 580b16230e Add connect doctest 2015-03-31 07:51:39 -04:00
Zach Riggle ee9ffb7491 Revert "Enable is_register for all architectures"
This reverts commit 475c1d407f.
2015-03-31 06:08:52 -04:00
Zach Riggle 2aa6c1f015 Try to remove "Remote debugging from host" line 2015-03-31 06:07:02 -04:00
Zach Riggle 90b8e50d07 Fix argument order for gdb.debug to mimick gdb.attach 2015-03-31 05:23:13 -04:00
Zach Riggle 2faeefeaf0 Fix bug in gdb.debug which breaks "execute" argument 2015-03-31 05:17:19 -04:00
Zach Riggle 24e70378ca Enable using gdbserver for debug_shellcode; add run_elf helper 2015-03-30 14:39:03 -04:00
Zach Riggle b7364fe8ac Add context.native helper to determine if the target can be run without QEMU 2015-03-30 14:32:15 -04:00
Zach Riggle 475c1d407f Enable is_register for all architectures 2015-03-30 14:26:43 -04:00
Zach Riggle c9f0ec84d1 Output to ELF for shellcraft 2015-03-30 14:08:31 -04:00
Zach Riggle 8b1a3e73a1 Merge pull request #6 from cebrusfs/master
Use MOV and SYSCALL templates in acceptloop_ipv4 and mprotect_all
2015-03-29 18:13:13 -04:00
Zach Riggle c472d573f7 Update CONTRIBUTING.md 2015-03-29 17:59:56 -04:00
Zach Riggle 10ed1a2a68 Update CONTRIBUTING.md 2015-03-29 17:59:48 -04:00
Zach Riggle 8ec7faf879 Update CONTRIBUTING.md 2015-03-29 17:59:41 -04:00
Zach Riggle 6278f9a94e Linux setup should install openssh server 2015-03-26 17:23:47 -04:00
Zach Riggle 25900adf72 Fix push() templates 2015-03-26 17:22:36 -04:00
Zach Riggle 09d053be0f Update CONTRIBUTING.md 2015-03-25 15:44:10 -04:00
MengHuan Yu 9536b17e5a Fix the coding style in 2 shellcraft examples
Use 4 space indent in 'i386/linux/acceptloop_ipv4.asm' and
'i386/linux/mprotect_all.asm'

BUG=None
TEST=None
2015-03-26 01:41:50 +08:00
MengHuan Yu 2aeda2c993 Use PUSH template in acceptloop_ipv4
BUG=None
TEST=confirmed the behavior by strace.
2015-03-26 01:36:21 +08:00
MengHuan Yu 17c3a27861 Use MOV and SYSCALL templates in some shellcode
In this commit, I only fix 'i386/linux/acceptloop_ipv4.asm' and
'i386/linux/mprotect_all.asm'.

BUG=None
TEST=confirmed the behavior is still the same under
gdb and strace.
2015-03-25 23:48:20 +08:00
Zach Riggle 36f1fc32e0 Ensure textual levels e.g. "debug" are translated to logging.DEBUG 2015-03-24 14:29:03 -04:00
Zach Riggle 0a6f1e540e Update README.md 2015-03-23 02:39:22 -04:00
Zach Riggle 2caafc879f Update README.md 2015-03-23 02:39:01 -04:00
Zach Riggle f30f2093b0 Less than, not shift 2015-03-22 23:22:47 -07:00
Zach Riggle fadfa11214 *Actually* Add mapping for i686 / 32-bit Linux 2015-03-22 23:18:35 -07:00
Zach Riggle 030407d8e7 Don't close e.g. stdin if dup'ing to it 2015-03-22 23:18:12 -07:00
Zach Riggle 0c513cb06b Mark .text area as RWX so that self-modifying code can be tested 2015-03-22 22:22:36 -07:00
Zach Riggle 2e0d7b8671 Fix output redirection based on filenames 2015-03-22 17:03:02 -07:00
Zach Riggle 5004787cb9 Add mapping for i686 / 32-bit Linux 2015-03-22 14:58:58 -07:00
Zach Riggle 1a55837bff Update .travis_install.sh 2015-03-22 06:07:39 -04:00
Zach Riggle c8c9e5d1ea Update .travis_install.sh 2015-03-22 06:07:19 -04:00
Zach Riggle 989e7694d8 Fix push and pushstr for ARM 2015-03-21 17:12:45 -04:00
Zach Riggle f753382a4d Merge remote-tracking branch 'remotes/fhare/master' 2015-03-21 16:44:10 -04:00
Zach Riggle e5b3baae84 Keep link to binary in the cache 2015-03-21 16:32:32 -04:00
Zach Riggle 1e8bf3e0e9 Remove share directory 2015-03-20 17:17:46 -04:00
Zach Riggle 3fe3502b30 Superficial changes to test CI build time 2015-03-20 17:09:57 -04:00
Zach Riggle 9905ba6605 Try absolute path 2015-03-20 17:09:08 -04:00
Zach Riggle 827d4e5f09 Superficial changes to test CI build time 2015-03-20 17:06:02 -04:00
Zach Riggle f8a64a69c1 Superficial changes to test CI build time 2015-03-20 17:03:15 -04:00
Zach Riggle 50451ceda6 Attempt caching site-packages so we dont rebuild capstone 2015-03-20 17:00:34 -04:00
Zach Riggle 1aff50166a Enable caching of binutils 2015-03-20 16:55:49 -04:00
Zach Riggle a8d02b5108 Enable caching of pip dependencies 2015-03-20 16:07:40 -04:00
Zach Riggle a46e7fdc06 Use container-based Travis CI so that it builds faster 2015-03-20 16:00:25 -04:00
Zach Riggle 50ac72d8eb Use setsid instead of setpgrp to capture output to /dev/tty 2015-03-19 17:15:37 -04:00
fhare eb8a166659 Add syscall shellcode for arm. 2015-03-18 20:11:23 +01:00
fhare 16c7954e0a Add register validation and constant substitution in mov shellcode for arm. 2015-03-18 20:11:23 +01:00
Zach Riggle f0c4d5814a No isort 2015-03-18 14:33:07 -04:00
Zach Riggle d2f0cec56d Maybe now travis will be happy? 2015-03-17 23:19:16 -04:00
Zach Riggle 2b163fb7fb Sort imports 2015-03-17 19:01:34 -04:00
Zach Riggle b9c581b78c Revert i386 mov changes temporarily 2015-03-17 12:12:06 -07:00
Zach Riggle 290f17a408 Add optimization for values which are negatable 2015-03-18 14:49:49 -04:00
Zach Riggle f22537027f Fix bug in __repr__ and make mov recursive 2015-03-18 14:49:44 -04:00
Zach Riggle 9e2901e70f Merge remote-tracking branch 'gallopsled/master'
Conflicts:
	README.md
	pwn/toplevel.py
	pwnlib/__init__.py
	pwnlib/commandline/shellcraft.py
	pwnlib/shellcraft/__init__.py
	pwnlib/tubes/ssh.py
	pwnlib/util/iters.py
2015-03-16 21:38:57 -07:00
Zach Riggle d38deb5ae7 Fix imports 2015-03-16 20:13:07 -07:00
Zach Riggle 8e14c3d488 Add context.binary helper 2015-03-16 20:09:49 -07:00
Zach Riggle 19fb739d24 Fix architectures, add more architectures, add better detection for GOT and PLT 2015-03-16 19:09:07 -07:00
Zach Riggle 7a1d62f2fb Fix bug in pause() 2015-03-16 15:19:58 -07:00
Zach Riggle 6d806cede3 Add tube.flat 2015-03-16 15:19:45 -07:00
Zach Riggle 1fc1406895 Fix leak.raw 2015-03-15 05:32:15 -07:00
Zach Riggle 008b013542 Add packing shortcuts 2015-03-14 19:35:49 -07:00
Zach Riggle e485e5bc93 Add missing architecture constants 2015-03-13 10:44:55 -07:00
Zach Riggle 4fa6cc0649 Remove link info, put arch on one line 2015-03-12 00:52:06 -07:00
Zach Riggle c825e43ff2 Add linked/static, remove RUNPATH and RPATH if they're OK since it has never been useful 2015-03-12 00:49:44 -07:00
Zach Riggle 506815533a Streamline checksec 2015-03-12 00:24:28 -07:00
Zach Riggle b9951de394 Add documentation to ELF fields 2015-03-12 00:23:14 -07:00
Zach Riggle ca8f0b2f80 Add more info to checksec, and add bits as a property 2015-03-12 00:22:07 -07:00
Zach Riggle a39b9ef25b Add endianness info to checksec script 2015-03-12 00:17:22 -07:00
Zach Riggle 3cfbf0793d Add endianess to ELF 2015-03-12 00:16:41 -07:00
Zach Riggle fced987465 Add checksec command-line script 2015-03-12 00:12:42 -07:00
Zach Riggle 2530b1c586 Make isort happy 2015-03-12 00:02:17 -07:00
Zach Riggle 477d0f54bf Fix arguments 2015-03-12 00:02:17 -07:00
Zach Riggle acc4f64a4b Add asm debugging 2015-03-12 00:02:17 -07:00
Zach Riggle f7c3dae4e1 Add shellcraft debugging 2015-03-12 00:02:17 -07:00
Zach Riggle 38e4ada7ce Rework a bunch of the shellcode for readability. 2015-03-12 00:02:12 -07:00
Zach Riggle 8afb2b6d89 .sendline() should be call-able by itself 2015-03-11 20:30:18 -07:00
Zach Riggle 81c9565e4c Don't wait forever for the PID to show up, handle if there's an issue 2015-03-11 20:29:18 -07:00
Zach Riggle 15f1aeaafe Logging hack for tube sub-classes defined outside of pwnlib 2015-03-09 23:40:35 -07:00
Zach Riggle 820936ccbd Update README.md 2015-02-26 19:08:07 -05:00
Zach Riggle 6499a63bfb Add logo with text 2015-02-26 05:01:58 -05:00
Zach Riggle c2c3aec1c8 Update LICENSE-binjitsu.txt 2015-02-26 04:46:01 -05:00
Zach Riggle 70c34aab2a Update LICENSE-binjitsu.txt 2015-02-26 04:44:51 -05:00
Zach Riggle 3be0ee96a7 Add logo CC BY 2015-02-26 04:43:54 -05:00
Zach Riggle 1e062ac52b Merge branch 'pwntools' 2015-02-25 14:47:18 -05:00
Zach Riggle fb6b046d8d Merge commit '850efb5' 2015-02-25 14:42:32 -05:00
Jonas Rudloff 0874e1908f fixed nbuckets -> nbucket in dynelf.py for sysv hash lookups
(cherry picked from commit c50d32d700)
2015-02-25 12:05:45 -05:00
Jonas Rudloff cbe13129db fixes bug in memleak.py
(cherry picked from commit 4a7d4fcff7)
2015-02-25 12:05:39 -05:00
Kenny 980d391b1f Fix #469 - verify search_results has items before using
(cherry picked from commit 8bd50f958c)
2015-02-25 12:05:35 -05:00
Zach Riggle 9d1756e99b More useful message on Administratively Prohibited 2015-02-24 16:34:06 -05:00
Zach Riggle cb163e7662 Add install message [skipci] 2015-02-21 12:27:22 -08:00
Zach Riggle fdae85c991 Check for Python development headers 2015-02-21 12:25:46 -08:00
Zach Riggle f171539d83 Include error number 2015-02-21 11:42:47 -08:00
Zach Riggle 44f881b742 Handle when there's no known_hosts or config for SSH 2015-02-21 11:28:18 -08:00
Zach Riggle cc6ca79a45 Add tox 2015-02-21 11:24:31 -08:00
Zach Riggle 9332812af1 tox.ini 2015-02-21 10:27:15 -08:00
Zach Riggle 3f23a8a63a Add missing linker flag 2015-02-21 10:12:27 -08:00
Zach Riggle 35ef86b189 Update ssh.process to use sh_string instead of creating a temporary file 2015-02-21 08:36:46 -08:00
Zach Riggle 5962bca201 Require tox 2015-02-21 08:13:53 -08:00
Zach Riggle 0c8935fc8c make clean should rmeove all temporary files 2015-02-20 16:32:01 -08:00
Zach Riggle 5e1447f8b4 When an exception is thrown on teardown, _run_handlers doesn't exist anymore 2015-02-20 16:27:35 -08:00
Zach Riggle 9ec1ea0852 Add useragents to packaged files; require recent pip 2015-02-20 16:26:40 -08:00
Zach Riggle b54d2dfa47 Pretty please? 2015-02-20 13:50:51 -08:00
Zach Riggle 547e8df98a Fix doctests 2015-02-20 13:39:12 -08:00
Zach Riggle ef74b64e86 Update test suite instructions 2015-02-20 13:30:51 -08:00
Zach Riggle 886e49bd1c Fix architectures between GDB and QEMU; auto-set endianness 2015-02-20 10:06:33 -08:00
Zach Riggle 42486c7a76 Add missing newlines to script 2015-02-19 17:51:32 -08:00
Zach Riggle 57eaede85b Add format argument 2015-02-19 17:50:52 -08:00
Zach Riggle 0ad8649599 Make default arguments a bit more explicit 2015-02-13 11:01:57 -08:00
Zach Riggle 8c183ac0e3 Fix regression which would cause ././binary to be invoked 2015-02-13 11:00:17 -08:00
Zach Riggle c0002895c8 Add an example for dup2ing 0 to 2 because subprocess tries to protect you from this 2015-02-13 10:57:55 -08:00
Zach Riggle a92260d9e5 Add preexec_fn 2015-02-13 10:46:40 -08:00
Zach Riggle b7743546b6 Fix log statements 2015-02-12 21:26:50 -08:00
Zach Riggle 75d260cd77 Add better documentation 2015-02-12 19:40:18 -08:00
Zach Riggle fc4abbf395 Add documentation for process and add shell=True doctest 2015-02-12 19:29:16 -08:00
Zach Riggle a5c8aa31a5 Default arg update 2015-02-12 19:13:16 -08:00
Zach Riggle 9e90e0485c Add file descriptors and documentation to ssh.process 2015-02-12 19:09:28 -08:00
Zach Riggle 1a1afabb23 Better fix for interactive() on raw TTYs 2015-02-12 10:24:35 -08:00
Zach Riggle 37ea0e8882 Remove extra print [skip ci] 2015-02-12 10:24:35 -08:00
Zach Riggle f3237586a5 Add warning message for no gdb-multiarch 2015-02-12 11:18:46 -05:00
Zach Riggle 324ef12b29 Revert PPA link; 2015-02-12 10:50:51 -05:00
Zach Riggle 3b659cc8ec Version fail 2015-02-12 10:48:22 -05:00
Zach Riggle 99aa19f332 Slightly better error message 2015-02-12 10:47:46 -05:00
Zach Riggle c623661f06 --upgrade 2015-02-12 10:47:00 -05:00
Zach Riggle 1d165fbde4 Evidently old versions of Git dont like Cloudflare 2015-02-12 10:37:41 -05:00
Zach Riggle a7816bde40 Change URLs to binjit.su, version to "master" 2015-02-12 10:06:55 -05:00
Zach Riggle de8de2d187 Add unit test for make_elf 2015-02-12 04:39:51 -08:00
Zach Riggle 3df64b6c80 Fix parsing ~/.ssh/config. Removes need for ssh_agent for tests. 2015-02-12 04:36:07 -08:00
Zach Riggle 84fc6a37e3 Use .string since it's easier to compare to Python 2015-02-12 03:52:51 -08:00
Zach Riggle a2fb187c2a Import everything from asm in __all__ 2015-02-12 03:25:15 -08:00
Zach Riggle 8a915a59e7 Fix gdb.attach(arch=...) and add gdb.debug_shellcode 2015-02-12 03:19:51 -08:00
Zach Riggle ea88f746a1 Fix pidof for sockets 2015-02-12 03:17:22 -08:00
Zach Riggle 33c47c159c Enable xor on integers, use default packing 2015-02-12 03:16:56 -08:00
Zach Riggle 0d544d96c8 Add message to ssh setup. Required because ssh-agent env vars must persist in parent shell. 2015-02-12 02:44:43 -08:00
Zach Riggle b9ac583e8a Fix CRLF in ssh.ssh_channel.interactive() when tty=True 2015-02-12 02:38:22 -08:00
Zach Riggle 7e46c36965 Only show build state for Master branch 2015-02-09 05:07:45 -05:00
Zach Riggle 0c9d345c37 Don't change anything at all if shell=True 2015-02-06 05:32:36 -08:00
Zach Riggle b28299a96e Style 2015-02-06 05:32:19 -08:00
Zach Riggle f6dab8cb94 Documentation on pty and tty.setraw 2015-02-06 05:30:33 -08:00
Zach Riggle ab3e58be59 Style, typos 2015-02-06 05:27:17 -08:00
Zach Riggle 068a5915b8 Clean up process tube and add member documentation 2015-02-06 05:02:48 -08:00
Zach Riggle 48ccd3dbe6 Make set_working_directory a bit faster 2015-02-05 20:24:09 -08:00
Zach Riggle 4f1bae8748 Less verbose 2015-02-05 20:18:24 -08:00
Zach Riggle 5ed9d4e2a9 Make the interfaces to process() and ssh.process() a bit more robust and fault-tolerant 2015-02-05 19:53:15 -08:00
Zach Riggle 87d12970f6 Update docs about Capstone.
It builds itself for 3.0.1+ and no longer has dependencies outside of the pip-intallable stuff
2015-02-05 09:07:07 -08:00
Zach Riggle 131e669246 Remove outdated script 2015-02-05 08:53:18 -08:00
Zach Riggle 41f003464b Merge pull request #1 from binjitsu/web-doctests
Make doctests cleaner
2015-02-05 11:52:28 -05:00
Zach Riggle b436d4a99a isort requirement 2015-02-05 04:49:50 -08:00
Zach Riggle b689dc6141 Add MIT license badge [noci] 2015-02-05 04:48:28 -08:00
Zach Riggle 9047360dd6 Add align_up alias 2015-02-05 04:48:28 -08:00
Zach Riggle 339c71abbd sorted imports with isort 2015-02-05 04:48:25 -08:00
Zach Riggle c1308f454f Enhancements to packing to allow auto-detection of sign, as well as unpack bytearray objects
(cherry picked from commit 6a3e2591c29d5a176136b1e1e16b63de5b64160c)

Conflicts:
	pwnlib/util/packing.py
2015-02-05 02:47:57 -08:00
Zach Riggle 2ec8647d10 Wait for close on unit test 2015-02-05 01:56:03 -08:00
Zach Riggle 96f07f950c Actually save the keys 2015-02-05 01:29:57 -08:00
Zach Riggle acaaf2bf98 Enforce SSH keys for IP 2015-02-05 01:15:22 -08:00
Zach Riggle 5e4fa7c03d Enhance test for process tube 2015-02-05 00:15:25 -08:00
Zach Riggle 1a69412209 Handle IOError, and ensure Ctrl+C sent to parent process does not propagate to child
(cherry picked from commit 99cae63745)

Conflicts:
	pwnlib/tubes/process.py
2015-02-05 00:10:54 -08:00
Zach Riggle d194dfd8ce Set stdout to be a PTY on spawned processes so that stdout is not buffered.
(cherry picked from commit 1273bfa1fb)

Conflicts:
	pwnlib/tubes/process.py
2015-02-04 23:58:28 -08:00
Zach Riggle 2c5ea17ddb Merge remote-tracking branch 'origin/capstone3'
Conflicts:
	docs/source/install.rst
2015-02-04 23:52:51 -08:00
Zach Riggle 9d25c526e9 Add --address to disasm 2015-02-02 21:46:25 -08:00
Zach Riggle 34c4843bbf Make gadget loading faster by saving the original addresses and fixing up at runtime 2015-02-02 21:46:11 -08:00
Zach Riggle 4616f9f107 Fix indentation of docstrings 2015-02-02 04:22:55 -08:00
Zach Riggle 12fe3d310a Fix download_file regression and fix spinners 2015-02-02 04:22:37 -08:00
Zach Riggle 24661aa6e7 Fix isEnabledFor 2015-02-02 03:22:32 -08:00
Zach Riggle 1b5c6162d1 Merge branch 'ssh-upgrades' 2015-02-02 03:01:02 -08:00
Zach Riggle e17e9c8b43 Fix issue where "tar -C /tmp" will fail if /tmp is not +r (enumeratable) 2015-02-02 02:56:37 -08:00
Zach Riggle a9e535eef6 Revamp download_dir (did it ever work?) and add "download" alias 2015-02-02 02:56:37 -08:00
Zach Riggle dfe78552c3 Add upload and put aliases/helpers 2015-02-02 02:56:37 -08:00
Zach Riggle 16dadb3376 Rewrite the upload functionality 2015-02-02 02:56:33 -08:00
Zach Riggle 054b7a5b17 Allow ~/foo in ssh.upload_dir 2015-02-02 00:47:41 -08:00
Zach Riggle 3eccae29d8 Only print checksec info once per ELF 2015-02-01 21:10:45 -08:00
Zach Riggle 37e29db87a Clean up SSH cache to only use SHA256. Additionally ssh.libs() now returns the original binary as well. Currently, the address is set to zero. 2015-02-01 21:09:21 -08:00
Zach Riggle dc84e7150a More reverting 2015-02-01 00:21:13 -08:00
Zach Riggle f6e90df62a Revert "Rename "pwn" to "binjitsu""
This reverts commit 8bbaa14afe.
2015-01-31 23:58:16 -08:00
Zach Riggle a96ffc80a2 Fix mis-reporting of NX when there is no GNU_STACK segment 2015-01-31 23:31:49 -08:00
Zach Riggle dae43bb581 Make doctests not spew stuff 2015-01-31 22:47:23 -08:00
Zach Riggle b399f2a439 Merge branch 'threading-event-wait' 2015-01-31 22:45:26 -08:00
Zach Riggle 6730a63432 Add --upgrade 2015-01-31 20:49:43 -08:00
Zach Riggle 8bbaa14afe Rename "pwn" to "binjitsu" 2015-01-31 20:37:58 -08:00
Zach Riggle 7bc5a9cc31 args => argv 2015-01-29 21:15:24 -08:00
Zach Riggle 1844b85ae6 Enable debugging ssh channels. Enrich information with pid and args. Add documentation 2015-01-29 19:51:32 -08:00
Zach Riggle ff19108e02 Revert default log level back to 1; handle isEnabledFor in accordance with context 2015-01-29 19:51:32 -08:00
Zach Riggle 5e58b94d7a Update install docs 2015-01-29 19:51:32 -08:00
Zach Riggle 9a5bccd837 Remove versioned stuff 2015-01-29 19:42:35 -05:00
Zach Riggle 7865ec93b0 Wake up Travis 2015-01-29 19:42:01 -05:00
Zach Riggle de68ff6734 Update installation instructions 2015-01-29 18:43:36 -05:00
Zach Riggle d26a5a7012 Fix quoting style from repr 2015-01-29 18:41:15 -05:00
Zach Riggle 5f167c657f Fix indentation 2015-01-29 05:08:31 -08:00
Zach Riggle 67faf896f1 Make unhex() a bit more forgiving 2015-01-29 05:06:29 -08:00
Zach Riggle 073a179d29 Don't log twice for clean_and_log. 2015-01-28 22:52:12 -08:00
Zach Riggle 65847258fd Always print security info 2015-01-28 20:54:08 -08:00
Zach Riggle b6a98274c0 Update docs 2015-01-28 20:54:00 -08:00
Zach Riggle da9ee7bd9d Fix hostname 2015-01-28 19:33:14 -08:00
Zach Riggle 47160d7398 Expressly disable tty for upload_data 2015-01-28 17:39:01 -08:00
Zach Riggle 5974be5c01 Fix SSH doctests 2015-01-28 17:38:59 -08:00
Zach Riggle edf68d3ffb Dont spawn a tty for this "sh" example 2015-01-28 16:33:36 -08:00
Zach Riggle dddc0ee163 Restore pep237 2015-01-28 16:32:10 -08:00
Zach Riggle 27e96868b8 Unbreak the build while sphinx fixes their issues.
https://bitbucket.org/birkenfeld/sphinx-contrib/issue/93/
2015-01-28 16:26:19 -08:00
Zach Riggle efce85666d Print the actual command used if debugging 2015-01-28 16:26:15 -08:00
Zach Riggle cdbba52548 Disable echoing of control characters 2015-01-27 22:58:17 -08:00
Zach Riggle 2cc92df291 Use tty by default, and run "stty raw" by default except for when doing a shell (process==None).
Add a doctest for sftp vs non-sftp uploads.
Remove extra output from script generated by ssh.process if not run directly.
2015-01-27 22:46:16 -08:00
Zach Riggle f3a0a4f781 Change magic log number to -1 2015-01-27 22:44:53 -08:00
Zach Riggle b5d33ff064 Don't eat Ctrl+C with all the exceptions 2015-01-27 15:00:30 -08:00
Zach Riggle 7e829db170 Fix path names for sftpclient and make script executable 2015-01-27 14:58:54 -08:00
Zach Riggle 504c502c22 Merge branch 'sftpclient' 2015-01-27 12:17:27 -08:00
Zach Riggle 3324062013 Update ssh object to use sftp first; expose _wd as cwd; optional caching 2015-01-27 12:17:11 -08:00
Zach Riggle 3a767b45dd Unfuck progress 2015-01-26 23:19:55 -08:00
Zach Riggle ebb349c700 Merge branch 'commandline-context-pwntools'
Conflicts:
	pwnlib/commandline/disasm.py
	pwnlib/commandline/shellcraft.py
2015-01-26 22:54:00 -08:00
Zach Riggle 9991348963 Use "from pwn import *" in command-line utilities, and shovel all the context information through a single handler 2015-01-26 22:53:10 -08:00
Zach Riggle b010daa438 Set permissions on temporary working directory 2015-01-26 22:24:14 -08:00
Zach Riggle 73a494cfd0 Clean up import name duplication, add pwnlib.version 2015-01-25 22:02:33 -08:00
Zach Riggle 3c2074cdeb Rename ssh.run to ssh.system 2015-01-25 21:53:27 -08:00
Zach Riggle 16f7021065 Merge branch 'ssh-process-execve-binjitsu' 2015-01-25 21:51:26 -08:00
Zach Riggle bd137c7a4c Add a more robust interface to SSH commands which doesn't require hacky shell escaping if Python is available on the remote host. This interface follows the same style as pwnlib.tubes.process.process 2015-01-25 21:51:08 -08:00
Zach Riggle 4137fac99b Merge branch 'commandline-context-pwntools'
Conflicts:
	pwnlib/commandline/shellcraft.py
2015-01-25 21:40:09 -08:00
Zach Riggle 57de045db5 Use "from pwn import *" in command-line utilities, and shovel all the context information through a single handler 2015-01-25 21:38:23 -08:00
Zach Riggle 5046f18b90 Merge branch 'shellcraft-speedup' 2015-01-25 21:29:05 -08:00
Zach Riggle dcd3df3f10 Sort templates 2015-01-25 21:24:49 -08:00
Zach Riggle ceec814588 Speed up shellcraft loading and clean up code a bit 2015-01-25 21:21:16 -08:00
Zach Riggle a4860f3167 Watch all branches 2015-01-25 18:15:37 -08:00
Zach Riggle c762eec46c Make doctests cleaner 2015-01-25 18:14:44 -08:00
Zach Riggle 380eda7234 Update log statement 2015-01-25 18:08:22 -08:00
Zach Riggle f02cc65624 Merge branch 'elf-data-property' 2015-01-24 17:20:21 -08:00
Zach Riggle 32ecc909a3 Add .data property 2015-01-24 17:19:56 -08:00
Zach Riggle ec64ebe3c7 Merge branch 'ssh-revamp-localhost-only' 2015-01-24 01:21:04 -08:00
Zach Riggle fb7d604927 Update self.host to the resolved host 2015-01-24 01:20:05 -08:00
Zach Riggle 93a95d16f1 Restrict demouser for Travis to localhost only. Change host name from localhost to example.pwnme. Add support for getting the hostname and identityfile from ssh_config.
Conflicts:
	pwnlib/tubes/ssh.py
2015-01-24 01:19:55 -08:00
Zach Riggle 9de8211e58 Fix logging in tests 2015-01-23 23:35:45 -08:00
Zach Riggle 33d7e4ea30 mips -> tradmips 2015-01-22 04:48:30 -08:00
Zach Riggle 99acaf7471 Make nosetests work 2015-01-15 02:54:57 -05:00
Zach Riggle e48c08baa4 Change default fd back to stdout 2015-01-15 02:23:56 -05:00
Zach Riggle b4e89ab373 Fix dependency for travis 2015-01-15 02:20:22 -05:00
Zach Riggle 806f2a3e7d Merge remote-tracking branch 'upstream/fix-stager' 2015-01-15 02:13:49 -05:00
Zach Riggle c709e7e753 Merge branch 'StevenVanAcker/patch-1' 2015-01-15 02:13:31 -05:00
Zach Riggle 88a83cad71 The great rebranding 2015-01-15 02:03:57 -05:00
Zach Riggle b41a4057c3 Merge branch 'tubes-are-loggers' 2015-01-12 16:23:23 -05:00
Zach Riggle 49244fe1dc Merge branch 'log-level-one' 2015-01-12 16:23:03 -05:00
Zach Riggle 1c06dca971 Merge branch 'connect-gethostbyname' 2015-01-12 16:22:11 -05:00
Zach Riggle 85379b292d Merge branch 'context-logfile' 2015-01-12 16:22:07 -05:00
Zach Riggle 88195d8c56 Merge branch 'issue-338' 2015-01-12 16:22:03 -05:00
Zach Riggle 1c52cd0390 Implement "wrap" word_size 2015-01-12 12:50:04 -05:00
Zach Riggle bc270113b6 Enable use of hostnames for connect shellcode. 2015-01-12 12:26:12 -05:00
Zach Riggle 139937114b Stupid doctests 2015-01-12 12:17:19 -05:00
Zach Riggle 2f22025cea Set level to 1 instead 2015-01-12 12:17:19 -05:00
Zach Riggle 8f13445b73 Fix doctest formatting 2015-01-12 12:17:03 -05:00
Zach Riggle f297cf60ba Defer adding a handler and setting the root logger level 2015-01-12 12:17:03 -05:00
Zach Riggle 19866979bc Get rid of reliance on /dev/null; flush logfile when changing log files 2015-01-12 12:16:19 -05:00
Zach Riggle 372490b4e9 Add doctest 2015-01-12 12:16:19 -05:00
Zach Riggle 9f244268ca Re-add handler, should work after #419 is resolved. 2015-01-12 12:16:19 -05:00
Zach Riggle d3929505c4 Remove handler to check Travis result 2015-01-12 12:16:19 -05:00
Zach Riggle a4f21971d1 Skip emitting and formatting records sent to the LogFile if it's /dev/null, which is also the default value 2015-01-12 12:16:19 -05:00
Zach Riggle 4d31a89a67 Enable per-thread logfiles via context, and retargetting the logfile at runtime 2015-01-12 12:16:19 -05:00
Zach Riggle ca47f5ce27 Tubes are Loggers 2015-01-12 12:15:53 -05:00
Zach Riggle 7e02110bc5 Invert the lookup on logging verbosity, using 1 as a sentinel value for "not set" 2015-01-12 12:15:53 -05:00
Zach Riggle 69073530fd Invert the lookup on logging verbosity, using 1 as a sentinel value for "not set" 2015-01-12 12:15:20 -05:00
Zach Riggle 8943102479 Set logLevel to 1 2015-01-12 12:14:48 -05:00
Zach Riggle 37a46e052a Enable direct calls to pack() without endianness specified to pack negative numbers as positive numbers. Fixes #338. 2015-01-12 02:09:39 -05:00
941 changed files with 78010 additions and 7547 deletions

No files matched your search

+8
View File
@@ -0,0 +1,8 @@
[run]
branch = True
omit =
*/constants/*
source =
pwn
pwnlib
~/.pwntools-cache/
+14
View File
@@ -0,0 +1,14 @@
# Pwntools Issue Template
Thanks for contributing to Pwntools!
When reporting an issue, be sure that you are running the latest released version of pwntools (`pip install --upgrade pwntools`).
Please verify that your issue occurs on 64-bit Ubuntu 14.04. You can use the Dockerfile on `docker.io` for quick testing.
```
$ docker pull pwntools/pwntools:stable
$ docker run -it pwntools/pwntools:stable
```
If possible, provide a proof-of-concept which demonstrates the problem. Include any binaries or scripts necessary to reproduce the issue, and please include the full debug output via setting the environment variable `PWNLIB_DEBUG=1`.
+27
View File
@@ -0,0 +1,27 @@
# Pwntools Pull Request
Thanks for contributing to Pwntools! Take a moment to look at [`CONTRIBUTING.md`][contributing] to make sure you're familiar with Pwntools development.
Please provide a high-level explanation of what this pull request is for.
## Testing
Pull Requests that introduce new code should try to add doctests for that code. See [`TESTING.md`][testing] for more information.
## Target Branch
Depending on what the PR is for, it needs to target a different branch.
You can always [change the branch][change] after you create the PR if it's against the wrong branch.
| Branch | Type of PR |
| -------- | ---------------------------------------------------------------- |
| `dev` | New features, and enhancements
| `dev` | Documentation fixes and new tests
| `stable` | Bug fixes that affect the current `stable` branch
| `beta` | Bug fixes that affect the current `beta` branch, but not `stable`
| `dev` | Bug fixes for code that has never been released
[contributing]: https://github.com/Gallopsled/pwntools/blob/dev/CONTRIBUTING.md
[testing]: https://github.com/Gallopsled/pwntools/blob/dev/TESTING.md
[change]: https://github.com/blog/2224-change-the-base-branch-of-a-pull-request
+5 -1
View File
@@ -3,6 +3,7 @@
*.pyc
*~
*.swp
.ropeproject
*.pdf
*/auto/*
*/bin/*
@@ -10,4 +11,7 @@ docs/build
build
MANIFEST
dist
pwntools.egg-info
*.egg-info
*.core
.coverage
.tox
+7
View File
@@ -0,0 +1,7 @@
{
"default_encoding": "UTF-8",
"ensure_newline_at_eof_on_save": true,
"tab_size": 4,
"translate_tabs_to_spaces": true,
"trim_trailing_white_space_on_save": true
}
+33 -13
View File
@@ -1,23 +1,43 @@
sudo: false
dist: precise
language: python
addons:
apt:
packages:
- gcc-multilib
- lib32stdc++6
- ash
- bash
- dash
- ksh
- mksh
- zsh
- pandoc
- gdb
cache:
- pip
- directories:
- usr
- /home/travis/virtualenv/python2.7.9/lib/python2.7/site-packages/
- /home/travis/virtualenv/python2.7.9/bin/
- /home/travis/virtualenv/python2.7.13/lib/python2.7/site-packages/
- /home/travis/virtualenv/python2.7.13/bin/
python:
- "2.7"
before_install:
- source .travis_ssh_setup.sh
- source .travis_install.sh
- echo $-
- source travis/install.sh
- source travis/ssh_setup.sh
- echo $-
install:
- pip install -e .
- pip install -r docs/requirements.txt
- pip install --upgrade pip
- pip install --upgrade appdirs # https://github.com/ActiveState/appdirs/issues/89#issuecomment-282326570
- pip install --upgrade --editable .
- pip install --upgrade --requirement docs/requirements.txt
before_script:
- python -c 'from pwn import *; print pwnlib.term.term_mode' NOTERM
- python -c 'from pwn import *; print pwnlib.term.term_mode' NOTERM
- python -c 'from pwn import *; print pwnlib.term.term_mode' NOTERM
- python -c 'from pwn import *; print pwnlib.term.term_mode' NOTERM
script: PWNLIB_NOTERM=1 make -C docs doctest
- PWNLIB_NOTERM=1 python -c 'from pwn import *; print pwnlib.term.term_mode'
- PWNLIB_NOTERM=1 python -c 'from pwn import *; print pwnlib.term.term_mode'
- PWNLIB_NOTERM=1 python -c 'from pwn import *; print pwnlib.term.term_mode'
- PWNLIB_NOTERM=1 python -c 'from pwn import *; print pwnlib.term.term_mode'
script:
- PWNLIB_NOTERM=1 coverage run -m sphinx -b doctest docs/source docs/build/doctest
after_success:
- coveralls
- source travis/update_demo.sh
-62
View File
@@ -1,62 +0,0 @@
#!/usr/bin/env bash
local_deb_extract()
{
wget $1
ar vx *.deb
tar xvf data.tar.gz
rm -f *.tar.gz *deb*
}
get_binutils()
{
BINUTILS_PREFIX='https://launchpad.net/~pwntools/+archive/ubuntu/binutils/+files/binutils-'
BINUTILS_SUFFIX='-linux-gnu_2.22-6ubuntu1.1cross0.11pwntools12~precise_amd64.deb'
local_deb_extract "${BINUTILS_PREFIX}${1}${BINUTILS_SUFFIX}"
}
setup_travis()
{
export PATH=$PWD/usr/bin:$PATH
export LD_LIBRARY_PATH=$PWD/usr/lib
if [ ! -d usr/bin ];
then
which arm-linux-as || get_binutils arm
which mips-linux-as || get_binutils mips
which powerpc-linux-as || get_binutils powerpc
local_deb_extract http://mirrors.mit.edu/ubuntu/ubuntu/pool/universe/b/binutils/binutils-multiarch_2.22-6ubuntu1_amd64.deb
rm -rf usr/share
fi
pushd usr/lib
ln -sf libbfd-2.22-multiarch.so libbfd-2.22.so
ln -sf libopcodes-2.22-multiarch.so libopcodes-2.22.so
popd
which arm-linux-gnu-as
which mips-linux-gnu-as
which powerpc-linux-gnu-as
}
setup_linux()
{
sudo apt-get install software-properties-common pwgen
sudo apt-add-repository --yes ppa:pwntools/binutils
sudo apt-get update
sudo apt-get install binutils-arm-linux-gnu binutils-mips-linux-gnu binutils-powerpc-linux-gnu
}
setup_osx()
{
brew update
brew install binutils
brew install capstone
}
if [[ "$TRAVIS" ]]; then
setup_travis
elif [[ "$(uname)" == "Darwin" ]]; then
setup_osx
elif [[ "$(uname)" == "Linux" ]]; then
setup_linux
fi
+510
View File
@@ -3,6 +3,516 @@
This changelog only includes added major features and changes. Bugfixes and
minor changes are omitted.
## Release History
The table below shows which release corresponds to each branch, and what date the version was released.
| Version | Branch | Release Date |
| ---------------- | -------- | ---------------------- |
| [3.11.0](#3110) | `dev` | Dec 2, 2017 (planned)
| [3.10.0](#3100) | `beta` | Oct 21, 2017 (planned)
| [3.9.1](#391) | `stable` | Sep 28, 2017
| [3.9.0](#390) | | Sep 11, 2017
| [3.8.0](#380) | | Jul 29, 2017
| [3.7.1](#371) | | Jul 14, 2017
| [3.7.0](#370) | | Jun 19, 2017
| [3.6.1](#361) | | May 12, 2017
| [3.6.0](#360) | | May 8, 2017
| [3.5.1](#351) | | Apr 15, 2017
| [3.5.0](#350) | | Mar 26, 2017
| [3.4.1](#341) | | Feb 17, 2017
| [3.4.0](#340) | | Feb 13, 2017
| [3.3.4](#334) | | Jan 12, 2016
| [3.3.3](#333) | | Jan 10, 2016
| [3.3.2](#332) | | Jan 10, 2016
| [3.3.1](#331) | | Jan 10, 2016
| [3.3.0](#330) | | Dec 24, 2016
| [3.2.1](#321) | | Dec 24, 2016
| [3.2.0](#320) | | Nov 12, 2016
| [3.1.1](#311) | | Oct 23, 2016
| [3.1.0](#310) | | Oct 2, 2016
| [3.0.4](#304) | | Sept 19, 2016
| [3.0.3](#303) | | Sept 18, 2016
| [3.0.2](#302) | | Sept 6, 2016
| [3.0.1](#301) | | Aug 20, 2016
| [3.0.0](#300) | | Aug 20, 2016
| [2.2.0](#220) | | Jan 5, 2015
## 3.11.0
To be released on Dec 2, 2017.
## 3.10.0
To be released on Oct 21, 2017.
## 3.9.1
- [#1038][1038] Fix an issue with `process()` where glibc would buffer data internally, causing a hang on `select()`
- [#1036][1036] Fix Travis CI logging verbosity
- [#1029][1029] Fix some `unicode` issues when using the `readline` command history in `tube.interactive()`
[1038]: https://github.com/Gallopsled/pwntools/pull/1038
[1036]: https://github.com/Gallopsled/pwntools/pull/1036
[1029]: https://github.com/Gallopsled/pwntools/pull/1029
## 3.9.0
- [#1003][1003] Make `concat_all` faster while also simplifying it's logic
- [#1014][1014] Fix for overwritten env when parsing core file
- [#1023][1023] Fixes to Travis CI
[1003]: https://github.com/Gallopsled/pwntools/pull/1003
[1014]: https://github.com/Gallopsled/pwntools/pull/1014
[1023]: https://github.com/Gallopsled/pwntools/pull/1023
## 3.8.0
- [#981][981] Fixed RELRO detection logic
- [#986][986] Enhancements to DynELF for controlling usage of LibcDB
- A few documentation fixes
- A few fixes for the Docker image
[981]: https://github.com/Gallopsled/pwntools/pull/981
[986]: https://github.com/Gallopsled/pwntools/pull/986
## 3.7.1
- [#998][998] Fix a bug where integer values could not be set in `.pwn.conf`.
[998]: https://github.com/Gallopsled/pwntools/pull/998
## 3.7.0
- [#933][933] DynELF works better with different base addresses
- [#952][952] A few small fixes were made to `pwn template`, and the CRC database was updated.
- [5c72d62c][5c72d62c] Updated the CRC database
[933]: https://github.com/Gallopsled/pwntools/pull/933
[952]: https://github.com/Gallopsled/pwntools/pull/952
[5c72d62c]: https://github.com/Gallopsled/pwntools/commit/5c72d62c
## 3.6.1
- [#979][979]+[1a4a1e1][1a4a1e1] Fixed [#974][974], a bug related to the terminal handling and numlock.
- [#980][980] Fixed the `pwn template` command.
[974]: https://github.com/Gallopsled/pwntools/issues/974
[979]: https://github.com/Gallopsled/pwntools/pull/979
[980]: https://github.com/Gallopsled/pwntools/pull/980
[1a4a1e1]: https://github.com/Gallopsled/pwntools/commit/1a4a1e1
## 3.6.0
- [#895][895] Added a Dockerfile to simplify testing setup and allow testing on OSX
- [#897][897] Fixed some incorrect AArch64 syscals
- [#893][893] Added the `pwnlib.config` module
+ Configuration options can now be set in `~/.pwn.conf`
+ This replaces the old, **undocumented** mechanism for changing logging colors. Only @br0ns and @ebeip90 were likely using this.
+ More information is available in the documentation [here](http://docs.pwntools.com/en/dev/config.html).
- [#899][899] Pwntools now uses Unicorn Engine to emulate PLT instructions to ensure correct mapping of PIE / RELRO binaries.
- [#904][904] Enhancements to the accuracy of the `pwn checksec` command.
- [#905][905] Added a `pwn debug` command-line utility which automates the process of `gdb.attach(process(...))` to spawn GDB
+ More information is available in the documentation [here](http://docs.pwntools.com/en/dev/commandline.html#pwn-debug)
- [#919][919] Added a `pwn template` command-line utility to simplify the process of bootstrapping a new exploit.
+ More information is available in the documentation [here](http://docs.pwntools.com/en/dev/commandline.html#pwn-template).
- [#948][948] Fix unnecessary warning for Core files
- [#954][954] Fix list processing in `~/.pwn.conf`
- [#967][967] Respect `TERM_PROGRAM` for `run_in_new_terminal`
- [#970][970] Fix overly-aggressive corefile caching
[947]: https://github.com/Gallopsled/pwntools/pull/947
[948]: https://github.com/Gallopsled/pwntools/pull/948
[954]: https://github.com/Gallopsled/pwntools/pull/954
[960]: https://github.com/Gallopsled/pwntools/pull/960
[967]: https://github.com/Gallopsled/pwntools/pull/967
[968]: https://github.com/Gallopsled/pwntools/pull/968
[970]: https://github.com/Gallopsled/pwntools/pull/970
[895]: https://github.com/Gallopsled/pwntools/pull/895
[897]: https://github.com/Gallopsled/pwntools/pull/897
[893]: https://github.com/Gallopsled/pwntools/pull/893
[899]: https://github.com/Gallopsled/pwntools/pull/899
[904]: https://github.com/Gallopsled/pwntools/pull/904
[905]: https://github.com/Gallopsled/pwntools/pull/905
[919]: https://github.com/Gallopsled/pwntools/pull/919
## 3.5.1
- [#945][945] Speed up ssh via caching checksec results (fixes [#944][944])
- [#950][950] Fixes a bug where setting `context.arch` does not have an effect on `adb.compile()` output architecture
[944]: https://github.com/Gallopsled/pwntools/issues/944
[945]: https://github.com/Gallopsled/pwntools/pull/945
[950]: https://github.com/Gallopsled/pwntools/pull/950
## 3.5.0
- [b584ca3][b584ca3] Fixed an issue running `setup.py` on ARM
- [#822][822] Enabled relative leaks with `MemLeak`
+ This should be useful for e.g. heap-relative leaks
- [#832][832] Changed all internal imports to use absolute imports (no functional changes)
- [a12d0b6][a12d0b6] Move `STDOUT`, `PIPE`, `PTY` constants to globals
+ `process(..., stdin=process.PTY)` --> `process(..., stdin=PTY)`
- [#828][828] Use `PR_SET_PTRACER` for all `process()` and `ssh.process()` instances
+ This simplifies debugging on systems with YAMA ptrace enabled
- Various documentation enhancements
+ In particular, the [gdb][gdb], [elf][elf], and [ssh][ssh] docs are much better
- [#833][833] Performance enhancements for `adb` module
- [d0267f3][d0267f3] `packing.fit()` now treats large offsets as cyclic patterns (e.g. `0x61616161` behaves the same as `"aaaa"`)
- [#835][835] Added `ssh.checksec`
+ Reports the kernel version and other relevant information on connection
- [#857][857] Slightly shortened `execve` shellcode
- [300f8e0][300f8e0] Slightly speed up processing of large ELF files
- [#861][861] Adds support for extracting `IKCONFIG` configs from Linux kernel images, and extends `checksec` to report on any insecure configurations discovered
- [#871][871] Moves all of the basic syscall templates to `shellcraft/common` and exposes them via symlinks. Closed [#685][685]
+ Should not have any visible effects from any documented APIs
+ `shellcraft.arch.os.syscall_function()` still works the same
+ We now have the ability to differentiate between the `connect` syscall, and a TCP `connect` helper
- [#887][887] `sh_string` now returns a quoted empty string `''` rather than just an empty string
- [#839][839] Exposes a huge amount of functionality via corefiles which was not previously availble. See the [docs][corefile_docs] for examples.
+ `process().corefile` will automatically instantiate a Corefile for the process
+ QEMU-emulated processes are supported
+ Native processes are supported, including extraction of coredumps from `apport` crash logs
+ Native processes can be dumped *while running*, in a manner similar to `GDB`'s `gcore` script
- [#875][857] Added [documentation][aarch64] (and tests) for AArch64 shellcode
- [#882][882] The `ROP` class now respects `context.bytes` instead of using the hard-coded value of `4` (fixed [#879][879])
- [#869][869] Added several fields to the `process` class (`uid`, `gid`, `suid`, `sgid`) which are recorded at execution time, based on the file permissions
- [#868][868] Changed the way that `ssh.process()` works internally, and it now returns a more specialized class, `ssh_process`.
+ Added `ssh_process.corefile` for fetching remote corefiles
+ Added `ssh_process.ELF` for getting an ELF of the remote executable
+ The `uid`, `gid`, and `suid`, and `sgid` which are recorded at execution time, based on the file permissions
- [#865][865] Fixes `ELF.read` to support contiguous memory reads across non-contiguous file-backed segments
- [#862][862] Adds a `symlink=` argument to `ssh.set_working_directory`, which will automatically symlink all of the files in the "old" working directory into the "new" working directory
[ssh]: http://docs.pwntools.com/en/dev/tubes/ssh.html
[gdb]: http://docs.pwntools.com/en/dev/gdb.html
[elf]: http://docs.pwntools.com/en/dev/elf.html
[corefile_docs]: http://docs.pwntools.com/en/dev/elf/corefile.html
[aarch64]: http://docs.pwntools.com/en/dev/shellcraft/aarch64.html
[685]: https://github.com/Gallopsled/pwntools/pull/685
[822]: https://github.com/Gallopsled/pwntools/pull/822
[828]: https://github.com/Gallopsled/pwntools/pull/828
[832]: https://github.com/Gallopsled/pwntools/pull/832
[833]: https://github.com/Gallopsled/pwntools/pull/833
[835]: https://github.com/Gallopsled/pwntools/pull/835
[839]: https://github.com/Gallopsled/pwntools/pull/839
[857]: https://github.com/Gallopsled/pwntools/pull/857
[861]: https://github.com/Gallopsled/pwntools/pull/861
[862]: https://github.com/Gallopsled/pwntools/pull/862
[865]: https://github.com/Gallopsled/pwntools/pull/865
[868]: https://github.com/Gallopsled/pwntools/pull/868
[869]: https://github.com/Gallopsled/pwntools/pull/869
[871]: https://github.com/Gallopsled/pwntools/pull/871
[875]: https://github.com/Gallopsled/pwntools/pull/857
[879]: https://github.com/Gallopsled/pwntools/issues/879
[882]: https://github.com/Gallopsled/pwntools/pull/882
[887]: https://github.com/Gallopsled/pwntools/pull/887
[b584ca3]: https://github.com/Gallopsled/pwntools/commit/b584ca3
[a12d0b6]: https://github.com/Gallopsled/pwntools/commit/a12d0b6
[d0267f3]: https://github.com/Gallopsled/pwntools/commit/d0267f3
[300f8e0]: https://github.com/Gallopsled/pwntools/commit/300f8e0
## 3.4.1
- [#894][894] Fix a bug when using `gdb.debug()` over ssh.
- [e021f57][e021f57] Fix a bug ([#891][891]) in `rop` when needing to insert padding to fix alignment
[e021f57]: https://github.com/Gallopsled/pwntools/commit/e021f57
[894]: https://github.com/Gallopsled/pwntools/pull/894
[891]: https://github.com/Gallopsled/pwntools/issues/891
## 3.4.0
- [#800][800] Add `shell=` option to `ssh.process()`
- [#806][806] Add `context.buffer_size` for fine-tuning `tube` performance
+ Also adds `buffer_fill_size=` argument for all tubes
- [b83a6c7][b83a6c7] Fix undocumented `process.leak` function
- [546061e][546061e] Modify `coredump_filter` of all spawned processes, so that core dumps are more complete
- [#809][809] Add several functions to `adb` (`unlink`, `mkdir`, `makedirs`, `isdir`, `exists`)
- [#817][817] Make disconnection detection more robust
[800]: https://github.com/Gallopsled/pwntools/pull/800
[806]: https://github.com/Gallopsled/pwntools/pull/806
[809]: https://github.com/Gallopsled/pwntools/pull/809
[817]: https://github.com/Gallopsled/pwntools/pull/817
[5d9792f]: https://github.com/Gallopsled/pwntools/commit/5d9792f
[b83a6c7]: https://github.com/Gallopsled/pwntools/commit/b83a6c7
[546061e]: https://github.com/Gallopsled/pwntools/commit/546061e
## 3.3.4
- [#850][850] and [#846][846] fix issues with `hexdump` and the `phd` command-line utility, when using pipes (e.g. `echo foo | phd`)
- [#852][852] Fixes register ordering in `regsort`
- [#853][853] Fixes the registers restored in `shellcraft.amd64.popad`
[846]: https://github.com/gallopsled/pwntools/pull/846
[850]: https://github.com/gallopsled/pwntools/pull/850
[852]: https://github.com/gallopsled/pwntools/pull/852
[853]: https://github.com/gallopsled/pwntools/pull/853
## 3.3.3
- [#843][843] fixed a bug in `amd64.mov`.
[843]: https://github.com/gallopsled/pwntools/pull/843
## 3.3.2
- [#840][840] fixed a regression introduced by [#837][837].
[840]: https://github.com/gallopsled/pwntools/pull/840
## 3.3.1
- [#833][833] Fixed a performance-impacting bug in the adb module.
- [#837][837] Fixed a bug([#836][836]) causing `hexdump(cyclic=True)` to throw an exception.
[833]: https://github.com/Gallopsled/pwntools/pull/833
[837]: https://github.com/Gallopsled/pwntools/pull/837
[836]: https://github.com/Gallopsled/pwntools/issues/836
## 3.3.0
- [b198ec8][b198ec8] Added `tube.stream()` function, which is like `tube.interact()` without a prompt or keyboard input.
+ Effectively, this is similar to `cat file` and just prints data as fast as it is received.
- [aec3fa6][aec3fa6] Disable update checks against GitHub
+ These checks frequently broke due to GitHub query limits
- [#757][757] Fixed `adb.wait_for_device()` re-use of the same connection
- [f9133b1][f9133b1] Add a `STDERR` magic argument to make logging go to `stderr` instead of `stdout`
+ Usage is e.g. `python foo.py STDERR` or `PWNLIB_STDERR=1 python foo.py`
+ Also adds `context.log_console` to log to any file or terminal
- [67e11a9][67e11a9] Add faster error checking to `cyclic()` when provided very large values
- [5fda658][5fda658] Expose BitPolynom in `globals()`
- [#765][765] Added `-d` option for hex-escaped output for `shellcraft` command-line tool
- [#772][772] Fixed bash completion regressions
- [30c34b7][30c34b7] Fix `ROP.call()` with `Function` objects from `ELF.functions`
- [fa402ce][fa402ce] Add `adb.uptime` and `adb.boot_time`
- [82312ba][82312ba] Add `cyclic_metasploit` and `cyclic_metasploit_find`
[757]: https://github.com/Gallopsled/pwntools/pull/757
[765]: https://github.com/Gallopsled/pwntools/pull/765
[772]: https://github.com/Gallopsled/pwntools/pull/772
[b198ec8]: https://github.com/Gallopsled/pwntools/commit/b198ec8
[aec3fa6]: https://github.com/Gallopsled/pwntools/commit/aec3fa6
[f9133b1]: https://github.com/Gallopsled/pwntools/commit/f9133b1
[67e11a9]: https://github.com/Gallopsled/pwntools/commit/67e11a9
[5fda658]: https://github.com/Gallopsled/pwntools/commit/5fda658
[30c34b7]: https://github.com/Gallopsled/pwntools/commit/30c34b7
[fa402ce]: https://github.com/Gallopsled/pwntools/commit/fa402ce
[82312ba]: https://github.com/Gallopsled/pwntools/commit/82312ba
## 3.2.1
Multiple bug fixes.
- [#783][783] Fix `adb.uninstall` typo
- [#787][787] Added error handling for `ssh.process` argument `preexec_fn`
- [#793][793] Fixed progress message in `remote()` when connections failed
- [#802][802] Fixed partition listing in `adb.partitions`, which accidentally shelled out to the `adb` binary
- [#804][804] Fix error message for 32-bit distributions
- [#805][805] Fix exception in `Core.segments` when a segment has no name
- [#811][811] Fixes and performance improvements for `adb.wait_for_device()`
- [#813][813] Fixed a release script
- [#814][814] Fixed exceptions thrown if the `$HOME` directory is not writable
- [#815][815] Properly handle `None` in `MemLeak`
[783]: https://github.com/Gallopsled/pwntools/pull/783
[787]: https://github.com/Gallopsled/pwntools/pull/787
[793]: https://github.com/Gallopsled/pwntools/pull/793
[802]: https://github.com/Gallopsled/pwntools/pull/802
[804]: https://github.com/Gallopsled/pwntools/pull/804
[805]: https://github.com/Gallopsled/pwntools/pull/805
[811]: https://github.com/Gallopsled/pwntools/pull/811
[813]: https://github.com/Gallopsled/pwntools/pull/813
[814]: https://github.com/Gallopsled/pwntools/pull/814
[815]: https://github.com/Gallopsled/pwntools/pull/815
## 3.2.0
- [#695][695] Fixed a performance regression in `phd`.
- [452605e][452605e] Fixed [#629][629] related to correct removal of temporary files.
- [ea94ee4][ea94ee4] Disallows semi-colons in for the `run_in_terminal` function, since it did not work properly in all cases.
- [6376d07][6376d07] Added the mips shellcode `pushstr_array`.
- [#700][700] Added missing MIPS shellcode documentation to readthedocs, and enabled unit tests
- [#701][701] Command line tools refactored to have a common `pwn` entry point.
+ Added an option to *not* install the traditional `asm`, `disasm`, `checksec`, etc scripts
+ All existing tools can be accessed from the `pwn` command (e.g. `pwn asm nop`).
- [#704][704] The `process` object has a new, optional argument `alarm` for setting a `SIGALRM` timeout for processes.
- [#705][705] Added the Android Emulator to the test suite and Travis CI.
+ Android Emulator is now required for the full test suite
+ Android Emulator tests are skipped if no Android-related changes are detected
- [#711][711] `DynELF` has a new attribute, `heap`, which leaks the current `brk` address (heap base). This is useful for finding heap allocations with dlmalloc-derived allocators like those used by Glibc.
- [#717][717] `sh_string` was rewritten to emit more compact and compatible strings
+ This was achieved by embedding single-quoted non-printable literals
+ Much more testing was added
+ Emitted strings are no longer copy-paste compatible, but work fine with e.g. `tubes` module and the default `subprocess` module
- [#709][709] The `adb` module now directly talks to the `adb` server process via a new module, `adb.protocol`
+ Removes the need to shell out to `adb`
+ Avoids version-compatibility issues with `adb` server vs. client
- [#703][703] Added new methods to `adb`
+ `install` - Installs an APK
+ `uninstall` - Uninstalls a package
+ `packages` - Lists installed packages
- [4893819][4893819] Modified `shellcraft.sh` on all platforms to provide `argv[0]` and set `argc==1`
+ This is needed for systems which have Busybox or other minimal shell for `/bin/sh` which does not behave well with `argc==0` or `argv[0]==NULL`.
- [1e414af][1e414af] Added `connect()` alias for `remote()`
+ For example, `io=connect('google.com', 80)`
+ This also works with `tcp(...)` and `udp(...)` aliases
- [869ec42][869ec42] Added `ssh.read()` and `ssh.write()` aliases
- [2af55c9][2af55c9] `AdbDevice` objects exposed via e.g. `adb.devices()` now offer scoped access to all `adb` module properties
+ It is now possible to e.g. `map(lambda d: d.process(['id']).recvall(), adb.devices())`
[629]: https://github.com/Gallopsled/pwntools/issues/629
[695]: https://github.com/Gallopsled/pwntools/pull/695
[700]: https://github.com/Gallopsled/pwntools/pull/700
[701]: https://github.com/Gallopsled/pwntools/pull/701
[704]: https://github.com/Gallopsled/pwntools/pull/704
[711]: https://github.com/Gallopsled/pwntools/pull/711
[717]: https://github.com/Gallopsled/pwntools/pull/717
[709]: https://github.com/Gallopsled/pwntools/pull/709
[705]: https://github.com/Gallopsled/pwntools/pull/705
[703]: https://github.com/Gallopsled/pwntools/pull/703
[452605e]: https://github.com/Gallopsled/pwntools/commit/452605e854f4870ef5ccfdf7fb110dfd75c50feb
[ea94ee4]: https://github.com/Gallopsled/pwntools/commit/ea94ee4ca5a8060567cc9bd0dc33796a89ad0b95
[6376d07]: https://github.com/Gallopsled/pwntools/commit/6376d072660fb2250f48bd22629bbd7e3c61c758
[1e414af]: https://github.com/Gallopsled/pwntools/commit/1e414afbeb3a01242f4918f111febaa63b640eb7
[869ec42]: https://github.com/Gallopsled/pwntools/commit/869ec42082b4b98958dfe85103da9b101dde7daa
[4893819]: https://github.com/Gallopsled/pwntools/commit/4893819b4c23182da570e2f4ea4c14d73af2c0df
[2af55c9]: https://github.com/Gallopsled/pwntools/commit/2af55c9bc382eca23f89bc0abc7a07c075521f94
## 3.1.1
Fixed a bug in `MemLeak.struct` (PR: #768).
## 3.1.0
A number of smaller bugfixes and documentation tweaks.
## 3.0.4
- Fixed a bug that made 3.0.3 uninstallable (Issue: #751, PR: #752)
## 3.0.3
- Fixed some performance and usability problems with the update system (Issues:
#723, #724, #736. PRs: #729, #738, #747).
- Fixed a bug related to internals in pyelftools (PRs: #730, #746).
- Fixed an issue with travis (Issue: #741, PRs: #743, #744, #745).
## 3.0.2
- Cherry-pick #695, as this was a regression-fix.
- Added a fix for the update checker, as it would suggest prereleases as updates to stable releases.
- Various documentation fixes.
## 3.0.1
A small bugfix release. There were a lot of references to the `master`-branch, however after 3.0.0 we use the names `stable`, `beta` and `dev` for our branches.
## 3.0.0
This was a large release (1305 commits since 2.2.0) with a lot of bugfixes and changes. The Binjitsu project, a fork of Pwntools, was merged back into Pwntools. As such, its features are now available here.
As always, the best source of information on specific features is the comprehensive docs at https://pwntools.readthedocs.org.
This list of changes is non-complete, but covers all of the significant changes which were appropriately documented.
#### Android
Android support via a new `adb` module, `context.device`, `context.adb_host`, and `context.adb_port`.
#### Assembly and Shellcode
- Assembly module enhancements for making ELF modules from assembly or pre-assembled shellcode. See `asm.make_elf` and `asm.make_elf_from_assembly`.
- `asm` and `shellcraft` command-line tools support flags for the new shellcode encoders
- `asm` and `shellcraft` command-line tools support `--debug` flag for automatically launching GDB on the result
- Added MIPS, PowerPC, and AArch64 support to the `shellcraft` module
- Added Cyber Grand Challenge (CGC) support to the `shellcraft` module
- Added syscall wrappers for every Linux syscall for all supported architectures to the `shellcraft` module
+ e.g. `shellcraft.<arch>.gettimeofday`
- (e.g. `shellcraft.i386.linux.`)
- Added in-memory ELF loaders for most supported architectures
+ Only supports statically-linked binaries
+ `shellcraft.<arch>.linux.loader`
#### Context Module
- Added `context.aslr` which controls ASLR on launched processes. This works with both `process()` and `ssh.process()`, and can be specified per-process with the `aslr=` keyword argument.
- Added `context.binary` which automatically sets all `context` variables from an ELF file.
- Added `context.device`, `context.adb`, `context.adb_port`, and `context.adb_host` for connecting to Android devices.
- Added `context.kernel` setting for SigReturn-Oriented-Programming (SROP).
- Added `context.log_file` setting for sending logs to a file. This can be set with the `LOG_FILE` magic command-line option.
- Added `context.noptrace` setting for disabling actions which require `ptrace` support. This is useful for turning all `gdb.debug` and `gdb.attach` options into no-ops, and can be set via the `NOPTRACE` magic command-line option.
- Added `context.proxy` which hooks all connections and sends them to a SOCKS4/SOCKS5. This can be set via the `PROXY` magic command-line option.
- Added `context.randomize` to control randomization of settings like XOR keys and register ordering (default off).
- Added `context.terminal` for setting how to launch commands in a new terminal.
#### DynELF and MemLeak Module
- Added a `DynELF().libc` property which attempt to find the remote libc and download the ELF from LibcDB.
- Added a `DynELF().stack` property which leaks the `__environ` pointer from libc, making it easy to leak stack addresses.
- Added `MemLeak.String` and `MemLeak.NoNewlines` and other related helpers for handling special leakers which cannot e.g. handle newlines in the leaked addresses and which leak a C string (e.g. auto-append a `'\x00'`).
- Enhancements for leaking speed via `MemLeak.compare` to avoid leaking an entire field if we can tell from a partial leak that it does not match what we are searching for.
#### Encoders Module
- Added a `pwnlib.encoders` module for assembled-shellcode encoders/decoders
- Includes position-independent basic XOR encoders
- Includes position-independent delta encoders
- Includes non-position-independent alphanumeric encoders for Intel
- Includes position-independent alphanumeric encoders for ARM/Thumb
#### ELF Module
- Added a `Core` object which can parse core-files, in order to extract / search for memory contents, and extract register states (e.g. `Core('./corefile').eax`).
#### Format Strings
- Added a basic `fmtstr` module for assisting with Format String exploitation
#### GDB Module
- Added support for debugging Android devices when `context.os=='android'`
- Added helpers for debugging shellcode snippets with `gdb.debug_assembly()` and `gdb.debug_shellcode()`
#### ROP Module
- Added support for SigReturn via `pwnlib.rop.srop`
+ Occurs automatically when syscalls are invoked and a function cannot be found
+ SigReturn frames can be constructed manually with `SigreturnFrame()` objects
- Added functional doctests for ROP and SROP
#### Tubes Process Module
- `process()` has many new options, check out the documentation
+ `aslr` controls ASLR
+ `setuid` can disable the effect of setuid, allowing core dumps (useful for extracting crash state via the new `Core()` object)
+ TTY echo and control characters can be enabled via `raw` argument
- `stdout` and `stderr` are now PTYs by default
+ `stdin` can be set to a PTY also via setting `stdin=process.PTY`
#### Tubes SSH Module
- Massive enhancements all over
- `ssh` objects now have a `ssh.process()` method which avoids the need to handle shell expansion via the old `ssh.run()` method
- Files are downloaded via SFTP if available
- New `download` and `upload` methods auto-detect whether the target is a file or directory and acts accordingly
- Added `listen()` method alias for `listen_remote()`
- Added `remote()` method alias for `connect_remote()`
#### Utilities
- Added `fit()` method to combine the functionality of `flat()` with the functionality of `cyclic()`
- Added `negative()` method to negate the value of an integer via two's complement, with respect to the current integer size (`context.bytes`).
- Added `xor_key()` method to generate an XOR key which avoids undesirable bytes over a given input.
- Added a multi-threaded `bruteforce()` implementation, `mbruteforce()`.
- Added `dealarm_shell()` helper to remove the effects of `alarm()` after you've popped a shell.
## 2.2.0
This was a large release with a lot of bugfixes and changes. Only the most significant
+10 -13
View File
@@ -1,7 +1,5 @@
# Contributing
We love pull requests!
Github has a great guide for contributing to open source projects:
- [Contributing to a project](https://guides.github.com/activities/forking/)
@@ -11,7 +9,7 @@ Github has a great guide for contributing to open source projects:
- [Making a Pull Request](https://guides.github.com/activities/forking/#making-a-pull-request)
- [Huzzah!](https://guides.github.com/activities/forking/#huzzah)
## Pwntools Specifics
## pwntools Specifics
In general, we like to keep things documented. You should add documentation to any new functionality, and update it for any changed functionality. Our docstrings use the [Google Style Python Docstrings](https://sphinxcontrib-napoleon.readthedocs.org/en/latest/example_google.html#example-google).
@@ -21,18 +19,17 @@ Finally, it is probably a good idea to run the test suite locally before doing
the pull-request to make sure everything works, however this is not a
requirement.
Once you are ready to do a pull-request, you should figure out if your changes
constitutes a new feature or a bugfix in stable or beta. If it is a bugfix in
stable or beta, you should do the pull-request against the branch in question,
and otherwise your pull-request should be against the dev branch.
Once you do the pull-request Travis CI will run the test-suite on it. Once it
passes one of the core developers will look at your pull request, possibly
comment on it and then hopefully merge it into master.
comment on it and then hopefully merge it into the branch in question.
## Test Suite
## Automated Testing
To run the test suite, you should be running Ubuntu 12.04 or 14.04, and run the following commands. **Be aware** that this will add a user to your machine, and create a public key for SSH login!
Pull requests against Pwntools require at a minimum that no tests have been broken, and ideally each pull request will include new tests to ensure that all of the functionality works as intended.
```sh
bash .travis_install.sh
bash .travis_ssh_setup.sh
cd docs
pip install -r requirements.txt
make doctest
```
You can find more information on testing in [TESTING.md](TESTING.md).
+1 -1
View File
@@ -13,7 +13,7 @@ directories:
- pwnlib/data/
Copyright (c) 2015 Gallopsled and Zach Riggle
Copyright (c) 2015 Gallopsled et al.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
+7 -1
View File
@@ -1 +1,7 @@
include *.txt
graft examples
graft extra
include *.md *.txt *.sh *.yml MANIFEST.in
recursive-include docs *.rst *.png Makefile *.py *.txt
recursive-include pwnlib *.py *.asm *.rst *.md *.txt *.sh __doc__ *.mako
recursive-include pwn *.py *.asm *.rst *.md *.txt *.sh
recursive-exclude *.pyc
+19 -21
View File
@@ -1,14 +1,14 @@
![pwntools logo](docs/source/logo.png?raw=true)
# pwntools - CTF toolkit
![pwntools logo](https://github.com/Gallopsled/pwntools/blob/stable/docs/source/logo.png?raw=true)
[![Docs latest](https://readthedocs.org/projects/pwntools/badge/)](https://pwntools.readthedocs.org/en/latest)
[![Docs 2.2.0](https://readthedocs.org/projects/pwntools/badge/?version=2.2.0)](https://pwntools.readthedocs.org/en/2.2.0)
[![PyPI](https://img.shields.io/pypi/v/pwntools.svg?style=flat)](https://pypi.python.org/pypi/pwntools/)
[![Gittip](https://img.shields.io/gittip/gallopsled.svg?style=flat)](https://www.gittip.com/gallopsled/)
[![Docs](https://readthedocs.org/projects/pwntools/badge/?version=stable)](https://docs.pwntools.com/)
[![PyPI](https://img.shields.io/badge/pypi-v3.9.1-green.svg?style=flat)](https://pypi.python.org/pypi/pwntools/)
[![Travis](https://travis-ci.org/Gallopsled/pwntools.svg)](https://travis-ci.org/Gallopsled/pwntools)
[![Twitter](https://img.shields.io/badge/twitter-Gallopsled-4099FF.svg?style=flat)](https://twitter.com/Gallopsled)
[![Coveralls](https://img.shields.io/coveralls/Gallopsled/pwntools/dev.svg)](https://coveralls.io/github/Gallopsled/pwntools?branch=dev)
[![Twitter](https://img.shields.io/badge/twitter-pwntools-4099FF.svg?style=flat)](https://twitter.com/pwntools)
[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat)](http://choosealicense.com/licenses/mit/)
This is the CTF framework used by Gallopsled in every CTF.
Pwntools is a CTF framework and exploit development library. Written in Python, it is designed for rapid prototyping and development, and intended to make exploit writing as simple as possible.
```python
from pwn import *
@@ -20,32 +20,30 @@ r.send(asm(shellcraft.sh()))
r.interactive()
```
However we have made command-line frontends for some of the functionality
in `pwnlib`. These are:
# Try It Now!
* `asm`/`disasm`: Small wrapper for various assemblers.
* `constgrep`: Tool for finding constants defined in header files.
* `cyclic`: De Bruijn sequence generator and lookup tool.
* `hex`/`unhex`: Command line tools for doing common hexing/unhexing operations.
* `shellcraft`: Frontend to our shellcode.
* `phd`: Replacement for `hexdump` with colors.
You can now do a live demo of Pwntools, [right in your browser](https://demo.pwntools.com).
# Documentation
Our documentation is available at [pwntools.readthedocs.org](https://pwntools.readthedocs.org/en/latest/)
Our documentation is available at [docs.pwntools.com](https://docs.pwntools.com/)
To get you started, we've provided some example solutions for past CTF challenges in our [write-ups repository](https://github.com/Gallopsled/pwntools-write-ups).
# Installation
pwntools is best supported on Ubuntu 12.04 and 14.04, but most functionality should work on any Posix-like distribution (Debian, Arch, FreeBSD, OSX, etc.).
Pwntools is best supported on 64-bit Ubuntu LTE releases (12.04, 14.04, and 16.04). Most functionality should work on any Posix-like distribution (Debian, Arch, FreeBSD, OSX, etc.). Python 2.7 is required.
Most of the functionality of pwntools is self-contained and Python-only. You should be able to get running quickly with
```sh
pip install pwntools
apt-get update
apt-get install python2.7 python-pip python-dev git libssl-dev libffi-dev build-essential
pip install --upgrade pip
pip install --upgrade pwntools
```
However, some of the features (ROP generation and assembling/disassembling foreign architectures) require non-Python dependencies. For more information, see the [complete installation instructions here](https://pwntools.readthedocs.org/en/latest/install.html).
However, some of the features (assembling/disassembling foreign architectures) require non-Python dependencies. For more information, see the [complete installation instructions here](https://docs.pwntools.com/en/stable/install.html).
# Contribution
@@ -53,7 +51,7 @@ However, some of the features (ROP generation and assembling/disassembling forei
See [CONTRIBUTING.md](CONTRIBUTING.md)
# Contact
If you have any questions not worthy of a [bug report](https://github.com/Gallopsled/pwntools/issues), feel free to join us
If you have any questions not worthy of a [bug report](https://github.com/Gallopsled/pwntools/issues), feel free to ping us
at [`#pwntools` on Freenode](irc://irc.freenode.net/pwntools) and ask away.
Click [here](https://kiwiirc.com/client/irc.freenode.net/pwntools) to connect.
There is also a [mailing list](https://groups.google.com/forum/#!forum/pwntools-users) for higher latency discussion.
+44
View File
@@ -0,0 +1,44 @@
# Testing
Pwntools makes extensive use of unit tests and integration tests to ensure everything is in working order, and no regressions occur.
## Test Suite
To run the test suite, it is best to use Ubuntu 12.04 or 14.04, and run the following commands. **Be aware** that this will add a user to the machine, and create a public key for SSH login!
```sh
bash travis/install.sh
bash travis/ssh_setup.sh
pip install --upgrade --editable .
PWNLIB_NOTERM=1 make -C docs doctest
```
## Testing in Docker
A `Dockerfile` has been provided which has a clean testing environment with Ubuntu Xenial. It is very similar to the online Travis CI testing environment, but uses a more modern version of Ubuntu.
See `travis/docker/README.md` for more information.
## New Tests
To add a new test to an existing module, just add an inline doctest. If the test needs access to an external module, add the import statement to the `testsetup` block in the corresponding file in `docs/source/<module>.rst`.
To add an entirely new module, create a new `module.rst` and add it to the list in `index.rst`. The best way to see if your tests are actually being run is to add an intentionally-failing test like:
```py
>>> assert False
```
## Example Test Module
The module `pwnlib.testexample` exists to demonstrate how everything is tied together. The only files which were modified to add this example module and run its tests automatically are:
- `pwnlib/testexample.py`
- `docs/source/testexample.rst`
- `docs/source/index.rst`
## Shellcode and ROP
These are both less easy to test, as they require actually executing code, or loading real binaries. In order to make the process simpler, the `runner` library was created to wrap common tasks. For an example of testing shellcode with these helpers, see [exit.asm](pwnlib/shellcraft/templates/i386/linux/exit.asm).
Additionally, for loading ELF files on-the-fly, the helpers `ELF.from_bytes` and `ELF.from_assembly` are available.
+4
View File
@@ -44,6 +44,10 @@ help:
clean:
-rm -rf $(BUILDDIR)/*
-rm -rf /tmp/user/pwn*
-rm -rf $(HOME)/.pwntools-cache
-rm -rf /tmp/pwn* 2>/dev/null || true
-rm -rf build
html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
+54 -54
View File
@@ -26,68 +26,68 @@ sys.path.append(os.path.abspath(os.path.join('..', 'pwnlib')))
import version
def main(args):
"""Generate a Dash docset from Sphinx source files."""
"""Generate a Dash docset from Sphinx source files."""
srcdir = args.srcdir
dstdir = args.dstdir
name = args.name
srcdir = args.srcdir
dstdir = args.dstdir
name = args.name
if not os.path.exists(dstdir):
os.makedirs(dstdir)
if not os.path.exists(dstdir):
os.makedirs(dstdir)
# Generate HTML without indices.
sphinx.build_main([ "sphinx-build", "-b", "html", "-d", os.path.join(dstdir, "doctrees"), \
"-t", "dash", srcdir, os.path.join(dstdir, "html") ])
# Generate HTML without indices.
sphinx.build_main([ "sphinx-build", "-b", "html", "-d", os.path.join(dstdir, "doctrees"), \
"-t", "dash", srcdir, os.path.join(dstdir, "html") ])
# Convert to docset.
try:
doc2dash.__main__.main.main( \
[ os.path.join(dstdir, "html"), "-d", dstdir, "-n", name, \
"-f", "-I", "index.html"], "doc2dash", False)
except SystemExit,e:
pass
# Convert to docset.
try:
doc2dash.__main__.main.main( \
[ os.path.join(dstdir, "html"), "-d", dstdir, "-n", name, \
"-f", "-I", "index.html"], "doc2dash", False)
except SystemExit,e:
pass
# Insert a link to the online version.
online = args.online
if online is not None and online != "":
url = online.replace("@VERSION", args.version)
with open(os.path.join(dstdir, name+".docset", "Contents", "Info.plist"), "r+") as f_info:
pl = f_info.read()
pl = pl.replace("</dict>", \
"\t<key>DashDocSetFallbackURL</key>\n\t<string>%s</string>\n</dict>" % url)
f_info.seek(0)
f_info.write(pl)
f_info.truncate()
# Insert a link to the online version.
online = args.online
if online is not None and online != "":
url = online.replace("@VERSION", args.version)
with open(os.path.join(dstdir, name+".docset", "Contents", "Info.plist"), "r+") as f_info:
pl = f_info.read()
pl = pl.replace("</dict>", \
"\t<key>DashDocSetFallbackURL</key>\n\t<string>%s</string>\n</dict>" % url)
f_info.seek(0)
f_info.write(pl)
f_info.truncate()
# Modify the CSS to hide the menu included in the HTML.
with open(os.path.join(dstdir, name+".docset", "Contents", "Resources", "Documents", "_static", "css", "theme.css"), "r+") as f_css:
css = f_css.read()
css = css.replace( \
'@media screen and (max-width: 768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}',\
'@media screen {.wy-body-for-nav{background:#fcfcfc}' )
css = css.replace( \
'@media screen and (max-width: 480px)', \
'@media screen ')
f_css.seek(0)
f_css.write(css)
f_css.truncate()
# Modify the CSS to hide the menu included in the HTML.
with open(os.path.join(dstdir, name+".docset", "Contents", "Resources", "Documents", "_static", "css", "theme.css"), "r+") as f_css:
css = f_css.read()
css = css.replace( \
'@media screen and (max-width: 768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}',\
'@media screen {.wy-body-for-nav{background:#fcfcfc}' )
css = css.replace( \
'@media screen and (max-width: 480px)', \
'@media screen ')
f_css.seek(0)
f_css.write(css)
f_css.truncate()
# Modify the index
db_conn = sqlite3.connect(os.path.join(dstdir, name+".docset", "Contents", "Resources", "docSet.dsidx"))
try:
db_conn.execute('INSERT INTO "searchIndex" ("name","type","path") VALUES ' \
'("1 Contents", "Guide", "index.html"), ' \
'("2 About pwntools", "Guide", "about.html"), ' \
'("3 Installation", "Guide", "install.html"), ' \
'("4 Getting Started", "Guide", "intro.html"), ' \
'("5 Globals (pwn)", "Guide", "globals.html"), ' \
'("6 Command Line Tools", "Guide", "commandline.html")')
db_conn.execute('DELETE FROM "searchIndex" WHERE "type" = "Module" AND ("name" = "pwn" OR "name" = "pwnlib")')
db_conn.commit()
finally:
db_conn.close()
# Modify the index
db_conn = sqlite3.connect(os.path.join(dstdir, name+".docset", "Contents", "Resources", "docSet.dsidx"))
try:
db_conn.execute('INSERT INTO "searchIndex" ("name","type","path") VALUES ' \
'("1 Contents", "Guide", "index.html"), ' \
'("2 About pwntools", "Guide", "about.html"), ' \
'("3 Installation", "Guide", "install.html"), ' \
'("4 Getting Started", "Guide", "intro.html"), ' \
'("5 Globals (pwn)", "Guide", "globals.html"), ' \
'("6 Command Line Tools", "Guide", "commandline.html")')
db_conn.execute('DELETE FROM "searchIndex" WHERE "type" = "Module" AND ("name" = "pwn" OR "name" = "pwnlib")')
db_conn.commit()
finally:
db_conn.close()
return 0
return 0
parser = argparse.ArgumentParser()
parser.add_argument("--name", help="docset name", default="pwntools")
+13 -5
View File
@@ -1,8 +1,16 @@
paramiko
argparse
mako
pyelftools
sphinxcontrib-napoleon
sphinxcontrib-autoprogram
sphinxcontrib-autoprogram==0.1.2
isort
paramiko>=1.15.2
mako>=1.0.0
pyelftools>=0.2.3
capstone
ropgadget>=5.3
pyserial>=2.7
requests>=2.5.1
pip>=6.0.8
tox>=1.8.1
pygments>=2.0
sphinx_rtd_theme
doc2dash
coveralls
+13
View File
@@ -0,0 +1,13 @@
.. testsetup:: *
from pwn import *
adb = pwnlib.adb
:mod:`pwnlib.adb` --- Android Debug Bridge
=====================================================
.. automodule:: pwnlib.adb.adb
:members:
.. automodule:: pwnlib.adb.protocol
:members:
+9
View File
@@ -0,0 +1,9 @@
.. testsetup:: *
from pwn import *
:mod:`pwnlib.args` --- Magic Command-Line Arguments
=====================================================
.. automodule:: pwnlib.args
:members:
+11 -1
View File
@@ -1,7 +1,7 @@
.. testsetup:: *
import tempfile
import os
import subprocess
from pwnlib.context import context
from pwnlib.asm import *
from pwnlib import shellcraft
@@ -13,3 +13,13 @@
.. automodule:: pwnlib.asm
:members:
Internal Functions
-----------------------------------------
These are only included so that their tests are run.
You should never need these.
.. autofunction:: pwnlib.asm.dpkg_search_for_binutils
.. autofunction:: pwnlib.asm.print_binutils_instructions
+2 -30
View File
@@ -14,33 +14,5 @@ pwntools comes with a handful of useful command-line utilities which serve as wr
.. toctree::
.. autoprogram:: pwnlib.commandline.asm:parser
:prog: asm
.. autoprogram:: pwnlib.commandline.constgrep:p
:prog: constgrep
.. autoprogram:: pwnlib.commandline.cyclic:parser
:prog: cyclic
.. autoprogram:: pwnlib.commandline.disasm:parser
:prog: disasm
.. autoprogram:: pwnlib.commandline.elfdiff:p
:prog: elfdiff
.. autoprogram:: pwnlib.commandline.elfpatch:p
:prog: elfpatch
.. autoprogram:: pwnlib.commandline.hex:parser
:prog: hex
.. autoprogram:: pwnlib.commandline.phd:parser
:prog: phd
.. autoprogram:: pwnlib.commandline.shellcraft:p
:prog: shellcraft
.. autoprogram:: pwnlib.commandline.unhex:parser
:prog: unhex
.. autoprogram:: pwnlib.commandline.main:parser
:prog: pwn
+95 -10
View File
@@ -22,6 +22,8 @@ build_dash = tags.has('dash')
# documentation root, use os.path.abspath to make it absolute, like shown here.
sys.path.insert(0, os.path.abspath('../..'))
import pwnlib
# -- General configuration -----------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
@@ -42,21 +44,58 @@ extensions = [
'sphinxcontrib.napoleon'
]
# Disable "info" logging directly to stdout by Sphinx
import logging
class SphinxPwnlibFilter(logging.Filter):
def filter(self, record):
if record.name.startswith('pwn'):
return False
if record.name.startswith('paramiko'):
return False
return True
log_filter = SphinxPwnlibFilter()
for i, handler in enumerate(logging.root.handlers):
print("Filtering Sphinx handler", handler)
handler.addFilter(log_filter)
# Napoleon settings
napoleon_use_ivar = True
napoleon_use_rtype = False
doctest_global_setup = '''
import pwnlib, sys
import sys, os
os.environ['PWNLIB_NOTERM'] = '1'
os.environ['PWNLIB_RANDOMIZE'] = '0'
import pwnlib
pwnlib.context.context.reset_local()
pwnlib.context.ContextType.defaults['log_level'] = 'ERROR'
pwnlib.context.ContextType.defaults['randomize'] = False
pwnlib.util.fiddling.default_style = {}
pwnlib.term.text.when = 'never'
pwnlib.log.install_default_handler()
pwnlib.log.console.stream = sys.stdout
pwnlib.log.rootlogger.setLevel(1)
# Sphinx modifies sys.stdout, and context.log_terminal has
# a reference to the original instance. We need to update
# it for logging to be captured.
class stdout(object):
def __getattr__(self, name):
return getattr(sys.stdout, name)
def __setattr__(self, name, value):
return setattr(sys.stdout, name, value)
pwnlib.context.ContextType.defaults['log_console'] = stdout()
'''
autodoc_member_order = 'alphabetical'
autoclass_content = 'both'
autodoc_member_order = 'groupwise' # 'alphabetical'
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
doctest_test_doctest_blocks = True
doctest_test_doctest_blocks = 'true'
# The suffix of source filenames.
source_suffix = '.rst'
@@ -69,14 +108,13 @@ master_doc = 'index'
# General information about the project.
project = u'pwntools'
copyright = u'2014, Gallopsled et al'
copyright = u'2016, Gallopsled et al.'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
import pwnlib
release = pwnlib.__version__
version = release.rsplit('.', 1)[0]
@@ -212,11 +250,11 @@ latex_elements = {
# (source start file, target name, title, author, documentclass [howto/manual]).
latex_documents = [
('index', 'pwntools.tex', u'pwntools Documentation',
u'Gallopsled et al', 'manual'),
u'2016, Gallopsled et al.', 'manual'),
]
intersphinx_mapping = {'python': ('https://docs.python.org/2.7', None),
'paramiko': ('https://paramiko-docs.readthedocs.org/en/1.15/', None)}
'paramiko': ('https://paramiko-docs.readthedocs.org/en/2.1/', None)}
# The name of an image file (relative to this directory) to place at the top of
# the title page.
@@ -245,7 +283,7 @@ intersphinx_mapping = {'python': ('https://docs.python.org/2.7', None),
# (source start file, name, description, authors, manual section).
man_pages = [
('index', 'pwntools', u'pwntools Documentation',
[u'Gallopsled et al'], 1)
[u'2016, Gallopsled et al.'], 1)
]
# If true, show URL addresses after external links.
@@ -259,7 +297,7 @@ man_pages = [
# dir menu entry, description, category)
texinfo_documents = [
('index', 'pwntools', u'pwntools Documentation',
u'Gallopsled et al', 'pwntools', 'One line description of project.',
u'', 'pwntools', 'CTF exploit writing toolkit.',
'Miscellaneous'),
]
@@ -332,3 +370,50 @@ if build_dash:
html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
# otherwise, readthedocs.org uses their theme by default, so no need to specify it
# -- Customization to Sphinx autodoc generation --------------------------------------------
import sphinx.ext.autodoc
from sphinx.util.inspect import safe_getmembers, safe_getattr
# Test hidden members (e.g. def _foo(...))
def dont_skip_any_doctests(app, what, name, obj, skip, options):
return False
# Test non-exported members
class ModuleDocumenter(sphinx.ext.autodoc.ModuleDocumenter):
def get_object_members(self, want_all):
if want_all:
# if not hasattr(self.object, '__all__'):
# for implicit module members, check __module__ to avoid
# documenting imported objects
return True, safe_getmembers(self.object)
# else:
# memberlist = self.object.__all__
# # Sometimes __all__ is broken...
# if not isinstance(memberlist, (list, tuple)) or not \
# all(isinstance(entry, string_types) for entry in memberlist):
# self.directive.warn(
# '__all__ should be a list of strings, not %r '
# '(in module %s) -- ignoring __all__' %
# (memberlist, self.fullname))
# # fall back to all members
# return True, safe_getmembers(self.object)
else:
memberlist = self.options.members or []
ret = []
for mname in memberlist:
try:
ret.append((mname, safe_getattr(self.object, mname)))
except AttributeError:
self.directive.warn(
'missing attribute mentioned in :members: or __all__: '
'module %s, attribute %s' % (
safe_getattr(self.object, '__name__', '???'), mname))
return False, ret
if 'doctest' in sys.argv:
def setup(app):
app.connect('autodoc-skip-member', dont_skip_any_doctests)
sphinx.ext.autodoc.ModuleDocumenter = ModuleDocumenter
+4
View File
@@ -0,0 +1,4 @@
:mod:`pwnlib.config` --- Pwntools Configuration File
====================================================
.. automodule:: pwnlib.config
+25 -8
View File
@@ -1,16 +1,33 @@
.. testsetup:: *
import pwnlib
from pwnlib.context import context
import threading, logging
from pwn import *
import logging
log = pwnlib.log.getLogger('pwnlib.context')
context.clear()
:mod:`pwnlib.context` --- Setting runtime variables
=====================================================
.. autodata:: pwnlib.context.context
Many settings in ``pwntools`` are controlled via the global variable :data:`.context, such as the selected target operating system, architecture, and bit-width.
.. autoclass:: pwnlib.context.ContextType
:members:
In general, exploits will start with something like:
.. autoclass:: pwnlib.context.Thread
.. code-block:: python
from pwn import *
context.arch = 'amd64'
Which sets up everything in the exploit for exploiting a 64-bit Intel binary.
The recommended method is to use ``context.binary`` to automagically set all of the appropriate values.
.. code-block:: python
from pwn import *
context.binary = './challenge-binary'
Module Members
----------------------------------------------------
.. automodule:: pwnlib.context
:members:
+11 -3
View File
@@ -3,8 +3,16 @@
from pwnlib.elf import *
from pwnlib.util.misc import which
:mod:`pwnlib.elf` --- Working with ELF binaries
===============================================
:mod:`pwnlib.elf` --- ELF Executables and Libraries
===================================================
.. automodule:: pwnlib.elf
:members:
ELF Modules
-------------------
.. toctree::
elf/elf
elf/config
elf/corefile
+10
View File
@@ -0,0 +1,10 @@
.. testsetup:: *
from pwn import *
from pwnlib.elf.config import parse_kconfig
:mod:`pwnlib.elf.config` --- Kernel Config Parsing
===========================================================
.. automodule:: pwnlib.elf.config
:members:
+15
View File
@@ -0,0 +1,15 @@
.. testsetup:: *
from pwn import *
:mod:`pwnlib.elf.corefile` --- Core Files
===========================================================
.. automodule:: pwnlib.elf.corefile
.. autoclass:: pwnlib.elf.corefile.Corefile
:members:
:show-inheritance:
.. autoclass:: pwnlib.elf.corefile.Mapping
:members:
+28
View File
@@ -0,0 +1,28 @@
.. testsetup:: *
from pwn import *
from glob import glob
:mod:`pwnlib.elf.elf` --- ELF Files
===========================================================
.. automodule:: pwnlib.elf.elf
.. autoclass:: pwnlib.elf.elf.ELF
:members:
:show-inheritance:
:inherited-members:
:exclude-members: address_offsets,
get_data,
get_dwarf_info,
get_section,
get_segment,
has_dwarf_info,
iter_sections,
iter_segments
.. autoclass:: pwnlib.elf.elf.Function
:members:
.. autoclass:: pwnlib.elf.elf.dotdict
:members:
+25
View File
@@ -0,0 +1,25 @@
.. testsetup:: *
from pwn import *
:mod:`pwnlib.encoders` --- Encoding Shellcode
===============================================
.. automodule:: pwnlib.encoders
:members:
.. automodule:: pwnlib.encoders.encoder
:members:
.. automodule:: pwnlib.encoders.amd64
:members:
.. automodule:: pwnlib.encoders.arm
:members:
.. automodule:: pwnlib.encoders.i386
:members:
.. automodule:: pwnlib.encoders.i386.xor
:members:
+10
View File
@@ -0,0 +1,10 @@
.. testsetup:: *
from pwn import *
:mod:`pwnlib.flag` --- CTF Flag Management
==========================================
.. automodule:: pwnlib.flag
:members:
+10
View File
@@ -0,0 +1,10 @@
.. testsetup:: *
from pwn import *
import tempfile
:mod:`pwnlib.fmtstr` --- Format string bug exploitation tools
=============================================================
.. automodule:: pwnlib.fmtstr
:members:
+4
View File
@@ -1,3 +1,7 @@
.. testsetup:: *
from pwn import *
:mod:`pwnlib.gdb` --- Working with GDB
======================================
+6 -6
View File
@@ -13,11 +13,11 @@ Which imports a bazillion things into the global namespace to make your life eas
This is a quick list of most of the objects and routines imported, in rough order of importance and frequency of use.
- ``context``
- :obj:`.context`
- :data:`pwnlib.context.context`
- Responsible for most of the pwntools convenience settings
- Set `context.log_level = 'debug'` when troubleshooting your exploit
- Scope-aware, so you can disable logging for a subsection of code via ``pwnlib.context.ContextType.local``
- Scope-aware, so you can disable logging for a subsection of code via :meth:`.ContextType.local`
- ``remote``, ``listen``, ``ssh``, ``process``
- :mod:`pwnlib.tubes`
- Super convenient wrappers around all of the common functionality for CTF challenges
@@ -57,11 +57,11 @@ This is a quick list of most of the objects and routines imported, in rough orde
- ``gdb.debug`` and ``gdb.attach``
- :mod:`pwnlib.gdb`
- Launch a binary under GDB and pop up a new terminal to interact with it. Automates setting breakpoints and makes iteration on exploits MUCH faster.
- Alternately, attach to a running process given a PID, ``pwnlib.tubes`` object, or even just a socket that's connected to it
- Alternately, attach to a running process given a PID, :mod:`pwnlib.tubes` object, or even just a socket that's connected to it
- ``args``
- Dictionary contining all-caps command-line arguments for quick access
- Dictionary containing all-caps command-line arguments for quick access
- Run via ``python foo.py REMOTE=1`` and ``args['REMOTE'] == '1'``.
- Can also control logging verbosity and terminal fancyness
- Can also control logging verbosity and terminal fanciness
- `NOTERM`
- `SILENT`
- `DEBUG`
@@ -78,7 +78,7 @@ This is a quick list of most of the objects and routines imported, in rough orde
- It's the new ``getch``
- ``safeeval``
- :mod:`pwnlib.util.safeeval`
- Functions for safely evalutaing python code without nasty side-effects.
- Functions for safely evaluating python code without nasty side-effects.
These are all pretty self explanatory, but are useful to have in the global namespace.
+30
View File
@@ -5,6 +5,20 @@ pwntools
Written in Python, it is designed for rapid prototyping and development,
and intended to make exploit writing as simple as possible.
The primary location for this documentation is at docs.pwntools.com_, which uses
readthedocs_. It comes in three primary flavors:
- Stable_
- Beta_
- Dev_
.. _readthedocs: https://readthedocs.org
.. _docs.pwntools.com: https://docs.pwntools.com
.. _Stable: https://docs.pwntools.com/en/stable
.. _Beta: https://docs.pwntools.com/en/beta
.. _Dev: https://docs.pwntools.com/en/dev
Getting Started
---------------
@@ -28,19 +42,29 @@ Each of the ``pwntools`` modules is documented here.
:maxdepth: 1
:glob:
adb
args
asm
atexception
atexit
constants
config
context
dynelf
encoders
elf
exception
flag
fmtstr
gdb
libcdb
log
memleak
protocols
replacements
rop
rop/*
runner
shellcraft
shellcraft/*
term
@@ -48,9 +72,15 @@ Each of the ``pwntools`` modules is documented here.
tubes
tubes/*
ui
update
useragents
util/*
.. toctree::
:hidden:
testexample
.. only:: not dash
Indices and tables
+9 -7
View File
@@ -20,21 +20,23 @@ following system libraries installed.
Released Version
-----------------
Pwntools is available as a ``pip`` package.
pwntools is available as a ``pip`` package.
.. code-block:: bash
$ apt-get install python2.7 python2.7-dev python-pip
$ pip install pwntools
$ apt-get update
$ apt-get install python2.7 python-pip python-dev git libssl-dev libffi-dev build-essential
$ pip install --upgrade pip
$ pip install --upgrade pwntools
Latest Version
Development
--------------
Alternatively if you prefer to use the latest version from the
repository, pip can install directly from github.
If you are hacking on Pwntools locally, you'll want to do something like this:
.. code-block:: bash
$ pip install git+https://github.com/Gallopsled/pwntools#egg=pwntools
$ git clone https://github.com/Gallopsled/pwntools
$ pip install --upgrade --editable ./pwntools
.. _Ubuntu: https://launchpad.net/~pwntools/+archive/ubuntu/binutils
+5 -4
View File
@@ -11,7 +11,10 @@ Building `binutils` from source takes about 60 seconds on a modern 8-core machin
Ubuntu
^^^^^^^^^^^^^^^^
First, add our `Personal Package Archive repository <http://binutils.pwntools.com>`__.
For Ubuntu 12.04 through 15.10, you must first add the pwntools `Personal Package Archive repository <http://binutils.pwntools.com>`__.
Ubuntu Xenial (16.04) has official packages for most architectures, and does not require this step.
.. code-block:: bash
@@ -58,8 +61,6 @@ OSes, ``binutils`` is simple to build by hand.
gpg --keyserver keys.gnupg.net --recv-keys 4AE55E93
gpg --verify binutils-$V.tar.gz.sig
rm -rf binutils-*
tar xf binutils-$V.tar.gz
mkdir binutils-build
@@ -79,6 +80,6 @@ OSes, ``binutils`` is simple to build by hand.
MAKE=gmake
hash gmake || MAKE=make
$MAKE -j
$MAKE -j clean all
sudo $MAKE install
+7 -7
View File
@@ -67,12 +67,12 @@ actually **interact** with processes.
There's even an SSH module for when you've got to SSH into a box to perform
a local/setuid exploit with :mod:`pwnlib.tubes.ssh`. You can quickly spawn
processes and grab the output, or spawn a process and interact iwth it like
processes and grab the output, or spawn a process and interact with it like
a ``process`` tube.
::
>>> shell = ssh('bandit0', 'bandit.labs.overthewire.org', password='bandit0')
>>> shell = ssh('bandit0', 'bandit.labs.overthewire.org', password='bandit0', port=2220)
>>> shell['whoami']
'bandit0'
>>> shell.download_file('/etc/motd')
@@ -170,14 +170,14 @@ But if you do, it's easy to suss out!
5: eb f9 jmp 0x0
However, you shouldn't even need to write your own shellcode most of the
time! Pwntools comes with the :mod:`pwnlib.shellcraft` module, which is
time! pwntools comes with the :mod:`pwnlib.shellcraft` module, which is
loaded with useful time-saving shellcodes.
Let's say that we want to `setreuid(getuid(), getuid())` followed by `dup`ing
file descriptor 4 to `stdin`, `stdout`, and `stderr`, and then pop a shell!
>>> asm(shellcraft.setreuid() + shellcraft.dupsh(4)).encode('hex')
'6a3158cd8089c389d96a4658cd806a045b6a0359496a3f58cd8075f86a68682f2f2f73682f62696e89e331c96a0b5899cd80'
>>> asm(shellcraft.setreuid() + shellcraft.dupsh(4)).encode('hex') # doctest: +ELLIPSIS
'6a3158cd80...'
Misc Tools
@@ -212,8 +212,8 @@ Stop hard-coding things! Look them up at runtime with :mod:`pwnlib.elf`.
You can even patch and save the files.
>>> e = ELF('/bin/cat')
>>> e.read(e.address+1, 3)
'ELF'
>>> e.read(e.address, 4)
'\x7fELF'
>>> e.asm(e.address, 'ret')
>>> e.save('/tmp/quiet-cat')
>>> disasm(file('/tmp/quiet-cat','rb').read(1))
+10
View File
@@ -0,0 +1,10 @@
.. testsetup:: *
from pwn import *
from pwnlib.libcdb import *
:mod:`pwnlib.libcdb` --- Libc Database
===========================================
.. automodule:: pwnlib.libcdb
:members:
+3 -5
View File
@@ -1,11 +1,9 @@
.. testsetup:: *
from pwnlib.memleak import *
from pwn import *
:mod:`pwnlib.memleak` --- Helper class for leaking memory
=========================================================
.. module:: pwnlib.memleak
.. autoclass:: MemLeak
:members:
.. automodule:: pwnlib.memleak
:members:
+15
View File
@@ -0,0 +1,15 @@
:mod:`pwnlib.protocols` --- Wire Protocols
=============================================
.. automodule:: pwnlib.protocols
Supported Protocols
-------------------
.. toctree::
:maxdepth: 3
:glob:
protocols/*
+10
View File
@@ -0,0 +1,10 @@
.. testsetup:: *
from pwn import *
from pwnlib.protocols.adb import AdbClient
:mod:`pwnlib.protocols.adb` --- ADB Protocol Implementation
===========================================================
.. automodule:: pwnlib.protocols.adb
:members:
+8 -5
View File
@@ -1,11 +1,14 @@
.. testsetup:: *
from pwnlib.elf import *
from pwnlib.rop import *
from pwnlib.util.misc import which
from pwn import *
:mod:`pwnlib.rop` --- Return Oriented Programming
=================================================
.. automodule:: pwnlib.rop
:members:
Submodules
----------
.. toctree::
:glob:
rop/*
+9
View File
@@ -0,0 +1,9 @@
.. testsetup:: *
from pwn import *
:mod:`pwnlib.rop.rop` --- Return Oriented Programming
==========================================================
.. automodule:: pwnlib.rop.rop
:members:
+9
View File
@@ -0,0 +1,9 @@
.. testsetup:: *
from pwn import *
:mod:`pwnlib.rop.srop` --- Sigreturn Oriented Programming
==========================================================
.. automodule:: pwnlib.rop.srop
:members:
+9
View File
@@ -0,0 +1,9 @@
.. testsetup:: *
from pwn import *
:mod:`pwnlib.runner` --- Running Shellcode
===========================================
.. automodule:: pwnlib.runner
:members:
+19
View File
@@ -0,0 +1,19 @@
.. testsetup:: *
from pwn import *
context.clear(arch='aarch64')
:mod:`pwnlib.shellcraft.aarch64` --- Shellcode for AArch64
===========================================================
:mod:`pwnlib.shellcraft.aarch64`
--------------------------------
.. automodule:: pwnlib.shellcraft.aarch64
:members:
:mod:`pwnlib.shellcraft.aarch64.linux`
--------------------------------------
.. automodule:: pwnlib.shellcraft.aarch64.linux
:members:
+1
View File
@@ -1,6 +1,7 @@
.. testsetup:: *
from pwn import *
context.clear(arch='amd64')
:mod:`pwnlib.shellcraft.amd64` --- Shellcode for AMD64
===========================================================
+1
View File
@@ -1,6 +1,7 @@
.. testsetup:: *
from pwn import *
context.clear(arch='arm')
:mod:`pwnlib.shellcraft.arm` --- Shellcode for ARM
===========================================================
+1
View File
@@ -1,6 +1,7 @@
.. testsetup:: *
from pwn import *
context.clear(arch='i386')
:mod:`pwnlib.shellcraft.i386` --- Shellcode for Intel 80386
===========================================================
+19
View File
@@ -0,0 +1,19 @@
.. testsetup:: *
from pwn import *
context.clear(arch='mips')
:mod:`pwnlib.shellcraft.mips` --- Shellcode for MIPS
===========================================================
:mod:`pwnlib.shellcraft.mips`
-----------------------------
.. automodule:: pwnlib.shellcraft.mips
:members:
:mod:`pwnlib.shellcraft.mips.linux`
-----------------------------------
.. automodule:: pwnlib.shellcraft.mips.linux
:members:
+1
View File
@@ -1,6 +1,7 @@
.. testsetup:: *
from pwn import *
context.clear(arch='thumb')
:mod:`pwnlib.shellcraft.thumb` --- Shellcode for Thumb Mode
===========================================================
+10
View File
@@ -0,0 +1,10 @@
.. testsetup:: *
import os
from pwnlib.testexample import add
:mod:`pwnlib.testexample` --- Example Test Module
==================================================
.. automodule:: pwnlib.testexample
:members:
+1 -1
View File
@@ -5,7 +5,7 @@
import time
:mod:`pwnlib.timeout` --- Timeout handling
========================================
============================================
.. automodule:: pwnlib.timeout
:members:
+1 -1
View File
@@ -27,4 +27,4 @@ Types of Tubes
.. autoclass:: pwnlib.tubes.tube.tube()
:members:
:exclude-members: recv_raw, send_raw, settimeout_raw,
can_recv_raw
can_recv_raw, shutdown_raw, connected_raw,
+1 -1
View File
@@ -8,5 +8,5 @@
.. automodule:: pwnlib.tubes.process
.. autoclass:: pwnlib.tubes.process.process
:members: kill, poll, communicate
:members:
:show-inheritance:
+10
View File
@@ -0,0 +1,10 @@
.. testsetup:: *
from pwn import *
from pwnlib.update import *
:mod:`pwnlib.update` --- Updating Pwntools
===================================================
.. automodule:: pwnlib.update
:members:
+2 -1
View File
@@ -1,6 +1,7 @@
.. testsetup:: *
from pwnlib.util.fiddling import *
from pwn import *
from pwnlib.util.fiddling import *
:mod:`pwnlib.util.fiddling` --- Utilities bit fiddling
+1
View File
@@ -1,6 +1,7 @@
.. testsetup:: *
from pwnlib.util.safeeval import *
_get_opcodes = pwnlib.util.safeeval._get_opcodes
:mod:`pwnlib.util.safeeval` --- Safe evaluation of python code
+10
View File
@@ -0,0 +1,10 @@
.. testsetup:: *
from pwn import *
test = pwnlib.util.sh_string.test
:mod:`pwnlib.util.sh_string` --- Shell Expansion is Hard
===============================================================
.. automodule:: pwnlib.util.sh_string
:members:
+1 -1
View File
@@ -4,7 +4,7 @@ the pwntools project.
We have a plan to create a separate repository with examples, primarily
exploits. Until we do so, we recommend new users to look at
https://pwntools.readthedocs.org, as this is a better overview of our features.
https://docs.pwntools.com, as this is a better overview of our features.
In no particular order the docstrings for each example:
+22
View File
@@ -0,0 +1,22 @@
from pwn import *
# Tell pwntools that the target is an Android device
context.os='android'
context.arch='aarch64' # or 'arm'
# Optionally, set the remote ADB server address
context.adb_host='172.16.110.1'
# Wait for a device to become available
print adb.wait_for_device()
# Who am I?
print adb.process('id').recvall().strip()
# Interactive sessions!
io = adb.shell()
io.sendline('echo Hello, world; exit')
print io.recvall().replace('\r\n', '\n').strip()
# Debugging!
gdb.debug('sh').interactive()
+1
View File
@@ -3,6 +3,7 @@ Example showing the interface to `pwnlib.asm.asm` and `pwnlib.shellcraft`.
"""
from pwn import *
context(arch='i386', os='linux')
shellcode = shellcraft.i386_to_amd64()
-1
View File
@@ -26,4 +26,3 @@ atexit.register(r.clean_and_log)
while True:
line = r.recvline()
print re.findall('^prefix (\S+)$', line)[0]
+2 -1
View File
@@ -4,13 +4,14 @@ Script to generate README.md
from pwn import *
out = '''# Examples
While these examples should all work, they are not very representative of
the pwntools project.
We have a plan to create a separate repository with examples, primarily
exploits. Until we do so, we recommend new users to look at
https://pwntools.readthedocs.org, as this is a better overview of our features.
https://docs.pwntools.com, as this is a better overview of our features.
In no particular order the docstrings for each example:
+2 -2
View File
@@ -5,8 +5,8 @@ off some proof-of-concepts.
"""
from pwn import *
from pwnlib.term.completer import LongestPrefixCompleter, \
PathCompleter
from pwnlib.term.completer import LongestPrefixCompleter
from pwnlib.term.completer import PathCompleter
c1 = LongestPrefixCompleter([
'foobar',
+2 -1
View File
@@ -3,9 +3,10 @@ Simple example showing how to use the remote
gdb debugging features available in pwntools.
"""
from pwn import *
import getpass
from pwn import *
s = ssh(getpass.getuser(), '127.0.0.1', port = 22, keyfile = "~/.ssh/id_rsa")
c = gdb.ssh_gdb(s, '/bin/sh', execute = '''
p/x $pc
+31
View File
@@ -0,0 +1,31 @@
from pwn import *
context.arch='aarch64'
frame = SigreturnFrame()
registers = ['x%i' % i for i in range(0, 31)]
registers += ['sp', 'pc']
for index, register in enumerate(registers):
setattr(frame, register, index)
assembly = '\n'.join([
shellcraft.read(constants.STDIN_FILENO, 'sp', 1024),
shellcraft.syscall(constants.SYS_rt_sigreturn)
])
binary = ELF.from_assembly(assembly)
io = binary.process()
io.flat(frame)
io.wait()
assert io.poll() == -11
corefile = io.corefile
for index, register in enumerate(registers):
value = getattr(corefile, register)
if index != value:
log.error("%s != %i (%i)" % (register, index, value))
else:
log.success("%s == %i" % (register, value))
+32
View File
@@ -0,0 +1,32 @@
from pwn import *
context.arch='amd64'
frame = SigreturnFrame()
registers = ['rax', 'rbx', 'rcx', 'rdx',
'rdi', 'rsi', 'rbp', 'rsp',
'rip',
'r8', 'r9', 'r10', 'r11', 'r12', 'r13', 'r14', 'r15']
for index, register in enumerate(registers):
setattr(frame, register, index)
assembly = '\n'.join([
shellcraft.read(constants.STDIN_FILENO, 'rsp', 1024),
shellcraft.sigreturn()
])
binary = ELF.from_assembly(assembly)
io = binary.process()
io.flat(frame)
io.wait()
assert io.poll() == -11
corefile = io.corefile
for index, register in enumerate(registers):
value = getattr(corefile, register)
if index != value:
log.error("%s != %i (%i)" % (register, index, value))
else:
log.success("%s == %i" % (register, value))
+32
View File
@@ -0,0 +1,32 @@
from pwn import *
context.arch='arm'
frame = SigreturnFrame()
registers = ['r0', 'r1', 'r2', 'r3', 'r4', 'r5', 'r6', 'r7',
'r8', 'r9', 'r10', 'fp', 'ip', 'sp', 'pc', 'lr']
for index, register in enumerate(registers):
setattr(frame, register, index)
assembly = '\n'.join([
shellcraft.read(constants.STDIN_FILENO, 'sp', 1024),
shellcraft.sigreturn()
])
binary = ELF.from_assembly(assembly)
io = binary.process()
io.flat(frame)
io.wait()
assert io.poll() == -11
corefile = io.corefile
for index, register in enumerate(registers):
value = getattr(corefile, register)
if index != value:
log.error("%s != %i (%i)" % (register, index, value))
else:
log.success("%s == %i" % (register, value))
+31
View File
@@ -0,0 +1,31 @@
from pwn import *
context.kernel='amd64'
frame = SigreturnFrame()
registers = ['eax', 'ebx', 'ecx', 'edx',
'edi', 'esi', 'ebp', 'esp',
'eip']
for index, register in enumerate(registers):
setattr(frame, register, index)
assembly = '\n'.join([
shellcraft.read(constants.STDIN_FILENO, 'esp', 1024),
shellcraft.sigreturn()
])
binary = ELF.from_assembly(assembly)
io = binary.process()
io.flat(frame)
io.wait()
assert io.poll() == -11
corefile = io.corefile
for index, register in enumerate(registers):
value = getattr(corefile, register)
if index != value:
log.error("%s != %i (%i)" % (register, index, value))
else:
log.success("%s == %i" % (register, value))
+1 -1
View File
@@ -4,7 +4,7 @@ Example showing how to use the ssh class.
from pwn import *
shell = ssh(host='bandit.labs.overthewire.org',user='bandit0',password='bandit0')
shell = ssh(host='bandit.labs.overthewire.org',user='bandit0',password='bandit0', port=2220)
# Show basic command syntax
log.info("username: %s" % shell.whoami())
+3 -1
View File
@@ -1,5 +1,6 @@
#!/usr/bin/env bash
# cache list of shellcodes
_shellcraft_shellcodes=$(shellcraft)
_shellcraft_shellcodes=$(pwn shellcraft -l)
_shellcraft()
{
@@ -43,4 +44,5 @@ _shellcraft()
COMPREPLY=( $(compgen -W "${_shellcraft_shellcodes}" -- ${cur}) )
}
complete -F _shellcraft pwn shellcraft
complete -F _shellcraft shellcraft
+13
View File
@@ -0,0 +1,13 @@
subdirs=xenial stable $(wildcard */)
makefiles=$(wildcard */Makefile)
tags=base stable beta dev
all: $(makefiles) $(subdirs)
$(subdirs):
docker build -t pwntools/pwntools:$(shell basename $(@)) "$@"
$(makefiles):
make -C $(shell dirname $@)
.PHONY: all $(subdirs) $(makefiles)
+1
View File
@@ -0,0 +1 @@
xenial
+6
View File
@@ -0,0 +1,6 @@
FROM pwntools/pwntools:stable
USER root
RUN pip install --upgrade git+https://github.com/Gallopsled/pwntools@beta
RUN PWNLIB_NOTERM=1 pwn update
USER pwntools
+6
View File
@@ -0,0 +1,6 @@
FROM pwntools/pwntools:stable
USER root
RUN pip install --upgrade git+https://github.com/Gallopsled/pwntools@dev
RUN PWNLIB_NOTERM=1 pwn update
USER pwntools
+26
View File
@@ -0,0 +1,26 @@
############################################################
# Dockerfile to build Pwntools container
# Based on Ubuntu
############################################################
FROM kalilinux/kali-linux-docker
MAINTAINER Maintainer Gallopsled et al.
RUN apt-get update
RUN apt-get install -y build-essential
RUN apt-get install -y git
RUN apt-get install -y libssl-dev
RUN apt-get install -y libffi-dev
RUN apt-get install -y python2.7
RUN apt-get install -y python-pip
RUN apt-get install -y python-dev
RUN pip install --upgrade pip
RUN python -m pip install --upgrade pwntools
RUN PWNLIB_NOTERM=1 pwn update
RUN apt-get install -y sudo
RUN useradd -m pwntools
RUN passwd --delete --unlock pwntools
RUN echo "pwntools ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/pwntools
USER pwntools
WORKDIR /home/pwntools
+8
View File
@@ -0,0 +1,8 @@
all: Dockerfile
Dockerfile: ../xenial/Dockerfile FORCE
sed "s|ubuntu:xenial|kalilinux/kali-linux-docker|" < "$<" > "$@"
FORCE:
.PHONY: all
+26
View File
@@ -0,0 +1,26 @@
############################################################
# Dockerfile to build Pwntools container
# Based on Ubuntu
############################################################
FROM ubuntu:precise
MAINTAINER Maintainer Gallopsled et al.
RUN apt-get update
RUN apt-get install -y build-essential
RUN apt-get install -y git
RUN apt-get install -y libssl-dev
RUN apt-get install -y libffi-dev
RUN apt-get install -y python2.7
RUN apt-get install -y python-pip
RUN apt-get install -y python-dev
RUN pip install --upgrade pip
RUN python -m pip install --upgrade pwntools
RUN PWNLIB_NOTERM=1 pwn update
RUN apt-get install -y sudo
RUN useradd -m pwntools
RUN passwd --delete --unlock pwntools
RUN echo "pwntools ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/pwntools
USER pwntools
WORKDIR /home/pwntools
+8
View File
@@ -0,0 +1,8 @@
all: Dockerfile
Dockerfile: ../xenial/Dockerfile FORCE
sed "s|ubuntu:xenial|ubuntu:precise|" < "$<" > "$@"
FORCE:
.PHONY: all
+6
View File
@@ -0,0 +1,6 @@
FROM pwntools/pwntools:base
USER root
RUN pip install --upgrade git+https://github.com/Gallopsled/pwntools@stable
RUN PWNLIB_NOTERM=1 pwn update
USER pwntools
+26
View File
@@ -0,0 +1,26 @@
############################################################
# Dockerfile to build Pwntools container
# Based on Ubuntu
############################################################
FROM ubuntu:trusty
MAINTAINER Maintainer Gallopsled et al.
RUN apt-get update
RUN apt-get install -y build-essential
RUN apt-get install -y git
RUN apt-get install -y libssl-dev
RUN apt-get install -y libffi-dev
RUN apt-get install -y python2.7
RUN apt-get install -y python-pip
RUN apt-get install -y python-dev
RUN pip install --upgrade pip
RUN python -m pip install --upgrade pwntools
RUN PWNLIB_NOTERM=1 pwn update
RUN apt-get install -y sudo
RUN useradd -m pwntools
RUN passwd --delete --unlock pwntools
RUN echo "pwntools ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/pwntools
USER pwntools
WORKDIR /home/pwntools
+8
View File
@@ -0,0 +1,8 @@
all: Dockerfile
Dockerfile: ../xenial/Dockerfile FORCE
sed "s|ubuntu:xenial|ubuntu:trusty|" < "$<" > "$@"
FORCE:
.PHONY: all
+26
View File
@@ -0,0 +1,26 @@
############################################################
# Dockerfile to build Pwntools container
# Based on Ubuntu
############################################################
FROM ubuntu:xenial
MAINTAINER Maintainer Gallopsled et al.
RUN apt-get update
RUN apt-get install -y build-essential
RUN apt-get install -y git
RUN apt-get install -y libssl-dev
RUN apt-get install -y libffi-dev
RUN apt-get install -y python2.7
RUN apt-get install -y python-pip
RUN apt-get install -y python-dev
RUN pip install --upgrade pip
RUN python -m pip install --upgrade pwntools
RUN PWNLIB_NOTERM=1 pwn update
RUN apt-get install -y sudo
RUN useradd -m pwntools
RUN passwd --delete --unlock pwntools
RUN echo "pwntools ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/pwntools
USER pwntools
WORKDIR /home/pwntools
+19
View File
@@ -0,0 +1,19 @@
# Pwntools Mako Assembly Syntax Highlighting
This should work for TextMate and anything that's compatible (e.g. Sublime Text).
![screenshot](screenshot.png)
## Installation
### Sublime Text
Copy the `tmLanguage` files into the `Packages/User` folder in your Sublime Text configuration folder.
These folders are located at the paths shown below. Replace `2` with `3` if you're a ST3 user.
- OS X: `~/Library/Application Support/Sublime Text 2`
- Windows: `%APPDATA%\Sublime Text 2`
- Linux: `~/.config/sublime-text-2`
Open a `.asm` file, and choose `View > Syntax > Open All ... > Pwntools ...`.
+209
View File
@@ -0,0 +1,209 @@
# [PackageDev] target_format: plist, ext: tmLanguage
---
name: Pwntools Mako ASM
scopeName: source.pwntools
fileTypes: ['.asm']
uuid: 19bbf78d-4ad8-4385-bb20-5bde8df453bf
patterns:
- comment: x86 instruction
name: support.function.mnemonic.x86.all
match: \b(?i)(v)?(aaa|aad|aam|aas|adc|add|addpd|addps|addsd|addss|addsubpd|addsubps|aesdec|aesdeclast|aesenc|aesenclast|aesimc|aeskeygenassist|and|andpd|andps|andnpd|andnps|arpl|blendpd|bmi|blendps|blendvpd|blendvps|bound|bsf|bsr|bswap|bt|btc|btr|bts|cbw|cwde|cdqe|clc|cld|cflush|clts|cmc|cmov(n?e|ge?|ae?|le?|be?|n?o|n?z)|cmp|cmppd|cmpps|cmps|cnpsb|cmpsw|cmpsd|cmpsq|cmpss|cmpxchg|cmpxchg8b|cmpxchg16b|comisd|comiss|cpuid|crc32|cvtdq2pd|cvtdq2ps|cvtpd2dq|cvtpd2pi|cvtpd2ps|cvtpi2pd|cvtpi2ps|cvtps2dq|cvtps2pd|cvtps2pi|cvtsd2si|cvtsd2ss|cvts2sd|cvtsi2ss|cvtss2sd|cvtss2si|cvttpd2dq|cvtpd2pi|cvttps2dq|cvttps2pi|cvttps2dq|cvttps2pi|cvttsd2si|cvttss2si|cwd|cdq|cqo|daa|das|dec|div|divpd|divps|divsd|divss|dppd|dpps|emms|enter|extractps|f2xm1|fabs|fadd|faddp|fiadd|fbld|fbstp|fchs|fclex|fnclex|fcmov(n?e|ge?|ae?|le?|be?|n?o|n?z)|fcom|fcmop|fcompp|fcomi|fcomip|fucomi|fucomip|fcos|fdecstp|fdiv|fdivp|fidiv|fdivr|fdivrp|fidivr|ffree|ficom|ficomp|fild|fincstp|finit|fnint|fist|fistp|fisttp|fld|fld1|fldl2t|fldl2e|fldpi|fldlg2|fldln2|fldz|fldcw|fldenv|fmul|fmulp|fimul|fnop|fpatan|fprem|fprem1|fptan|frndint|frstor|fsave|fnsave|fscale|fsin|fsincos|fsqrt|fst|fstp|fstcw|fnstcw|fstenv|fnstenv|fsts(w?)|fnstsw|fsub|fsubp|fisub|fsubr|fsubrp|fisubr|ftst|fucom|fucomp|fucompp|fxam|fxch|fxrstor|fxsave|fxtract|fyl2x|fyl2xp1|haddpd|haddps|husbpd|hsubps|idiv|imul|in|inc|ins|insb|insw|insd|insertps|int|into|invd|invplg|invpcid|iret|iretd|iretq|lahf|lar|lddqu|ldmxcsr|lds|les|lfs|lgs|lss|lea|leave|lfence|lgdt|lidt|llgdt|lmsw|lock|lods|lodsb|lodsw|lodsd|lodsq|lsl|ltr|maskmovdqu|maskmovq|maxpd|maxps|maxsd|maxss|mfence|minpd|minps|minsd|minss|monitor|mov|movapd|movaps|movbe|movd|movq|movddup|movdqa|movdqu|movq2q|movhlps|movhpd|movhps|movlhps|movlpd|movlps|movmskpd|movmskps|movntdqa|movntdq|movnti|movntpd|movntps|movntq|movq|movq2dq|movs|movsb|movsw|movsd|movsq|movsd|movshdup|movsldup|movss|movsx|movsxd|movupd|movups|movzx|mpsadbw|mul|mulpd|mulps|mulsd|mulss|mwait|neg|not|or|orpd|orps|out|outs|outsb|outsw|outsd|pabsb|pabsw|pabsd|packsswb|packssdw|packusdw|packuswbpaddb|paddw|paddd|paddq|paddsb|paddsw|paddusb|paddusw|palignr|pand|pandn|pause|pavgb|pavgw|pblendvb|pblendw|pclmulqdq|pcmpeqb|pcmpeqw|pcmpeqd|pcmpeqq|pcmpestri|pcmpestrm|pcmptb|pcmptgw|pcmpgtd|pcmpgtq|pcmpistri|pcmpisrm|pdep|pext|pextrb|pextrd|pextrq|pextrw|phaddw|phaddd|phaddsw|phinposuw|phsubw|phsubd|phsubsw|pinsrb|pinsrd|pinsrq|pinsrw|pmaddubsw|pmadddwd|pmaxsb|pmaxsd|pmaxsw|pmaxsw|pmaxub|pmaxud|pmaxuw|pminsb|pminsd|pminsw|pminub|pminud|pminuw|pmovmskb|pmovsx|pmovzx|pmuldq|pmulhrsw|pmulhuw|pmulhw|pmulld|pmullw|pmuludw|pop|popa|popad|popcnt|popf|popfd|popfq|por|prefetch|psadbw|pshufb|pshufd|pshufhw|pshuflw|pshufw|psignb|psignw|psignd|pslldq|psllw|pslld|psllq|psraw|psrad|psrldq|psrlw|psrld|psrlq|psubb|psubw|psubd|psubq|psubsb|psubsw|psubusb|psubusw|test|ptest|punpckhbw|punpckhwd|punpckhdq|punpckhddq|punpcklbw|punpcklwd|punpckldq|punpckldqd|push|pusha|pushad|pushf|pushfd|pxor|prcl|rcr|rol|ror|rcpps|rcpss|rdfsbase|rdgsbase|rdmsr|rdpmc|rdrand|rdtsc|rdtscp|rep|repe|repz|repne|repnz|roundpd|roundps|roundsd|roundss|rsm|rsqrps|rsqrtss|sahf|sal|sar|shl|shr|sbb|scas|scasb|scasw|scasd|set(n?e|ge?|ae?|le?|be?|n?o|n?z)|sfence|sgdt|shld|shrd|shufpd|shufps|sidt|sldt|smsw|sqrtpd|sqrtps|sqrtsd|sqrtss|stc|std|stmxcsr|stos|stosb|stosw|stosd|stosq|str|sub|subpd|subps|subsd|subss|swapgs|syscall|sysenter|sysexit|sysret|teset|ucomisd|ucomiss|ud2|unpckhpd|unpckhps|unpcklpd|unpcklps|vbroadcast|vcvtph2ps|vcvtp2sph|verr|verw|vextractf128|vinsertf128|vmaskmov|vpermilpd|vpermilps|vperm2f128|vtestpd|vzeroall|vzeroupper|wait|fwait|wbinvd|wrfsbase|wrgsbase|wrmsr|xadd|xchg|xgetbv|xlat|xlatb|xor|xorpd|xorps|xrstor|xsave|xsaveopt|xsetbv|lzcnt|extrq|insertq|movntsd|movntss|vfmaddpd|vfmaddps|vfmaddsd|vfmaddss|vfmaddsubbpd|vfmaddsubps|vfmsubaddpd|vfmsubaddps|vfmsubpd|vfmsubps|vfmsubsd|vfnmaddpd|vfnmaddps|vfnmaddsd|vfnmaddss|vfnmsubpd|vfnmusbps|vfnmusbsd|vfnmusbss|vbroadcastss|vbroadcastsd|vbroadcastf128|vmaskmovps|vmaskmovpd|cvt|xor|cli|sti|hlt|nop|lock|wait|enter|leave|ret|loop(n?e|n?z)?|call|j(mp|n?e|n?ge?|n?ae?|le?|be?|n?o|n?z|n?c|n?p|n?b))\b
- comment: ARM instruction
name: support.function.mnemonic.arm.arithmetic
match: >
(?x)\b((?i)
( (bf(c|i)|(u|s)bfx|(u|s)xta?(h|b)?)
| (v(add|cvt|sub|mov|trn|cmp|div|qdmulh|mrs|mul|ld1|qadd|qshrun|st[1234]|addw|mull|mlal|rshrn|swp|qmovun)|qmovun)(\.([isup]?8|[isupf]?16|[isuf]?32|[isu]?64))*
| (mul|mla|mull|smlabb)
| (mov(w|t))
| rev(8|16)?
| (pld|adr|adrl|vswp)
| bkpt
)?(?-i))?\b
- comment: ARM instruction
name: support.function.mnemonic.arm.memory
match: >
(?x)\b((?i)(
swi|svc|wfi|
dmb | clrex | dsb | isb |
v(ldr|str|push|pop) |
(push|pop) |
(st|ld)(
p |
r(ex|s?(h|b)|d)? |
m(
(f|e)(d|a) |
(d|i)(b|a)
)?
) |
b(l|x|lx|lr|r)? |
(i|e)?ret|
b\.(eq|ne|hs|cs|lo|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|nv)+ |
(c|t)?bn?z|
)+(ne|eq|cs|hs|cc|lo|mi|pl|vs|vc|hi|ls|lt|le|gt|ge|al)?(?-i))\b
- comment: ARM instruction
name: meta.preprocessor.c.include
match: >
\b((?i)(def(b|w|s)|equ|(include|get)(\s+([a-zA-Z_]+[0-9a-zA-Z_]*|[0-9]+[a-zA-Z_]+[0-9a-zA-Z_]*?)\.s)?)?(?-i))\b
- comment: ARM instruction
name: comment.nop
match: >
\b((?i)nop(ne|eq|cs|hs|cc|lo|mi|pl|vs|vc|hi|ls|lt|le|gt|ge|al)?(?-i))?\b
- comment: Comment Block
begin: /\*
end: \*/
name: comment.block
- comment: Directive
name: keyword.control.directive
match: \.(?i)(globl|global|macro|endm|purgem|if|elseif|else|endif|section|text|arm|align|balign|irp|rept|endr|req|unreq|error|short|func|endfunc|hidden|type|fpu|arch|code|altmacro|object_arch|word|int|string)(?-i)\b
- comment: ARM register
name: storage.other.register.arm
match: \b((?i)\$?([xw][0-9]|[xw]1[0-9]||[xw]2[0-9]|[wx]30|wzr|xzr|wsp|fpsr|fpcr|[rcp]1[0-5]|[rcp][0-9]|a[1-4]|v[1-8]|sl|sb|fp|ip|sp|lr|(c|s)psr(_c)?|pc|[sd]3[0-1]|[sd][12][0-9]|[sd][0-9]|fpsid|fpscr|fpexc|q3[0-1]|q2[0-9]|q1[0-9]|q[0-9]|APSR_nzcv|sy)!?(?-i))?\b
- comment: x86 register
name: storage.other.register.x86
match: \b((?i)(al|ah|ax|eax|rax|bl|bh|bx|ebx|rbx|cl|ch|cx|ecx|rcx|dl|dh|dx|edx|rdx|sil|si|esi|rsi|di|di|edi|rdi|bpl|bp|ebp|rbp|sp|esp|rsp|cs|ds|ss|es|fs|gs|ip|eip|rip|flags|eflags|rflags|r8|r9|r10|r11|r12|r13|r14|r15|r8d|r9d|r10d|r11d|r12d|r13d|r14d|r15d|r8w|r9w|r10w|r11w|r12w|r13w|r14w|r15w|r8l|r9l|r10l|r11l|r12l|r13l|r14l|r15l|st0|st1|st2|st3|st4|st5|st6|st7|mm0|mm1|mm2|mm3|mm4|mm5|mm6|mm7|xmm0|xmm1|xmm2|xmm3|xmm4|xmm5|xmm6|xmm7|xmm8|xmm9|xmm10|xmm11|xmm12|xmm13|xmm14|xmm15|xmm16|xmm17|xmm18|xmm19|xmm20|xmm21|xmm22|xmm23|xmm24|xmm25|xmm26|xmm27|xmm28|xmm29|xmm30|xmm31|ymm0|ymm1|ymm2|ymm3|ymm4|ymm5|ymm6|ymm7|ymm8|ymm9|ymm10|ymm11|ymm12|ymm13|ymm14|ymm15|ymm16|ymm17|ymm18|ymm19|ymm20|ymm21|ymm22|ymm23|ymm24|ymm25|ymm26|ymm27|ymm28|ymm29|ymm30|ymm31|zmm0|zmm1|zmm2|zmm3|zmm4|zmm5|zmm6|zmm7|zmm8|zmm9|zmm10|zmm11|zmm12|zmm13|zmm14|zmm15|zmm16|zmm17|zmm18|zmm19|zmm20|zmm21|zmm22|zmm23|zmm24|zmm25|zmm26|zmm27|zmm28|zmm29|zmm30|zmm31|cr0|cr2|cr3|cr4|gdtr|ldtr|idtr|dr0|dr1|dr2|dr3|dr4|dr5|dr6|dr7|msr)!?(?-i))?\b
- comment: SPARC register
name: storage.other.register.sparc
match: \b((?i)\$?([gloi][0-9])!?(?-i))?\b
- comment: MIPS register
name: storage.other.register.mips
match: \b((?i)\$?(r[0-3][0-9]|v[0-2]|a[0-4]|t[0-8]|s[0-9]|t([89]|10|k[0-2]))!?(?-i))?\b
- comment: Numeric Hex
name: constant.numeric.hex
match: (\b|\s+)(\#)?-?(0x|&amp;)[0-9a-fA-F_]+\b
- comment: Numeric Literal
name: constant.numeric.literal
match: (\b|\s+)\#-?[0-9a-zA-Z_]+\b
- comment: Numeric Decimal
name: constant.numeric.dec
match: (\b|\s+)[0-9]+\b
- comment: Label
name: entity.name.tag
match: ([\w${}]+[:])
- comment: Inline Python
name: pwntools.raw.block.python
begin: (<%\s)
end: (%>)
beginCaptures:
'1': {name: 'keyword.control'}
endCaptures:
'1': {name: 'keyword.control'}
patterns:
- {include: source.python}
- comment: Inline Docstring
begin: (<%(\S+)>)
end: (</%(\2)>)
beginCaptures:
'1': {name: 'keyword.control'}
endCaptures:
'1': {name: 'keyword.control'}
patterns:
- {include: comment.block}
- comment: Mako Tag
name: source.mako.tag
begin: (<%\w+\s)
end: (/>)
beginCaptures:
'1': {name: 'keyword.control'}
endCaptures:
'1': {name: 'keyword.control'}
patterns:
- {include: comment.block}
- comment: Mako Substitution
name: source.mako.expression
begin: (\${)
end: (})
beginCaptures:
'1': {name: 'keyword.control'}
endCaptures:
'1': {name: 'keyword.control'}
patterns:
- {include: source.python}
- comment: Mako Comment
match: (^##(.*)$)
name: comment.line.mako
- comment: Mako Directive
begin: ^\s*(%)(\s*((endfor)|(endif)|(endwhile)))?
end: $
beginCaptures:
'1': {name: 'keyword.control'}
'2': {name: 'keyword.control'}
patterns:
- {include: source.python}
name: source.doc.python.mako.controlline
# <key>begin</key>
# <string>^(#)</string>
# <key>beginCaptures</key>
# <dict>
# <key>1</key>
# <dict>
# <key>name</key>
# <string>keyword.control</string>
# </dict>
# </dict>
# <key>end</key>
# <string>$</string>
# <key>name</key>
# <string>source.python.mako.line</string>
# <key>patterns</key>
# <array>
# <dict>
# <key>include</key>
# <string>comment.block</string>
# </dict>
# </array>
# </dict>
# <key>begin</key>
# <string>^\s*(%)(\s*((endfor)|(endif)|(endwhile)))?</string>
# <key>beginCaptures</key>
# <dict>
# <key>1</key>
# <dict>
# <key>name</key>
# <string>keyword.control</string>
# </dict>
# <key>2</key>
# <dict>
# <key>name</key>
# <string>keyword.control</string>
# </dict>
# </dict>
# <key>begin</key>
# <string>(&lt;%\s)</string>
# <key>captures</key>
# <dict>
# <key>1</key>
# <dict>
# <key>name</key>
# <string>keyword.control</string>
# </dict>
# </dict>
# <key>end</key>
# <string>(%&gt;)</string>
# <key>name</key>
# <string>source.mako.substitution</string>
# <key>patterns</key>
# <array>
# <dict>
# <key>include</key>
# <string>source.python</string>
# </dict>
# </array>
# match: "(
# (bf(c|i)|(u|s)bfx|(u|s)xta?(h|b)?) |
# (v(add|cvt|sub|mov|trn|cmp|div|qdmulh|mrs|mul|ld1|qadd|qshrun|st[1234]|addw|mull|mlal|rshrn|swp|qmovun)|qmovun)(\.([isup]?8|[isupf]?16|[isuf]?32|[isu]?64))* |
# (and|m(rs|sr)|eor|sub|rsb|add|adc|sbc|rsc|tst|teq|cmp|cmn|orr|mov|bic|mvn |
# (neg) |
# (lsr|lsl|ror|asr)
# )s? |
# (mul|mla|mull|smlabb) |
# (mov(w|t)) |
# rev(8|16)? |
# (pld|adr|adrl|vswp)
# )
+337
View File
@@ -0,0 +1,337 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>fileTypes</key>
<array>
<string>.asm</string>
</array>
<key>name</key>
<string>Pwntools Mako ASM</string>
<key>patterns</key>
<array>
<dict>
<key>comment</key>
<string>x86 instruction</string>
<key>match</key>
<string>\b(?i)(v)?(aaa|aad|aam|aas|adc|add|addpd|addps|addsd|addss|addsubpd|addsubps|aesdec|aesdeclast|aesenc|aesenclast|aesimc|aeskeygenassist|and|andpd|andps|andnpd|andnps|arpl|blendpd|bmi|blendps|blendvpd|blendvps|bound|bsf|bsr|bswap|bt|btc|btr|bts|cbw|cwde|cdqe|clc|cld|cflush|clts|cmc|cmov(n?e|ge?|ae?|le?|be?|n?o|n?z)|cmp|cmppd|cmpps|cmps|cnpsb|cmpsw|cmpsd|cmpsq|cmpss|cmpxchg|cmpxchg8b|cmpxchg16b|comisd|comiss|cpuid|crc32|cvtdq2pd|cvtdq2ps|cvtpd2dq|cvtpd2pi|cvtpd2ps|cvtpi2pd|cvtpi2ps|cvtps2dq|cvtps2pd|cvtps2pi|cvtsd2si|cvtsd2ss|cvts2sd|cvtsi2ss|cvtss2sd|cvtss2si|cvttpd2dq|cvtpd2pi|cvttps2dq|cvttps2pi|cvttps2dq|cvttps2pi|cvttsd2si|cvttss2si|cwd|cdq|cqo|daa|das|dec|div|divpd|divps|divsd|divss|dppd|dpps|emms|enter|extractps|f2xm1|fabs|fadd|faddp|fiadd|fbld|fbstp|fchs|fclex|fnclex|fcmov(n?e|ge?|ae?|le?|be?|n?o|n?z)|fcom|fcmop|fcompp|fcomi|fcomip|fucomi|fucomip|fcos|fdecstp|fdiv|fdivp|fidiv|fdivr|fdivrp|fidivr|ffree|ficom|ficomp|fild|fincstp|finit|fnint|fist|fistp|fisttp|fld|fld1|fldl2t|fldl2e|fldpi|fldlg2|fldln2|fldz|fldcw|fldenv|fmul|fmulp|fimul|fnop|fpatan|fprem|fprem1|fptan|frndint|frstor|fsave|fnsave|fscale|fsin|fsincos|fsqrt|fst|fstp|fstcw|fnstcw|fstenv|fnstenv|fsts(w?)|fnstsw|fsub|fsubp|fisub|fsubr|fsubrp|fisubr|ftst|fucom|fucomp|fucompp|fxam|fxch|fxrstor|fxsave|fxtract|fyl2x|fyl2xp1|haddpd|haddps|husbpd|hsubps|idiv|imul|in|inc|ins|insb|insw|insd|insertps|int|into|invd|invplg|invpcid|iret|iretd|iretq|lahf|lar|lddqu|ldmxcsr|lds|les|lfs|lgs|lss|lea|leave|lfence|lgdt|lidt|llgdt|lmsw|lock|lods|lodsb|lodsw|lodsd|lodsq|lsl|ltr|maskmovdqu|maskmovq|maxpd|maxps|maxsd|maxss|mfence|minpd|minps|minsd|minss|monitor|mov|movapd|movaps|movbe|movd|movq|movddup|movdqa|movdqu|movq2q|movhlps|movhpd|movhps|movlhps|movlpd|movlps|movmskpd|movmskps|movntdqa|movntdq|movnti|movntpd|movntps|movntq|movq|movq2dq|movs|movsb|movsw|movsd|movsq|movsd|movshdup|movsldup|movss|movsx|movsxd|movupd|movups|movzx|mpsadbw|mul|mulpd|mulps|mulsd|mulss|mwait|neg|not|or|orpd|orps|out|outs|outsb|outsw|outsd|pabsb|pabsw|pabsd|packsswb|packssdw|packusdw|packuswbpaddb|paddw|paddd|paddq|paddsb|paddsw|paddusb|paddusw|palignr|pand|pandn|pause|pavgb|pavgw|pblendvb|pblendw|pclmulqdq|pcmpeqb|pcmpeqw|pcmpeqd|pcmpeqq|pcmpestri|pcmpestrm|pcmptb|pcmptgw|pcmpgtd|pcmpgtq|pcmpistri|pcmpisrm|pdep|pext|pextrb|pextrd|pextrq|pextrw|phaddw|phaddd|phaddsw|phinposuw|phsubw|phsubd|phsubsw|pinsrb|pinsrd|pinsrq|pinsrw|pmaddubsw|pmadddwd|pmaxsb|pmaxsd|pmaxsw|pmaxsw|pmaxub|pmaxud|pmaxuw|pminsb|pminsd|pminsw|pminub|pminud|pminuw|pmovmskb|pmovsx|pmovzx|pmuldq|pmulhrsw|pmulhuw|pmulhw|pmulld|pmullw|pmuludw|pop|popa|popad|popcnt|popf|popfd|popfq|por|prefetch|psadbw|pshufb|pshufd|pshufhw|pshuflw|pshufw|psignb|psignw|psignd|pslldq|psllw|pslld|psllq|psraw|psrad|psrldq|psrlw|psrld|psrlq|psubb|psubw|psubd|psubq|psubsb|psubsw|psubusb|psubusw|test|ptest|punpckhbw|punpckhwd|punpckhdq|punpckhddq|punpcklbw|punpcklwd|punpckldq|punpckldqd|push|pusha|pushad|pushf|pushfd|pxor|prcl|rcr|rol|ror|rcpps|rcpss|rdfsbase|rdgsbase|rdmsr|rdpmc|rdrand|rdtsc|rdtscp|rep|repe|repz|repne|repnz|roundpd|roundps|roundsd|roundss|rsm|rsqrps|rsqrtss|sahf|sal|sar|shl|shr|sbb|scas|scasb|scasw|scasd|set(n?e|ge?|ae?|le?|be?|n?o|n?z)|sfence|sgdt|shld|shrd|shufpd|shufps|sidt|sldt|smsw|sqrtpd|sqrtps|sqrtsd|sqrtss|stc|std|stmxcsr|stos|stosb|stosw|stosd|stosq|str|sub|subpd|subps|subsd|subss|swapgs|syscall|sysenter|sysexit|sysret|teset|ucomisd|ucomiss|ud2|unpckhpd|unpckhps|unpcklpd|unpcklps|vbroadcast|vcvtph2ps|vcvtp2sph|verr|verw|vextractf128|vinsertf128|vmaskmov|vpermilpd|vpermilps|vperm2f128|vtestpd|vzeroall|vzeroupper|wait|fwait|wbinvd|wrfsbase|wrgsbase|wrmsr|xadd|xchg|xgetbv|xlat|xlatb|xor|xorpd|xorps|xrstor|xsave|xsaveopt|xsetbv|lzcnt|extrq|insertq|movntsd|movntss|vfmaddpd|vfmaddps|vfmaddsd|vfmaddss|vfmaddsubbpd|vfmaddsubps|vfmsubaddpd|vfmsubaddps|vfmsubpd|vfmsubps|vfmsubsd|vfnmaddpd|vfnmaddps|vfnmaddsd|vfnmaddss|vfnmsubpd|vfnmusbps|vfnmusbsd|vfnmusbss|vbroadcastss|vbroadcastsd|vbroadcastf128|vmaskmovps|vmaskmovpd|cvt|xor|cli|sti|hlt|nop|lock|wait|enter|leave|ret|loop(n?e|n?z)?|call|j(mp|n?e|n?ge?|n?ae?|le?|be?|n?o|n?z|n?c|n?p|n?b))\b</string>
<key>name</key>
<string>support.function.mnemonic.x86.all</string>
</dict>
<dict>
<key>comment</key>
<string>ARM instruction</string>
<key>match</key>
<string>(?x)\b((?i) ( (bf(c|i)|(u|s)bfx|(u|s)xta?(h|b)?)
| (v(add|cvt|sub|mov|trn|cmp|div|qdmulh|mrs|mul|ld1|qadd|qshrun|st[1234]|addw|mull|mlal|rshrn|swp|qmovun)|qmovun)(\.([isup]?8|[isupf]?16|[isuf]?32|[isu]?64))*
| (mul|mla|mull|smlabb)
| (mov(w|t))
| rev(8|16)?
| (pld|adr|adrl|vswp)
| bkpt
)?(?-i))?\b
</string>
<key>name</key>
<string>support.function.mnemonic.arm.arithmetic</string>
</dict>
<dict>
<key>comment</key>
<string>ARM instruction</string>
<key>match</key>
<string>(?x)\b((?i)(
swi|svc|wfi|
dmb | clrex | dsb | isb |
v(ldr|str|push|pop) |
(push|pop) |
(st|ld)(
p |
r(ex|s?(h|b)|d)? |
m(
(f|e)(d|a) |
(d|i)(b|a)
)?
) |
b(l|x|lx|lr|r)? |
(i|e)?ret|
b\.(eq|ne|hs|cs|lo|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|nv)+ |
(c|t)?bn?z|
)+(ne|eq|cs|hs|cc|lo|mi|pl|vs|vc|hi|ls|lt|le|gt|ge|al)?(?-i))\b
</string>
<key>name</key>
<string>support.function.mnemonic.arm.memory</string>
</dict>
<dict>
<key>comment</key>
<string>ARM instruction</string>
<key>match</key>
<string>\b((?i)(def(b|w|s)|equ|(include|get)(\s+([a-zA-Z_]+[0-9a-zA-Z_]*|[0-9]+[a-zA-Z_]+[0-9a-zA-Z_]*?)\.s)?)?(?-i))\b
</string>
<key>name</key>
<string>meta.preprocessor.c.include</string>
</dict>
<dict>
<key>comment</key>
<string>ARM instruction</string>
<key>match</key>
<string>\b((?i)nop(ne|eq|cs|hs|cc|lo|mi|pl|vs|vc|hi|ls|lt|le|gt|ge|al)?(?-i))?\b
</string>
<key>name</key>
<string>comment.nop</string>
</dict>
<dict>
<key>begin</key>
<string>/\*</string>
<key>comment</key>
<string>Comment Block</string>
<key>end</key>
<string>\*/</string>
<key>name</key>
<string>comment.block</string>
</dict>
<dict>
<key>comment</key>
<string>Directive</string>
<key>match</key>
<string>\.(?i)(globl|global|macro|endm|purgem|if|elseif|else|endif|section|text|arm|align|balign|irp|rept|endr|req|unreq|error|short|func|endfunc|hidden|type|fpu|arch|code|altmacro|object_arch|word|int|string)(?-i)\b</string>
<key>name</key>
<string>keyword.control.directive</string>
</dict>
<dict>
<key>comment</key>
<string>ARM register</string>
<key>match</key>
<string>\b((?i)\$?([xw][0-9]|[xw]1[0-9]||[xw]2[0-9]|[wx]30|wzr|xzr|wsp|fpsr|fpcr|[rcp]1[0-5]|[rcp][0-9]|a[1-4]|v[1-8]|sl|sb|fp|ip|sp|lr|(c|s)psr(_c)?|pc|[sd]3[0-1]|[sd][12][0-9]|[sd][0-9]|fpsid|fpscr|fpexc|q3[0-1]|q2[0-9]|q1[0-9]|q[0-9]|APSR_nzcv|sy)!?(?-i))?\b</string>
<key>name</key>
<string>storage.other.register.arm</string>
</dict>
<dict>
<key>comment</key>
<string>x86 register</string>
<key>match</key>
<string>\b((?i)(al|ah|ax|eax|rax|bl|bh|bx|ebx|rbx|cl|ch|cx|ecx|rcx|dl|dh|dx|edx|rdx|sil|si|esi|rsi|di|di|edi|rdi|bpl|bp|ebp|rbp|sp|esp|rsp|cs|ds|ss|es|fs|gs|ip|eip|rip|flags|eflags|rflags|r8|r9|r10|r11|r12|r13|r14|r15|r8d|r9d|r10d|r11d|r12d|r13d|r14d|r15d|r8w|r9w|r10w|r11w|r12w|r13w|r14w|r15w|r8l|r9l|r10l|r11l|r12l|r13l|r14l|r15l|st0|st1|st2|st3|st4|st5|st6|st7|mm0|mm1|mm2|mm3|mm4|mm5|mm6|mm7|xmm0|xmm1|xmm2|xmm3|xmm4|xmm5|xmm6|xmm7|xmm8|xmm9|xmm10|xmm11|xmm12|xmm13|xmm14|xmm15|xmm16|xmm17|xmm18|xmm19|xmm20|xmm21|xmm22|xmm23|xmm24|xmm25|xmm26|xmm27|xmm28|xmm29|xmm30|xmm31|ymm0|ymm1|ymm2|ymm3|ymm4|ymm5|ymm6|ymm7|ymm8|ymm9|ymm10|ymm11|ymm12|ymm13|ymm14|ymm15|ymm16|ymm17|ymm18|ymm19|ymm20|ymm21|ymm22|ymm23|ymm24|ymm25|ymm26|ymm27|ymm28|ymm29|ymm30|ymm31|zmm0|zmm1|zmm2|zmm3|zmm4|zmm5|zmm6|zmm7|zmm8|zmm9|zmm10|zmm11|zmm12|zmm13|zmm14|zmm15|zmm16|zmm17|zmm18|zmm19|zmm20|zmm21|zmm22|zmm23|zmm24|zmm25|zmm26|zmm27|zmm28|zmm29|zmm30|zmm31|cr0|cr2|cr3|cr4|gdtr|ldtr|idtr|dr0|dr1|dr2|dr3|dr4|dr5|dr6|dr7|msr)!?(?-i))?\b</string>
<key>name</key>
<string>storage.other.register.x86</string>
</dict>
<dict>
<key>comment</key>
<string>SPARC register</string>
<key>match</key>
<string>\b((?i)\$?([gloi][0-9])!?(?-i))?\b</string>
<key>name</key>
<string>storage.other.register.sparc</string>
</dict>
<dict>
<key>comment</key>
<string>MIPS register</string>
<key>match</key>
<string>\b((?i)\$?(r[0-3][0-9]|v[0-2]|a[0-4]|t[0-8]|s[0-9]|t([89]|10|k[0-2]))!?(?-i))?\b</string>
<key>name</key>
<string>storage.other.register.mips</string>
</dict>
<dict>
<key>comment</key>
<string>Numeric Hex</string>
<key>match</key>
<string>(\b|\s+)(\#)?-?(0x|&amp;amp;)[0-9a-fA-F_]+\b</string>
<key>name</key>
<string>constant.numeric.hex</string>
</dict>
<dict>
<key>comment</key>
<string>Numeric Literal</string>
<key>match</key>
<string>(\b|\s+)\#-?[0-9a-zA-Z_]+\b</string>
<key>name</key>
<string>constant.numeric.literal</string>
</dict>
<dict>
<key>comment</key>
<string>Numeric Decimal</string>
<key>match</key>
<string>(\b|\s+)[0-9]+\b</string>
<key>name</key>
<string>constant.numeric.dec</string>
</dict>
<dict>
<key>comment</key>
<string>Label</string>
<key>match</key>
<string>([\w${}]+[:])</string>
<key>name</key>
<string>entity.name.tag</string>
</dict>
<dict>
<key>begin</key>
<string>(&lt;%\s)</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control</string>
</dict>
</dict>
<key>comment</key>
<string>Inline Python</string>
<key>end</key>
<string>(%&gt;)</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control</string>
</dict>
</dict>
<key>name</key>
<string>pwntools.raw.block.python</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.python</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(&lt;%(\S+)&gt;)</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control</string>
</dict>
</dict>
<key>comment</key>
<string>Inline Docstring</string>
<key>end</key>
<string>(&lt;/%(\2)&gt;)</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>comment.block</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(&lt;%\w+\s)</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control</string>
</dict>
</dict>
<key>comment</key>
<string>Mako Tag</string>
<key>end</key>
<string>(/&gt;)</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control</string>
</dict>
</dict>
<key>name</key>
<string>source.mako.tag</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>comment.block</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(\${)</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control</string>
</dict>
</dict>
<key>comment</key>
<string>Mako Substitution</string>
<key>end</key>
<string>(})</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control</string>
</dict>
</dict>
<key>name</key>
<string>source.mako.expression</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.python</string>
</dict>
</array>
</dict>
<dict>
<key>comment</key>
<string>Mako Comment</string>
<key>match</key>
<string>(^##(.*)$)</string>
<key>name</key>
<string>comment.line.mako</string>
</dict>
<dict>
<key>begin</key>
<string>^\s*(%)(\s*((endfor)|(endif)|(endwhile)))?</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>keyword.control</string>
</dict>
</dict>
<key>comment</key>
<string>Mako Directive</string>
<key>end</key>
<string>$</string>
<key>name</key>
<string>source.doc.python.mako.controlline</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.python</string>
</dict>
</array>
</dict>
</array>
<key>scopeName</key>
<string>source.pwntools</string>
<key>uuid</key>
<string>19bbf78d-4ad8-4385-bb20-5bde8df453bf</string>
</dict>
</plist>
Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

+15 -114
View File
@@ -1,119 +1,20 @@
# Promote useful stuff to toplevel
from .toplevel import *
from __future__ import absolute_import
from pwn.toplevel import *
# look for special args in argv
def closure():
term_mode = True
import sys
if not hasattr(sys, 'argv'):
return
import string, collections
global args
args = collections.defaultdict(str)
def isident(s):
first = string.uppercase + '_'
body = string.digits + first
if not s:
return False
if s[0] not in first:
return False
if not all(c in body for c in s[1:]):
return False
return True
def asbool(s):
if s.lower() == 'true':
return True
elif s.lower() == 'false':
return False
elif s.isdigit():
return bool(int(s))
else:
raise ValueError('must be integer or boolean')
# parse environtment variables
for k, v in os.environ.items():
if not k.startswith('PWNLIB_'):
continue
k = k[7:]
if k == 'DEBUG':
if asbool(v):
context.log_level = 'DEBUG'
elif k == 'SILENT':
if asbool(v):
context.log_level = 'ERROR'
elif k == 'NOTERM':
if asbool(v):
term_mode = False
elif isident(k):
args[k] = v
# parse command line
# save a copy of argv for the log file header (see below)
argv = sys.argv[:]
for arg in argv:
if arg == 'DEBUG':
sys.argv.remove(arg)
context.log_level = 'DEBUG'
elif arg == 'SILENT':
sys.argv.remove(arg)
context.log_level = 'ERROR'
elif arg == 'NOTERM':
term_mode = False
elif arg.find('=') > 0:
k, v = arg.split('=', 1)
if not isident(k):
continue
sys.argv.remove(arg)
args[k] = v
if 'LOG_LEVEL' in args:
context.log_level = args['LOG_LEVEL']
if 'LOG_FILE' in args:
# install a file logger
import logging, time
modes = ('w', 'wb', 'a', 'ab')
filename = args['LOG_FILE']
mode = 'a'
# check if mode was specified as "[filename],[mode]"
if ',' in filename:
filename_, mode_ = filename.rsplit(',', 1)
if mode in modes:
filename = filename_
mode = mode_
# ISO 8601
dfmt = '%Y-%m-%dT%H:%M:%S'
# write a "header" to the file, which makes it easier to find the start
# of a session
with open(filename, mode) as fd:
lines = [
'=' * 78,
' Started at %s ' % time.strftime(dfmt),
' sys.argv = [',
]
for arg in argv:
lines.append(' %r,' % arg)
lines.append(' ]')
lines.append('=' * 78)
for line in lines:
fd.write('=%s=\n' % line.ljust(78))
# if the mode was 'w' or 'wb' we need to change it to 'a'/'ab' now so
# the logging module wont overwrite the header
mode = mode.replace('w', 'a')
# create a formatter and a handler and install them for the pwnlib root
# logger (i.e. 'pwnlib')
handler = logging.FileHandler(filename, mode)
fmt = '%(asctime)s:%(levelname)s:%(name)s:%(message)s'
formatter = logging.Formatter(fmt, dfmt)
handler.setFormatter(formatter)
logging.root.addHandler(handler)
# put the terminal in rawmode unless NOTERM was specified
if term_mode:
term.init()
# install a log handler and turn logging all the way up
import pwnlib.log as log
import logging
log.rootlogger.setLevel(logging.DEBUG)
log.install_default_handler()
pwnlib.args.initialize()
pwnlib.log.install_default_handler()
pwnlib.config.initialize()
closure()
del closure
log = pwnlib.log.getLogger('pwnlib.exploit')
args = pwnlib.args.args
log = getLogger('pwnlib.exploit')
if not platform.architecture()[0].startswith('64'):
"""Determines if the current Python interpreter is supported by Pwntools.
See Gallopsled/pwntools#518 for more information."""
log.warn_once('Pwntools does not support 32-bit Python. Use a 64-bit release.')
with context.local(log_console=sys.stderr):
pwnlib.update.check_automatically()
+31 -14
View File
@@ -1,9 +1,12 @@
# Promote these modules, so that "from pwn import *" will let you access them
# Get all the modules from pwnlib
import collections
import logging
import math
import operator
import os
import re
import socks
import signal
import string
import struct
import subprocess
@@ -12,31 +15,33 @@ import tempfile
import threading
import time
from pprint import pprint
import pwnlib
# Get all the modules from pwnlib
from pwnlib import *
# Promote functions from these modules to toplevel
from pwnlib.asm import asm
from pwnlib.asm import cpp
from pwnlib.asm import disasm
from pwnlib.asm import *
from pwnlib.context import Thread
from pwnlib.context import context
from pwnlib.dynelf import DynELF
from pwnlib.elf import ELF
from pwnlib.elf import load
from pwnlib.encoders import *
from pwnlib.elf.corefile import Core, Corefile, Coredump
from pwnlib.elf.elf import ELF, load
from pwnlib.encoders import *
from pwnlib.exception import PwnlibException
from pwnlib.fmtstr import FmtStr
from pwnlib.gdb import attach, debug, debug_assembly, debug_shellcode
from pwnlib.flag import *
from pwnlib.fmtstr import FmtStr, fmtstr_payload
from pwnlib.log import getLogger
from pwnlib.memleak import MemLeak
from pwnlib.memleak import MemLeak, RelativeMemLeak
from pwnlib.regsort import *
from pwnlib.replacements import *
from pwnlib.rop import ROP
from pwnlib.rop.srop import SigreturnFrame
from pwnlib.runner import *
from pwnlib.timeout import Timeout
from pwnlib.tubes.listen import listen
from pwnlib.tubes.process import process
from pwnlib.tubes.remote import remote
from pwnlib.tubes.process import process, PTY, PIPE, STDOUT
from pwnlib.tubes.remote import remote, tcp, udp, connect
from pwnlib.tubes.serialtube import serialtube
from pwnlib.tubes.ssh import ssh
from pwnlib.tubes.tube import tube
@@ -46,16 +51,21 @@ from pwnlib.util import iters
from pwnlib.util import net
from pwnlib.util import proc
from pwnlib.util import safeeval
from pwnlib.util.crc import BitPolynom
from pwnlib.util.cyclic import *
from pwnlib.util.fiddling import *
from pwnlib.util.getdents import *
from pwnlib.util.hashes import *
from pwnlib.util.lists import *
from pwnlib.util.misc import *
from pwnlib.util.packing import *
from pwnlib.util.proc import pidof
from pwnlib.util.sh_string import sh_string, sh_prepare, sh_command_with
from pwnlib.util.splash import *
from pwnlib.util.web import *
# Promote these modules, so that "from pwn import *" will let you access them
try:
import cPickle as pickle
except ImportError:
@@ -65,3 +75,10 @@ try:
from cStringIO import StringIO
except ImportError:
from StringIO import StringIO
error = log.error
warning = log.warning
warn = log.warning
info = log.info
debug = log.debug
success = log.success
+10 -2
View File
@@ -1,17 +1,22 @@
from __future__ import absolute_import
import importlib
from .version import __version__
from pwnlib.version import __version__
version = __version__
__all__ = [
'args',
'asm',
'atexception',
'atexit',
'commandline',
'constants',
'context',
'data',
'dynelf',
'encoders',
'elf',
'exception',
'fmtstr',
@@ -23,12 +28,15 @@ __all__ = [
'regsort',
'replacements',
'rop',
'runner',
'shellcraft',
'term',
'tubes',
'ui',
'useragents',
'util'
'util',
'adb',
'update',
]
for module in __all__:
+131
View File
@@ -0,0 +1,131 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import
from pwnlib.context import LocalContext
from pwnlib.context import context
class ABI(object):
"""
Encapsulates information about a calling convention.
"""
#: List or registers which should be filled with arguments before
#: spilling onto the stack.
register_arguments = []
#: Minimum alignment of the stack.
#: The value used is min(context.bytes, stack_alignment)
#: This is necessary as Windows x64 frames must be 32-byte aligned.
#: "Alignment" is considered with respect to the last argument on the stack.
arg_alignment = 1
#: Minimum number of stack slots used by a function call
#: This is necessary as Windows x64 requires using 4 slots on the stack
stack_minimum = 0
#: Indicates that this ABI returns to the next address on the slot
returns = True
def __init__(self, stack, regs, align, minimum):
self.stack = stack
self.register_arguments = regs
self.arg_alignment = align
self.stack_minimum = minimum
@staticmethod
@LocalContext
def default():
if context.os == 'android':
context.os = 'linux'
return {
(32, 'i386', 'linux'): linux_i386,
(64, 'aarch64', 'linux'): linux_aarch64,
(64, 'amd64', 'linux'): linux_amd64,
(32, 'arm', 'linux'): linux_arm,
(32, 'thumb', 'linux'): linux_arm,
(32, 'mips', 'linux'): linux_mips,
(32, 'i386', 'windows'): windows_i386,
(64, 'amd64', 'windows'): windows_amd64,
(32, 'powerpc', 'linux'): linux_ppc,
(64, 'powerpc', 'linux'): linux_ppc64,
}[(context.bits, context.arch, context.os)]
@staticmethod
@LocalContext
def syscall():
if context.os == 'android':
context.os = 'linux'
return {
(32, 'i386', 'linux'): linux_i386_syscall,
(64, 'amd64', 'linux'): linux_amd64_syscall,
(64, 'aarch64', 'linux'): linux_aarch64_syscall,
(32, 'arm', 'linux'): linux_arm_syscall,
(32, 'thumb', 'linux'): linux_arm_syscall,
(32, 'mips', 'linux'): linux_mips_syscall,
(64, 'aarch64', 'linux'): linux_aarch64_syscall,
(32, 'powerpc', 'linux'): linux_ppc_syscall,
(64, 'powerpc', 'linux'): linux_ppc64_syscall,
}[(context.bits, context.arch, context.os)]
@staticmethod
@LocalContext
def sigreturn():
if context.os == 'android':
context.os = 'linux'
return {
(32, 'i386', 'linux'): linux_i386_sigreturn,
(64, 'amd64', 'linux'): linux_amd64_sigreturn,
(32, 'arm', 'linux'): linux_arm_sigreturn,
(32, 'thumb', 'linux'): linux_arm_sigreturn,
(64, 'aarch64', 'linux'): linux_aarch64_sigreturn,
}[(context.bits, context.arch, context.os)]
class SyscallABI(ABI):
"""
The syscall ABI treats the syscall number as the zeroth argument,
which must be loaded into the specified register.
"""
def __init__(self, *a, **kw):
super(SyscallABI, self).__init__(*a, **kw)
self.syscall_register = self.register_arguments[0]
class SigreturnABI(SyscallABI):
"""
The sigreturn ABI is similar to the syscall ABI, except that
both PC and SP are loaded from the stack. Because of this, there
is no 'return' slot necessary on the stack.
"""
returns = False
linux_i386 = ABI('esp', [], 4, 0)
linux_amd64 = ABI('rsp', ['rdi','rsi','rdx','rcx','r8','r9'], 8, 0)
linux_arm = ABI('sp', ['r0', 'r1', 'r2', 'r3'], 8, 0)
linux_aarch64 = ABI('sp', ['x0', 'x1', 'x2', 'x3'], 16, 0)
linux_mips = ABI('$sp', ['$a0','$a1','$a2','$a3'], 4, 0)
linux_ppc = ABI('sp', ['r3', 'r4', 'r5', 'r6', 'r7', 'r8', 'r9', 'r10'], 4, 0)
linux_ppc64 = ABI('sp', ['r3', 'r4', 'r5', 'r6', 'r7', 'r8', 'r9', 'r10'], 8, 0)
linux_i386_syscall = SyscallABI('esp', ['eax', 'ebx', 'ecx', 'edx', 'esi', 'edi', 'ebp'], 4, 0)
linux_amd64_syscall = SyscallABI('rsp', ['rax', 'rdi', 'rsi', 'rdx', 'r10', 'r8', 'r9'], 8, 0)
linux_arm_syscall = SyscallABI('sp', ['r7', 'r0', 'r1', 'r2', 'r3', 'r4', 'r5', 'r6'], 4, 0)
linux_aarch64_syscall = SyscallABI('sp', ['x8', 'x0', 'x1', 'x2', 'x3', 'x4', 'x5', 'x6'], 16, 0)
linux_mips_syscall = SyscallABI('$sp', ['$v0','$a0','$a1','$a2','$a3'], 4, 0)
linux_ppc_syscall = ABI('sp', ['r0', 'r3', 'r4', 'r5', 'r6', 'r7', 'r8', 'r9'], 4, 0)
linux_ppc64_syscall = ABI('sp', ['r0', 'r3', 'r4', 'r5', 'r6', 'r7', 'r8', 'r9'], 8, 0)
linux_i386_sigreturn = SigreturnABI('esp', ['eax'], 4, 0)
linux_amd64_sigreturn = SigreturnABI('rsp', ['rax'], 4, 0)
linux_arm_sigreturn = SigreturnABI('sp', ['r7'], 4, 0)
linux_aarch64_sigreturn = SigreturnABI('sp', ['x8'], 16, 0)
windows_i386 = ABI('esp', [], 4, 0)
windows_amd64 = ABI('rsp', ['rcx','rdx','r8','r9'], 32, 32)
# Fake ABIs used by SROP
linux_i386_srop = ABI('esp', ['eax'], 4, 0)
linux_amd64_srop = ABI('rsp', ['rax'], 4, 0)
linux_arm_srop = ABI('sp', ['r7'], 4, 0)
+4
View File
@@ -0,0 +1,4 @@
from __future__ import absolute_import
from pwnlib.adb.adb import *
from pwnlib.adb.protocol import Client
+1383
View File
File diff suppressed because it is too large. Load diff
+5
View File
@@ -0,0 +1,5 @@
"""
This file exists only for backward compatibility
"""
from pwnlib.protocols.adb import AdbClient
Client = AdbClient
+208
View File
@@ -0,0 +1,208 @@
#!/usr/bin/env python2
"""
Pwntools exposes several magic command-line arguments and environment
variables when operating in `from pwn import *` mode.
The arguments extracted from the command-line and removed from ``sys.argv``.
Arguments can be set by appending them to the command-line, or setting
them in the environment prefixed by ``PWNLIB_``.
The easiest example is to enable more verbose debugging. Just set ``DEBUG``.
.. code-block:: bash
$ PWNLIB_DEBUG=1 python exploit.py
$ python exploit.py DEBUG
These arguments are automatically extracted, regardless of their name, and
exposed via :mod:`pwnlib.args.args`, which is exposed as the global variable
:data:`args`. Arguments which ``pwntools`` reserves internally are not exposed
this way.
.. code-block:: bash
$ python -c 'from pwn import *; print args' A=1 B=Hello HOST=1.2.3.4 DEBUG
defaultdict(<type 'str'>, {'A': '1', 'HOST': '1.2.3.4', 'B': 'Hello'})
This is very useful for conditional code, for example determining whether to
run an exploit locally or to connect to a remote server. Arguments which are
not specified evaluate to an empty string.
.. code-block:: python
if args['REMOTE']:
io = remote('exploitme.com', 4141)
else:
io = process('./pwnable')
Arguments can also be accessed directly with the dot operator, e.g.:
.. code-block:: python
if args.REMOTE:
...
Any undefined arguments evaluate to an empty string, ``''``.
The full list of supported "magic arguments" and their effects are listed
below.
"""
from __future__ import absolute_import
import collections
import logging
import os
import string
import sys
from pwnlib import term
from pwnlib.context import context
class PwnlibArgs(collections.defaultdict):
def __getattr__(self, attr):
return self[attr]
args = PwnlibArgs(str)
term_mode = True
env_prefix = 'PWNLIB_'
free_form = True
# Check to see if we were invoked as one of the 'pwn xxx' scripts.
# If so, we don't want to remove e.g. "SYS_" from the end of the command
# line, as this breaks things like constgrep.
import pwnlib.commandline
basename = os.path.basename(sys.argv[0])
if basename == 'pwn' or basename in pwnlib.commandline.__all__:
free_form = False
def isident(s):
"""
Helper function to check whether a string is a valid identifier,
as passed in on the command-line.
"""
first = string.uppercase + '_'
body = string.digits + first
if not s:
return False
if s[0] not in first:
return False
if not all(c in body for c in s[1:]):
return False
return True
def asbool(s):
"""
Convert a string to its boolean value
"""
if s.lower() == 'true':
return True
elif s.lower() == 'false':
return False
elif s.isdigit():
return bool(int(s))
else:
raise ValueError('must be integer or boolean: %r' % s)
def LOG_LEVEL(x):
"""Sets the logging verbosity used via ``context.log_level``,
e.g. ``LOG_LEVEL=debug``.
"""
with context.local(log_level=x):
context.defaults['log_level']=context.log_level
def LOG_FILE(x):
"""Sets a log file to be used via ``context.log_file``, e.g.
``LOG_FILE=./log.txt``"""
context.log_file=x
def SILENT(x):
"""Sets the logging verbosity to ``error`` which silences most
output."""
LOG_LEVEL('error')
def DEBUG(x):
"""Sets the logging verbosity to ``debug`` which displays much
more information, including logging each byte sent by tubes."""
LOG_LEVEL('debug')
def NOTERM(v):
"""Disables pretty terminal settings and animations."""
if asbool(v):
global term_mode
term_mode = False
def TIMEOUT(v):
"""Sets a timeout for tube operations (in seconds) via
``context.timeout``, e.g. ``TIMEOUT=30``"""
context.defaults['timeout'] = int(v)
def RANDOMIZE(v):
"""Enables randomization of various pieces via ``context.randomize``"""
context.defaults['randomize'] = asbool(v)
def NOASLR(v):
"""Disables ASLR via ``context.aslr``"""
context.defaults['aslr'] = not asbool(v)
def NOPTRACE(v):
"""Disables facilities which require ``ptrace`` such as ``gdb.attach()``
statements, via ``context.noptrace``."""
context.defaults['noptrace'] = asbool(v)
def STDERR(v):
"""Sends logging to ``stderr`` by default, instead of ``stdout``"""
context.log_console = sys.stderr
hooks = {
'LOG_LEVEL': LOG_LEVEL,
'LOG_FILE': LOG_FILE,
'DEBUG': DEBUG,
'NOTERM': NOTERM,
'SILENT': SILENT,
'RANDOMIZE': RANDOMIZE,
'TIMEOUT': TIMEOUT,
'NOASLR': NOASLR,
'NOPTRACE': NOPTRACE,
'STDERR': STDERR,
}
def initialize():
global args, term_mode
# Hack for readthedocs.org
if 'READTHEDOCS' in os.environ:
os.environ['PWNLIB_NOTERM'] = '1'
for k, v in os.environ.items():
if not k.startswith(env_prefix):
continue
k = k[len(env_prefix):]
if k in hooks:
hooks[k](v)
elif isident(k):
args[k] = v
argv = sys.argv[:]
for arg in sys.argv[:]:
orig = arg
value = 'True'
if '=' in arg:
arg, value = arg.split('=')
if arg in hooks:
sys.argv.remove(orig)
hooks[arg](value)
elif free_form and isident(arg):
sys.argv.remove(orig)
args[arg] = value
if term_mode:
term.init()
+449 -237
View File
@@ -27,8 +27,8 @@ Assembly
Finally, :func:`asm` is used to assemble shellcode provided by ``pwntools``
in the :mod:`shellcraft` module.
>>> asm(shellcraft.sh())
'jhh///sh/bin\x89\xe31\xc9j\x0bX\x99\xcd\x80'
>>> asm(shellcraft.nop())
'\x90'
Disassembly
------------------------
@@ -39,6 +39,8 @@ Disassembly
' 0: b8 0b 00 00 00 mov eax,0xb'
"""
from __future__ import absolute_import
import errno
import os
import platform
@@ -53,17 +55,90 @@ from glob import glob
from os import environ
from os import path
from .context import context
from .log import getLogger
from pwnlib import atexit
from pwnlib import shellcraft
from pwnlib.context import LocalContext
from pwnlib.context import context
from pwnlib.log import getLogger
log = getLogger(__name__)
__all__ = ['asm', 'cpp', 'disasm', 'make_elf']
__all__ = ['asm', 'cpp', 'disasm', 'make_elf', 'make_elf_from_assembly']
_basedir = path.split(__file__)[0]
_incdir = path.join(_basedir, 'data', 'includes')
def which_binutils(util, **kwargs):
def dpkg_search_for_binutils(arch, util):
"""Use dpkg to search for any available assemblers which will work.
Returns:
A list of candidate package names.
::
>>> pwnlib.asm.dpkg_search_for_binutils('aarch64', 'as')
['binutils-aarch64-linux-gnu']
"""
# Example output:
# $ dpkg -S 'arm*linux*-as'
# binutils-arm-linux-gnu: /usr/bin/arm-linux-gnu-as
# binutils-arm-linux-gnueabihf: /usr/bin/arm-linux-gnueabihf-as
# binutils-arm-linux-gnueabihf: /usr/x86_64-linux-gnu/arm-linux-gnueabihf/include/dis-asm.h
# binutils-arm-linux-gnu: /usr/x86_64-linux-gnu/arm-linux-gnu/include/dis-asm.h
packages = []
try:
filename = 'bin/%s*linux*-%s' % (arch, util)
output = subprocess.check_output(['dpkg','-S',filename])
for line in output.strip().splitlines():
package, path = line.split(':', 1)
packages.append(package)
except OSError:
pass
except subprocess.CalledProcessError:
pass
return packages
def print_binutils_instructions(util, context):
"""On failure to find a binutils utility, inform the user of a way
they can get it easily.
Doctest:
>>> context.clear(arch = 'amd64')
>>> pwnlib.asm.print_binutils_instructions('as', context)
Traceback (most recent call last):
...
PwnlibException: Could not find 'as' installed for ContextType(arch = 'amd64', bits = 64, endian = 'little')
Try installing binutils for this architecture:
$ sudo apt-get install binutils
"""
# This links to our instructions on how to manually install binutils
# for several architectures.
instructions = 'https://docs.pwntools.com/en/stable/install/binutils.html'
# However, if we can directly provide a useful command, go for it.
binutils_arch = {
'amd64': 'x86_64',
'arm': 'armeabi',
'thumb': 'armeabi',
}.get(context.arch, context.arch)
packages = dpkg_search_for_binutils(binutils_arch, util)
if packages:
instructions = '$ sudo apt-get install %s' % packages[0]
log.error("""
Could not find %(util)r installed for %(context)s
Try installing binutils for this architecture:
%(instructions)s
""".strip() % locals())
@LocalContext
def which_binutils(util):
"""
Finds a binutils in the PATH somewhere.
Expects that the utility is prefixed with the architecture name.
@@ -71,8 +146,9 @@ def which_binutils(util, **kwargs):
Examples:
>>> import platform
>>> which_binutils = pwnlib.asm.which_binutils
>>> which_binutils('as', arch=platform.machine())
'.../bin/as'
'.../bin/...as'
>>> which_binutils('as', arch='arm') #doctest: +ELLIPSIS
'.../bin/arm-...-as'
>>> which_binutils('as', arch='powerpc') #doctest: +ELLIPSIS
@@ -83,49 +159,52 @@ def which_binutils(util, **kwargs):
...
Exception: Could not find 'as' installed for ContextType(arch = 'msp430')
"""
with context.local(**kwargs):
arch = context.arch
bits = context.bits
arch = context.arch
bits = context.bits
# Fix up pwntools vs Debian triplet naming, and account
# for 'thumb' being its own pwntools architecture.
arches = [arch] + {
'thumb': ['arm', 'aarch64'],
'i386': ['x86_64', 'amd64'],
'amd64': ['x86_64', 'i386'],
}.get(arch, [])
# Fix up pwntools vs Debian triplet naming, and account
# for 'thumb' being its own pwntools architecture.
arches = [arch] + {
'thumb': ['arm', 'aarch64'],
'i386': ['x86_64', 'amd64'],
'i686': ['x86_64', 'amd64'],
'amd64': ['x86_64', 'i386'],
}.get(arch, [])
# If one of the candidate architectures matches the native
# architecture, use that as a last resort.
machine = platform.machine()
try:
with context.local(arch = machine):
if context.arch in arches:
arches.append(None)
except AttributeError:
log.warn_once("Your local binutils won't be used because architecture %r is not supported." % machine)
# If one of the candidate architectures matches the native
# architecture, use that as a last resort.
machine = platform.machine()
machine = 'i386' if machine == 'i686' else machine
try:
with context.local(arch = machine):
if context.arch in arches:
arches.append(None)
except AttributeError:
log.warn_once("Your local binutils won't be used because architecture %r is not supported." % machine)
for arch in arches:
# hack for homebrew-installed binutils on mac
for gutil in ['g'+util, util]:
# e.g. objdump
if arch is None: pattern = gutil
utils = [util]
# e.g. aarch64-linux-gnu-objdump
else: pattern = '%s*linux*-%s' % (arch,gutil)
# hack for homebrew-installed binutils on mac
if platform.system() == 'Darwin':
utils = ['g'+util, util]
for dir in environ['PATH'].split(':'):
res = sorted(glob(path.join(dir, pattern)))
if res:
return res[0]
for arch in arches:
for gutil in utils:
# e.g. objdump
if arch is None:
pattern = gutil
locals()['context'] = context
log.warning("""
Could not find %(util)r installed for %(context)s
Try installing binutils for this architecture:
https://pwntools.readthedocs.org/en/latest/install/binutils.html
""".strip() % locals())
raise Exception('Could not find %(util)r installed for %(context)s' % locals())
# e.g. aarch64-linux-gnu-objdump
else:
pattern = '%s*linux*-%s' % (arch,gutil)
for dir in environ['PATH'].split(':'):
res = sorted(glob(path.join(dir, pattern)))
if res:
return res[0]
# No dice!
print_binutils_instructions(util, context)
checked_assembler_version = defaultdict(lambda: False)
@@ -169,7 +248,7 @@ def _assembler():
version = re.search(r' (\d\.\d+)', result).group(1)
if version < '2.19':
log.warn_once('Your binutils version is too old and may not work!\n' + \
'Try updating with: https://pwntools.readthedocs.org/en/latest/install/binutils.html\n' + \
'Try updating with: https://docs.pwntools.com/en/stable/install/binutils.html\n' + \
'Reported Version: %r' % result.strip())
@@ -204,11 +283,7 @@ def _objdump():
def _include_header():
os = context.os
arch = context.arch
if os == 'freebsd':
include = 'freebsd.h'
elif os == 'linux':
include = 'linux/%s.h' % arch
include = '%s/%s.h' % (os, arch)
if not include or not path.exists(path.join(_incdir, include)):
log.warn_once("Could not find system include headers for %s-%s" % (arch,os))
@@ -218,7 +293,11 @@ def _include_header():
def _arch_header():
prefix = ['.section .shellcode,"ax"']
prefix = ['.section .shellcode,"awx"',
'.global _start',
'.global __start',
'_start:',
'__start:']
headers = {
'i386' : ['.intel_syntax noprefix'],
'amd64' : ['.intel_syntax noprefix'],
@@ -229,7 +308,8 @@ def _arch_header():
'.arch armv7-a',
'.thumb'],
'mips' : ['.set mips2',
'.set noreorder'],
'.set noreorder',
],
}
return '\n'.join(prefix + headers.get(context.arch, [])) + '\n'
@@ -304,7 +384,8 @@ def _run(cmd, stdin = None):
return stdout
def cpp(shellcode, **kwargs):
@LocalContext
def cpp(shellcode):
r"""cpp(shellcode, ...) -> str
Runs CPP over the given shellcode.
@@ -319,192 +400,321 @@ def cpp(shellcode, **kwargs):
Examples:
.. doctest::
>>> cpp("mov al, SYS_setresuid", arch = "i386", os = "linux")
'mov al, 164\n'
>>> cpp("weee SYS_setresuid", arch = "arm", os = "linux")
'weee (0x900000+164)\n'
>>> cpp("SYS_setresuid", arch = "thumb", os = "linux")
'(0+164)\n'
>>> cpp("SYS_setresuid", os = "freebsd")
'311\n'
>>> cpp("mov al, SYS_setresuid", arch = "i386", os = "linux")
'mov al, 164\n'
>>> cpp("weee SYS_setresuid", arch = "arm", os = "linux")
'weee (0+164)\n'
>>> cpp("SYS_setresuid", arch = "thumb", os = "linux")
'(0+164)\n'
>>> cpp("SYS_setresuid", os = "freebsd")
'311\n'
"""
arch = context.arch
os = context.os
code = _include_header() + shellcode
cmd = [
'cpp',
'-C',
'-nostdinc',
'-undef',
'-P',
'-I' + _incdir,
'/dev/stdin'
]
return _run(cmd, code).strip('\n').rstrip() + '\n'
with context.local(**kwargs):
arch = context.arch
os = context.os
code = _include_header() + shellcode
cmd = [
'cpp',
'-C',
'-nostdinc',
'-undef',
'-P',
'-I' + _incdir,
'/dev/stdin'
]
return _run(cmd, code).strip('\n').rstrip() + '\n'
@LocalContext
def make_elf_from_assembly(assembly,
vma=None,
extract=False,
shared=False,
strip=False,
**kwargs):
r"""make_elf_from_assembly(assembly, vma=None, extract=None, shared=False, strip=False, **kwargs) -> str
elf_template = '''
.global _start
.global __start
.text
_start:
__start:
'''
Builds an ELF file with the specified assembly as its executable code.
def make_elf(data, vma = None, strip=True, **kwargs):
r"""
Builds an ELF file with the specified binary data as its
executable code.
This differs from :func:`.make_elf` in that all ELF symbols are preserved,
such as labels and local variables. Use :func:`.make_elf` if size matters.
Additionally, the default value for ``extract`` in :func:`.make_elf` is
different.
Note:
This is effectively a wrapper around :func:`.asm`. with setting
``extract=False``, ``vma=0x10000000``, and marking the resulting
file as executable (``chmod +x``).
Note:
ELF files created with `arch=thumb` will prepend an ARM stub
which switches to Thumb mode.
Arguments:
assembly(str): Assembly code to build into an ELF
vma(int): Load address of the binary
(Default: ``0x10000000``, or ``0`` if ``shared=True``)
extract(bool): Extract the full ELF data from the file.
(Default: ``False``)
shared(bool): Create a shared library
(Default: ``False``)
kwargs(dict): Arguments to pass to :func:`.asm`.
Returns:
The path to the assembled ELF (extract=False), or the data
of the assembled ELF.
Example:
This example shows how to create a shared library, and load it via
``LD_PRELOAD``.
>>> context.clear()
>>> context.arch = 'amd64'
>>> sc = 'push rbp; mov rbp, rsp;'
>>> sc += shellcraft.echo('Hello\n')
>>> sc += 'mov rsp, rbp; pop rbp; ret'
>>> solib = make_elf_from_assembly(sc, shared=1)
>>> subprocess.check_output(['echo', 'World'], env={'LD_PRELOAD': solib})
'Hello\nWorld\n'
The same thing can be done with :func:`.make_elf`, though the sizes
are different. They both
>>> file_a = make_elf(asm('nop'), extract=True)
>>> file_b = make_elf_from_assembly('nop', extract=True)
>>> file_a[:4] == file_b[:4]
True
>>> len(file_a) < 0x200
True
>>> len(file_b) > 0x1000
True
"""
if shared and vma:
log.error("Cannot specify a VMA for a shared library.")
if vma is None:
if shared:
vma = 0
else:
vma = 0x10000000
if context.arch == 'thumb':
to_thumb = shellcraft.arm.to_thumb()
if not assembly.startswith(to_thumb):
assembly = to_thumb + assembly
result = asm(assembly, vma = vma, shared = shared, extract = False, **kwargs)
if not extract:
os.chmod(result, 0755)
else:
with open(result, 'rb') as io:
result = io.read()
return result
@LocalContext
def make_elf(data,
vma=None,
strip=True,
extract=True,
shared=False):
r"""make_elf(data, vma=None, strip=True, extract=True, shared=False, **kwargs) -> str
Builds an ELF file with the specified binary data as its executable code.
Arguments:
data(str): Assembled code
vma(int): Load address for the ELF file
strip(bool): Strip the resulting ELF file. Only matters if ``extract=False``.
(Default: ``True``)
extract(bool): Extract the assembly from the ELF file.
If ``False``, the path of the ELF file is returned.
(Default: ``True``)
shared(bool): Create a Dynamic Shared Object (DSO, i.e. a ``.so``)
which can be loaded via ``dlopen`` or ``LD_PRELOAD``.
Examples:
This example creates an i386 ELF that just does
execve('/bin/sh',...).
>>> context.clear()
>>> context.arch = 'i386'
>>> context.bits = 32
>>> filename = tempfile.mktemp()
>>> context.clear(arch='i386')
>>> bin_sh = '6a68682f2f2f73682f62696e89e331c96a0b5899cd80'.decode('hex')
>>> data = make_elf(bin_sh)
>>> with open(filename,'wb+') as f:
... f.write(data)
... f.flush()
>>> os.chmod(filename,0777)
>>> filename = make_elf(bin_sh, extract=False)
>>> p = process(filename)
>>> p.sendline('echo Hello; exit')
>>> p.recvline()
'Hello\n'
"""
with context.local(**kwargs):
assembler = _assembler()
linker = _linker()
code = elf_template
code += '.string "%s"' % ''.join('\\x%02x' % c for c in bytearray(data))
code += '\n'
retval = None
log.debug(code)
if shared and vma:
log.error("Cannot specify a VMA for a shared library.")
tmpdir = tempfile.mkdtemp(prefix = 'pwn-asm-')
step1 = path.join(tmpdir, 'step1-asm')
step2 = path.join(tmpdir, 'step2-obj')
step3 = path.join(tmpdir, 'step3-elf')
if context.arch == 'thumb':
to_thumb = asm(shellcraft.arm.to_thumb(), arch='arm')
try:
with open(step1, 'wb+') as f:
f.write(code)
if not data.startswith(to_thumb):
data = to_thumb + data
_run(assembler + ['-o', step2, step1])
load_addr = []
if vma is not None:
load_addr = ['-Ttext-segment=%#x' % vma]
assembler = _assembler()
linker = _linker()
code = _arch_header()
code += '.string "%s"' % ''.join('\\x%02x' % ord(c) for c in data)
code += '\n'
_run(linker + load_addr + ['-N', '-o', step3, step2])
log.debug("Building ELF:\n" + code)
if strip:
_run([which_binutils('objcopy'), '-Sg', step3])
_run([which_binutils('strip'), '--strip-unneeded', step3])
tmpdir = tempfile.mkdtemp(prefix = 'pwn-asm-')
step1 = path.join(tmpdir, 'step1-asm')
step2 = path.join(tmpdir, 'step2-obj')
step3 = path.join(tmpdir, 'step3-elf')
try:
with open(step1, 'wb+') as f:
f.write(code)
_run(assembler + ['-o', step2, step1])
linker_options = ['-z', 'execstack']
if vma:
linker_options += ['--section-start=.shellcode=%#x' % vma,
'--entry=%#x' % vma]
elif shared:
linker_options += ['-shared', '-init=_start']
linker_options += ['-o', step3, step2]
_run(linker + linker_options)
if strip:
_run([which_binutils('objcopy'), '-Sg', step3])
_run([which_binutils('strip'), '--strip-unneeded', step3])
if not extract:
os.chmod(step3, 0755)
retval = step3
with open(step3, 'r') as f:
return f.read()
except Exception:
log.exception("An error occurred while building an ELF:\n%s" % code)
else:
shutil.rmtree(tmpdir)
with open(step3, 'r') as f:
retval = f.read()
except Exception:
log.exception("An error occurred while building an ELF:\n%s" % code)
else:
atexit.register(lambda: shutil.rmtree(tmpdir))
def asm(shellcode, vma = 0, **kwargs):
r"""asm(code, vma = 0, ...) -> str
return retval
@LocalContext
def asm(shellcode, vma = 0, extract = True, shared = False):
r"""asm(code, vma = 0, extract = True, shared = False, ...) -> str
Runs :func:`cpp` over a given shellcode and then assembles it into bytes.
To see which architectures or operating systems are supported,
look in :mod:`pwnlib.contex`.
To support all these architecture, we bundle the GNU assembler
and objcopy with pwntools.
Assembling shellcode requires that the GNU assembler is installed
for the target architecture.
See :doc:`Installing Binutils </install/binutils>` for more information.
Arguments:
shellcode(str): Assembler code to assemble.
vma(int): Virtual memory address of the beginning of assembly
Kwargs:
Any arguments/properties that can be set on ``context``
shellcode(str): Assembler code to assemble.
vma(int): Virtual memory address of the beginning of assembly
extract(bool): Extract the raw assembly bytes from the assembled
file. If :const:`False`, returns the path to an ELF file
with the assembly embedded.
shared(bool): Create a shared object.
kwargs(dict): Any attributes on :data:`.context` can be set, e.g.set
``arch='arm'``.
Examples:
.. doctest::
>>> asm("mov eax, SYS_select", arch = 'i386', os = 'freebsd')
'\xb8]\x00\x00\x00'
>>> asm("mov eax, SYS_select", arch = 'amd64', os = 'linux')
'\xb8\x17\x00\x00\x00'
>>> asm("mov rax, SYS_select", arch = 'amd64', os = 'linux')
'H\xc7\xc0\x17\x00\x00\x00'
>>> asm("ldr r0, =SYS_select", arch = 'arm', os = 'linux', bits=32)
'\x04\x00\x1f\xe5R\x00\x90\x00'
>>> asm("mov eax, SYS_select", arch = 'i386', os = 'freebsd')
'\xb8]\x00\x00\x00'
>>> asm("mov eax, SYS_select", arch = 'amd64', os = 'linux')
'\xb8\x17\x00\x00\x00'
>>> asm("mov rax, SYS_select", arch = 'amd64', os = 'linux')
'H\xc7\xc0\x17\x00\x00\x00'
>>> asm("mov r0, #SYS_select", arch = 'arm', os = 'linux', bits=32)
'R\x00\xa0\xe3'
"""
result = ''
with context.local(**kwargs):
assembler = _assembler()
linker = _linker()
objcopy = _objcopy() + ['-j', '.shellcode', '-Obinary']
code = ''
code += _arch_header()
code += cpp(shellcode)
assembler = _assembler()
linker = _linker()
objcopy = _objcopy() + ['-j', '.shellcode', '-Obinary']
code = ''
code += _arch_header()
code += cpp(shellcode)
log.debug('Assembling\n%s' % code)
log.debug('Assembling\n%s' % code)
tmpdir = tempfile.mkdtemp(prefix = 'pwn-asm-')
step1 = path.join(tmpdir, 'step1')
step2 = path.join(tmpdir, 'step2')
step3 = path.join(tmpdir, 'step3')
step4 = path.join(tmpdir, 'step4')
tmpdir = tempfile.mkdtemp(prefix = 'pwn-asm-')
step1 = path.join(tmpdir, 'step1')
step2 = path.join(tmpdir, 'step2')
step3 = path.join(tmpdir, 'step3')
step4 = path.join(tmpdir, 'step4')
try:
with open(step1, 'w') as fd:
fd.write(code)
try:
with open(step1, 'w') as fd:
fd.write(code)
_run(assembler + ['-o', step2, step1])
_run(assembler + ['-o', step2, step1])
if not vma:
shutil.copy(step2, step3)
if not vma:
shutil.copy(step2, step3)
if vma or not extract:
ldflags = ['-z', 'execstack', '-o', step3, step2]
if vma:
_run(linker + ['--section-start=.shellcode=%#x' % vma,
'--entry=%#x' % vma,
'-o', step3, step2])
ldflags += ['--section-start=.shellcode=%#x' % vma,
'--entry=%#x' % vma]
elif shared:
ldflags += ['-shared', '-init=_start']
elif file(step2,'rb').read(4) == '\x7fELF':
# Sanity check for seeing if the output has relocations
relocs = subprocess.check_output(
[which_binutils('readelf'), '-r', step2]
).strip()
if len(relocs.split('\n')) > 1:
log.error('Shellcode contains relocations:\n%s' % relocs)
else:
shutil.copy(step2, step3)
# In order to ensure that we generate ELF files with 4k pages,
# and not e.g. 65KB pages (AArch64), force the page size.
# This is a result of GNU Gold being silly.
#
# Introduced in commit dd58f409 without supporting evidence,
# this shouldn't do anything except keep consistent page granularity
# across architectures.
ldflags += ['-z', 'max-page-size=4096',
'-z', 'common-page-size=4096']
_run(objcopy + [step3, step4])
_run(linker + ldflags)
with open(step4) as fd:
result = fd.read()
except Exception:
log.exception("An error occurred while assembling:\n%s" % code)
elif file(step2,'rb').read(4) == '\x7fELF':
# Sanity check for seeing if the output has relocations
relocs = subprocess.check_output(
[which_binutils('readelf'), '-r', step2]
).strip()
if extract and len(relocs.split('\n')) > 1:
log.error('Shellcode contains relocations:\n%s' % relocs)
else:
shutil.rmtree(tmpdir)
return result
shutil.copy(step2, step3)
def disasm(data, vma = 0, byte = True, offset = True, **kwargs):
if not extract:
return step3
_run(objcopy + [step3, step4])
with open(step4) as fd:
result = fd.read()
except Exception:
lines = '\n'.join('%4i: %s' % (i+1,line) for (i,line) in enumerate(code.splitlines()))
log.exception("An error occurred while assembling:\n%s" % lines)
else:
atexit.register(lambda: shutil.rmtree(tmpdir))
return result
@LocalContext
def disasm(data, vma = 0, byte = True, offset = True, instructions = True):
"""disasm(data, ...) -> str
Disassembles a bytestring into human readable assembler.
@@ -526,74 +736,75 @@ def disasm(data, vma = 0, byte = True, offset = True, **kwargs):
Examples:
.. doctest::
>>> print disasm('b85d000000'.decode('hex'), arch = 'i386')
0: b8 5d 00 00 00 mov eax,0x5d
>>> print disasm('b85d000000'.decode('hex'), arch = 'i386', byte = 0)
0: mov eax,0x5d
>>> print disasm('b85d000000'.decode('hex'), arch = 'i386', byte = 0, offset = 0)
mov eax,0x5d
>>> print disasm('b817000000'.decode('hex'), arch = 'amd64')
0: b8 17 00 00 00 mov eax,0x17
>>> print disasm('48c7c017000000'.decode('hex'), arch = 'amd64')
0: 48 c7 c0 17 00 00 00 mov rax,0x17
>>> print disasm('04001fe552009000'.decode('hex'), arch = 'arm')
0: e51f0004 ldr r0, [pc, #-4] ; 0x4
4: 00900052 addseq r0, r0, r2, asr r0
>>> print disasm('4ff00500'.decode('hex'), arch = 'thumb', bits=32)
0: f04f 0005 mov.w r0, #5
>>>
>>> print disasm('b85d000000'.decode('hex'), arch = 'i386')
0: b8 5d 00 00 00 mov eax,0x5d
>>> print disasm('b85d000000'.decode('hex'), arch = 'i386', byte = 0)
0: mov eax,0x5d
>>> print disasm('b85d000000'.decode('hex'), arch = 'i386', byte = 0, offset = 0)
mov eax,0x5d
>>> print disasm('b817000000'.decode('hex'), arch = 'amd64')
0: b8 17 00 00 00 mov eax,0x17
>>> print disasm('48c7c017000000'.decode('hex'), arch = 'amd64')
0: 48 c7 c0 17 00 00 00 mov rax,0x17
>>> print disasm('04001fe552009000'.decode('hex'), arch = 'arm')
0: e51f0004 ldr r0, [pc, #-4] ; 0x4
4: 00900052 addseq r0, r0, r2, asr r0
>>> print disasm('4ff00500'.decode('hex'), arch = 'thumb', bits=32)
0: f04f 0005 mov.w r0, #5
"""
result = ''
with context.local(**kwargs):
arch = context.arch
os = context.os
arch = context.arch
os = context.os
tmpdir = tempfile.mkdtemp(prefix = 'pwn-disasm-')
step1 = path.join(tmpdir, 'step1')
step2 = path.join(tmpdir, 'step2')
tmpdir = tempfile.mkdtemp(prefix = 'pwn-disasm-')
step1 = path.join(tmpdir, 'step1')
step2 = path.join(tmpdir, 'step2')
bfdarch = _bfdarch()
bfdname = _bfdname()
objdump = _objdump() + ['-d', '--adjust-vma', str(vma), '-b', bfdname]
objcopy = _objcopy() + [
'-I', 'binary',
'-O', bfdname,
'-B', bfdarch,
'--set-section-flags', '.data=code',
'--rename-section', '.data=.text',
]
bfdarch = _bfdarch()
bfdname = _bfdname()
objdump = _objdump() + ['-d', '--adjust-vma', str(vma), '-b', bfdname]
objcopy = _objcopy() + [
'-I', 'binary',
'-O', bfdname,
'-B', bfdarch,
'--set-section-flags', '.data=code',
'--rename-section', '.data=.text',
]
if arch == 'thumb':
objcopy += ['--prefix-symbol=$t.']
else:
objcopy += ['-w', '-N', '*']
if arch == 'thumb':
objcopy += ['--prefix-symbol=$t.']
else:
objcopy += ['-w', '-N', '*']
try:
try:
with open(step1, 'w') as fd:
fd.write(data)
with open(step1, 'w') as fd:
fd.write(data)
res = _run(objcopy + [step1, step2])
res = _run(objcopy + [step1, step2])
output0 = subprocess.check_output(objdump + [step2])
output1 = output0.split('<.text>:\n')
output0 = _run(objdump + [step2])
output1 = output0.split('<.text>:\n')
if len(output1) != 2:
log.error('Could not find .text in objdump output:\n%s' % output0)
if len(output1) != 2:
log.error('Could not find .text in objdump output:\n%s' % output0)
result = output1[1].strip('\n').rstrip().expandtabs()
except Exception:
log.exception("An error occurred while disassembling:\n%s" % data)
else:
atexit.register(lambda: shutil.rmtree(tmpdir))
result = output1[1].strip('\n').rstrip().expandtabs()
except Exception:
log.exception("An error occurred while disassembling:\n%s" % data)
else:
shutil.rmtree(tmpdir)
lines = []
pattern = '^( *[0-9a-f]+: *)((?:[0-9a-f]+ )+ *)(.*)'
for line in result.splitlines():
o, b, i = re.search(pattern, line).groups()
try:
o, b, i = re.search(pattern, line).groups()
except:
lines.append(line)
continue
line = ''
@@ -601,7 +812,8 @@ def disasm(data, vma = 0, byte = True, offset = True, **kwargs):
line += o
if byte:
line += b
line += i
if instructions:
line += i
lines.append(line)
return '\n'.join(lines)
+9 -9
View File
@@ -2,12 +2,13 @@
Analogous to atexit, this module allows the programmer to register functions to
be run if an unhandled exception occurs.
"""
from __future__ import absolute_import
import sys
import threading
import traceback
from .context import context
from pwnlib.context import context
__all__ = ['register', 'unregister']
@@ -71,25 +72,23 @@ def _run_handlers():
If a handler raises an exception, it will be printed but nothing else
happens, i.e. other handlers will be run.
"""
context.clear()
for _ident, (func, args, kwargs, ctx) in \
sorted(_handlers.items(), reverse = True):
try:
with context.local(**ctx):
with context.local():
context.clear()
context.update(**ctx)
func(*args, **kwargs)
except SystemExit:
pass
except:
except Exception:
# extract the current exception and rewind the traceback to where it
# originated
typ, val, tb = sys.exc_info()
traceback.print_exception(typ, val, tb.tb_next)
# we rely on the existing excepthook to print exceptions
if hasattr(sys, 'excepthook'):
_oldhook = sys.excepthook
else:
_oldhook = None
_oldhook = getattr(sys, 'excepthook', None)
def _newhook(typ, val, tb):
"""_newhook(typ, val, tb)
@@ -99,6 +98,7 @@ def _newhook(typ, val, tb):
"""
if _oldhook:
_oldhook(typ, val, tb)
_run_handlers()
if _run_handlers:
_run_handlers()
sys.excepthook = _newhook
+3 -2
View File
@@ -7,12 +7,13 @@ this replacement module also defines :func:`unregister`.
This module also fixes a the issue that exceptions raised by an exit handler is
printed twice when the standard :mod:`atexit` is used.
"""
from __future__ import absolute_import
import sys
import threading
import traceback
from .context import context
from pwnlib.context import context
__all__ = ['register', 'unregister']
@@ -83,7 +84,7 @@ def _run_handlers():
func(*args, **kwargs)
except SystemExit:
pass
except:
except Exception:
# extract the current exception and rewind the traceback to where it
# originated
typ, val, tb = sys.exc_info()
+22
View File
@@ -0,0 +1,22 @@
#!/usr/bin/env python2
__all__ = [
'asm',
'checksec',
'common',
'constgrep',
'cyclic',
'debug',
'disasm',
'disablenx',
'elfdiff',
'elfpatch',
'errno',
'hex',
'main',
'phd',
'pwnstrip',
'scramble',
'shellcraft',
'unhex',
'update'
]
+72 -10
View File
@@ -1,13 +1,15 @@
#!/usr/bin/env python2
from __future__ import absolute_import
import argparse
import sys
from pwn import *
from pwnlib.commandline import common
from . import common
parser = argparse.ArgumentParser(
description = 'Assemble shellcode into bytes'
parser = common.parser_commands.add_parser(
'asm',
help = 'Assemble shellcode into bytes'
)
parser.add_argument(
@@ -20,7 +22,7 @@ parser.add_argument(
parser.add_argument(
"-f", "--format",
help="Output format (defaults to hex for ttys, otherwise raw)",
choices=['raw', 'hex', 'string']
choices=['raw', 'hex', 'string', 'elf']
)
parser.add_argument(
@@ -40,6 +42,28 @@ parser.add_argument(
help = 'The os/architecture/endianness/bits the shellcode will run in (default: linux/i386), choose from: %s' % common.choices,
)
parser.add_argument(
'-v', '--avoid',
action='append',
help = 'Encode the shellcode to avoid the listed bytes (provided as hex; default: 000a)'
)
parser.add_argument(
'-n', '--newline',
dest='avoid',
action='append_const',
const='\n',
help = 'Encode the shellcode to avoid newlines'
)
parser.add_argument(
'-z', '--zero',
dest='avoid',
action='append_const',
const='\x00',
help = 'Encode the shellcode to avoid NULL bytes'
)
parser.add_argument(
'-d',
@@ -48,23 +72,61 @@ parser.add_argument(
action='store_true'
)
def main():
args = parser.parse_args()
parser.add_argument(
'-e',
'--encoder',
help="Specific encoder to use"
)
parser.add_argument(
'-i',
'--infile',
help="Specify input file",
default=sys.stdin,
type=file
)
parser.add_argument(
'-r',
'--run',
help="Run output",
action='store_true'
)
def main(args):
tty = args.output.isatty()
data = '\n'.join(args.lines) or sys.stdin.read()
if args.infile.isatty() and not args.lines:
parser.print_usage()
sys.exit(1)
data = '\n'.join(args.lines) or args.infile.read()
output = asm(data.replace(';', '\n'))
fmt = args.format or ('hex' if tty else 'raw')
formatters = {'r':str, 'h':enhex, 's':repr}
if args.avoid:
output = encode(output, args.avoid)
if args.debug:
proc = gdb.debug_shellcode(output, arch=context.arch)
proc.interactive()
sys.exit(0)
args.output.write(formatters[fmt[0]](output))
if args.run:
proc = run_shellcode(output)
proc.interactive()
sys.exit(0)
if fmt[0] == 'e':
args.output.write(make_elf(output))
try: os.fchmod(args.output.fileno(), 0700)
except OSError: pass
else:
args.output.write(formatters[fmt[0]](output))
if tty and fmt is not 'raw':
args.output.write('\n')
if __name__ == '__main__': main()
if __name__ == '__main__':
pwnlib.commandline.common.main(__file__)
Loaded 100 of 941 files, more files were not shown because too many files have changed in this diff. Show more