We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
All sad people like poetry, happy people like songs.
OpenSSL
bypass.phpX
X
hex为0x90
bypass.php X
SQL
Awvs
url.txt
url
单个 url 传入 wvs_console.exe 中被执行
wvs_console.exe
wvs_console.exe 执行完之后会将结果保存,保存的结果自定义为扫描的 url 命名,通过 os.listdir(path) 可以查看是否已经有以这个命名的扫描结果,如果有的话,证明已经扫描过的 url ,可以跳过,继续下一个目标 url,或者用队列的方式,将所有的目标保存在队列中,利用队列的安全性,不会有相同的目标被二次扫描
os.listdir(path)
os.system(command) 可以运行命令行命令,但是在 Python2.4 后引入新模块 subprocess 替换
os.system(command)
Python2.4
subprocess
subprocess 模块
使用 subprocess 包中的函数创建子进程时,需要注意:
returncode
subprocess 模块定义了一个类: Popen,可以通过使用Popen来创建进程,并于进程进行复杂的交互
Popen
subprocess Popen(args, bufsize=0, executable=None, stdin=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)
args
list
元组
executable
stdin
stdout
stderr
PIPE
None
shell
true
env
env=None
subprocess.PIPE 管道工具
subprocess.PIPE
subprocess.STDOUT
Popen 的方法
Popen.poll()
Popen.wait()
Popen.communicate(input=None)
input
Communicate()
(stdoutdata, stderrdata)
Popen.send_signal(signal)
Popen.terminate()
(stop)
windows
Windows API TerminateProcess()
Popen.kill()
Popen.pid
Popen.returncode
p = subprocess.Popen("dir", shell=True) p.wait()
p.wait()
a = p.wait()
a
print a
如果想得到进程的输出,管道是个很方便的方法
(stdoutput, erroutput) = p.communicate()
p.communicate
p=subprocess.Popen("dir", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) (stdoutput,erroutput) = p.communicate()
communicate
tuple
p=subprocess.Popen("dir", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) (stdoutput,erroutput) = p.communicate()
p=subprocess.Popen("dir", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) while True: buff = p.stdout.readline() if buff == '' and p.poll() != None: break
p=subprocess.Popen("longprint", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) p.wait()
longprint
p.stdout.readline
p.communicate()
p.returncode
subprocess.Popen
subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False) 父进程等待子进程完成,返回退出信息
subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
回到上面的调用 Awvs 进行扫描,首先需要保存,用 时间\目标 的方式保存
时间\目标
时间
目标
xml
wvs
csv
subprocess.Popen()
Popen.communicate()
subprocess.call()
Seebug
The text was updated successfully, but these errors were encountered:
No branches or pull requests
0x01 Wooyun
OpenSSL
bypass.phpX
:X
的hex为0x90
bypass.php X
: 扩展名和X
中间加个空格SQL
注入0x02 Awvs自动化扫描
Awvs
批量扫描url.txt
中的url
单个
url
传入wvs_console.exe
中被执行wvs_console.exe
执行完之后会将结果保存,保存的结果自定义为扫描的url
命名,通过os.listdir(path)
可以查看是否已经有以这个命名的扫描结果,如果有的话,证明已经扫描过的url
,可以跳过,继续下一个目标url
,或者用队列的方式,将所有的目标保存在队列中,利用队列的安全性,不会有相同的目标被二次扫描os.system(command)
可以运行命令行命令,但是在Python2.4
后引入新模块subprocess
替换subprocess
模块subprocess
模块的目的就是启动一个新的进程并且与之通信使用
subprocess
包中的函数创建子进程时,需要注意:returncode
不为0,父进程如何处理subprocess
模块定义了一个类:Popen
,可以通过使用Popen
来创建进程,并于进程进行复杂的交互subprocess Popen(args, bufsize=0, executable=None, stdin=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)
args
应该是一个程序参数的序列(如:list
,元组
)或者一个单一的字符串,默认情况下,如果args
是一个序列,那么执行的程序是args
的第一个元素(第一个元素通常是可执行文件的路径),也可以显式的使用executable
参数来指定可执行文件的路径,如果args
是一个字符串,那么其解释将于平台无关stdin
、stdout
、stderr
分别表示程序的标准输入、输出、错误句柄,它们可以是PIPE
,文件描述符或文件对象,也可以设置为None
,表示从父进程继承shell
设置为true
,程序将通过shell
来执行env
是字典类型,用于指定子进程的环境变量,如果env=None
,子进程的环境变量将从父进程继承subprocess.PIPE
管道工具Popen
对象时,subprocess.PIPE
可以初始化stdin
、stdout
或stderr
参数,表示与子进程通信的标准流subprocess.STDOUT
Popen
对象时,用于初始化stderr
参数,表示将错误通过标准输出流输出Popen
的方法Popen.poll()
用于检查子进程是否已经结束,设置并返回returncode
属性Popen.wait()
等待子进程结束,设置并返回returncode
属性。Popen.communicate(input=None)
stdin
发送数据,或从stdout
和stderr
中读取数据。可选参数input
指定发送到子进程的参数。Communicate()
返回一个元组:(stdoutdata, stderrdata)
。注意:如果希望通过进程的stdin
向其发送数据,在创建Popen
对象的时候,参数stdin
必须被设置为PIPE
。同样,如果希望从stdout
和stderr
获取数据,必须将stdout
和stderr
设置为PIPE
Popen.send_signal(signal)
向子进程发送信号Popen.terminate()
(stop)
子进程,在windows
平台下,该方法将调用Windows API TerminateProcess()
来结束子进程。Popen.kill()
杀死子进程。Popen.pid
获取子进程的进程ID。Popen.returncode
获取进程的返回值。如果进程还没有结束,返回None
p.wait()
可以得到命令的返回值,如果a = p.wait()
,那么a
就是returncode
,print a
就是0(表示执行成功)如果想得到进程的输出,管道是个很方便的方法
(stdoutput, erroutput) = p.communicate()
p.communicate
会一直等到进程退出,并将标准输出和标准错误输出返回,这样就可以得到子进程的输出了communicate
给stdin
发送数据,然后使用一个tuple
接收命令的执行结果stderr
参数设置为subprocess.STDOUT
就可以了longprint
是一个假想的有大量输出的进程,输出到一定量,死锁就会发生,当然,如果用p.stdout.readline
或者p.communicate
去清理输出,那么无论输出多少,死锁都是不会发生的。或者不使用管道,比如不做重定向,或者重定向到文件,也都是可以避免死锁的p.communicate
,这个方法会把输出放在内存,而不是管道,如果需要获得程序返回值,可以在调用p.communicate()
之后去p.returncode
的值,也就是说如果使用subprocess.Popen
,就不使用p.wait()
,而使用p.communicate()
阻塞,来等待外部程序执行完成subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
父进程等待子进程完成,返回退出信息args
描述的命令,等待命令完成,然后返回returncode
属性回到上面的调用
Awvs
进行扫描,首先需要保存,用时间\目标
的方式保存时间
就是扫描的日期目标
就是url
xml
,一个wvs
,一个csv
0x03 一天总结
subprocess
模块的使用subprocess.Popen()
和Popen.communicate()
一起使用阻塞,而不用Popen.wait()
subprocess.call()
阻塞,子进程不需要交互的情况Seebug
上提交了一个漏洞详情,换了个邀请码,明天开始需要多加一项Seebug
的学习了The text was updated successfully, but these errors were encountered: