@@ -1669,6 +1669,8 @@ def cmd_sessions(*args)
1669
1669
end
1670
1670
end
1671
1671
1672
+ last_known_timeout = nil
1673
+
1672
1674
# Now, perform the actual method
1673
1675
case method
1674
1676
when 'cmd'
@@ -1690,8 +1692,10 @@ def cmd_sessions(*args)
1690
1692
session = verify_session ( s )
1691
1693
next unless session
1692
1694
print_status ( "Running '#{ cmd } ' on #{ session . type } session #{ s } (#{ session . session_host } )" )
1693
- last_known_timeout = session . response_timeout
1694
- session . response_timeout = response_timeout
1695
+ if session . respond_to? ( :response_timeout )
1696
+ last_known_timeout = session . response_timeout
1697
+ session . response_timeout = response_timeout
1698
+ end
1695
1699
1696
1700
begin
1697
1701
if session . type == 'meterpreter'
@@ -1722,7 +1726,7 @@ def cmd_sessions(*args)
1722
1726
end
1723
1727
ensure
1724
1728
# Restore timeout for each session
1725
- session . response_timeout = last_known_timeout
1729
+ session . response_timeout = last_known_timeout if last_known_timeout
1726
1730
end
1727
1731
# If the session isn't a meterpreter or shell type, it
1728
1732
# could be a VNC session (which can't run commands) or
@@ -1735,13 +1739,15 @@ def cmd_sessions(*args)
1735
1739
session_list . each do |sess_id |
1736
1740
session = framework . sessions . get ( sess_id )
1737
1741
if session
1738
- last_known_timeout = session . response_timeout
1739
- session . response_timeout = response_timeout
1742
+ if session . respond_to? ( :response_timeout )
1743
+ last_known_timeout = session . response_timeout
1744
+ session . response_timeout = response_timeout
1745
+ end
1740
1746
print_status ( "Killing session #{ sess_id } " )
1741
1747
begin
1742
1748
session . kill
1743
1749
ensure
1744
- session . response_timeout = last_known_timeout
1750
+ session . response_timeout = last_known_timeout if last_known_timeout
1745
1751
end
1746
1752
else
1747
1753
print_error ( "Invalid session identifier: #{ sess_id } " )
@@ -1752,12 +1758,14 @@ def cmd_sessions(*args)
1752
1758
framework . sessions . each_sorted do |s |
1753
1759
session = framework . sessions . get ( s )
1754
1760
if session
1755
- last_known_timeout = session . response_timeout
1756
- session . response_timeout = response_timeout
1761
+ if session . respond_to? ( :response_timeout )
1762
+ last_known_timeout = session . response_timeout
1763
+ session . response_timeout = response_timeout
1764
+ end
1757
1765
begin
1758
1766
session . kill
1759
1767
ensure
1760
- session . response_timeout = last_known_timeout
1768
+ session . response_timeout = last_known_timeout if last_known_timeout
1761
1769
end
1762
1770
end
1763
1771
end
@@ -1767,29 +1775,33 @@ def cmd_sessions(*args)
1767
1775
session = verify_session ( sess_id )
1768
1776
# if session is interactive, it's detachable
1769
1777
if session
1770
- last_known_timeout = session . response_timeout
1771
- session . response_timeout = response_timeout
1778
+ if session . respond_to? ( :response_timeout )
1779
+ last_known_timeout = session . response_timeout
1780
+ session . response_timeout = response_timeout
1781
+ end
1772
1782
print_status ( "Detaching session #{ sess_id } " )
1773
1783
begin
1774
1784
session . detach
1775
1785
ensure
1776
- session . response_timeout = last_known_timeout
1786
+ session . response_timeout = last_known_timeout if last_known_timeout
1777
1787
end
1778
1788
end
1779
1789
end
1780
1790
when 'interact'
1781
1791
session = verify_session ( sid )
1782
1792
if session
1783
- last_known_timeout = session . response_timeout
1784
- session . response_timeout = response_timeout
1793
+ if session . respond_to? ( :response_timeout )
1794
+ last_known_timeout = session . response_timeout
1795
+ session . response_timeout = response_timeout
1796
+ end
1785
1797
print_status ( "Starting interaction with #{ session . name } ...\n " ) unless quiet
1786
1798
begin
1787
1799
self . active_session = session
1788
1800
session . interact ( driver . input . dup , driver . output )
1789
1801
self . active_session = nil
1790
1802
driver . input . reset_tab_completion if driver . input . supports_readline
1791
1803
ensure
1792
- session . response_timeout = last_known_timeout
1804
+ session . response_timeout = last_known_timeout if last_known_timeout
1793
1805
end
1794
1806
end
1795
1807
when 'scriptall'
@@ -1811,8 +1823,10 @@ def cmd_sessions(*args)
1811
1823
session = framework . sessions . get ( sess_id )
1812
1824
end
1813
1825
if session
1814
- last_known_timeout = session . response_timeout
1815
- session . response_timeout = response_timeout
1826
+ if session . respond_to? ( :response_timeout )
1827
+ last_known_timeout = session . response_timeout
1828
+ session . response_timeout = response_timeout
1829
+ end
1816
1830
begin
1817
1831
if script_paths [ session . type ]
1818
1832
print_status ( "Session #{ sess_id } (#{ session . session_host } ):" )
@@ -1825,7 +1839,7 @@ def cmd_sessions(*args)
1825
1839
end
1826
1840
end
1827
1841
ensure
1828
- session . response_timeout = last_known_timeout
1842
+ session . response_timeout = last_known_timeout if last_known_timeout
1829
1843
end
1830
1844
else
1831
1845
print_error ( "Invalid session identifier: #{ sess_id } " )
@@ -1837,8 +1851,10 @@ def cmd_sessions(*args)
1837
1851
session_list . each do |sess_id |
1838
1852
session = verify_session ( sess_id )
1839
1853
if session
1840
- last_known_timeout = session . response_timeout
1841
- session . response_timeout = response_timeout
1854
+ if session . respond_to? ( :response_timeout )
1855
+ last_known_timeout = session . response_timeout
1856
+ session . response_timeout = response_timeout
1857
+ end
1842
1858
begin
1843
1859
if session . type == 'shell'
1844
1860
session . init_ui ( driver . input , driver . output )
@@ -1849,7 +1865,7 @@ def cmd_sessions(*args)
1849
1865
next
1850
1866
end
1851
1867
ensure
1852
- session . response_timeout = last_known_timeout
1868
+ session . response_timeout = last_known_timeout if last_known_timeout
1853
1869
end
1854
1870
end
1855
1871
0 commit comments