[Wargame Write-up]/Challengeland
[Challengeland] [Programming] Programming 2 (220p)
Kevin S.
2017. 3. 25. 06:14
Programming 2번째 문제이다.
각 변수가 오른편과 같을 때, 주어진 식의 값을 계산해 Response 페이지로 전송하는 문제이다.
계속 새로고침 해보면 연산자까지도 바뀌는 것을 볼 수 있다.
실패 메시지는 전과 동일하다.
A~E 변수에 추출한 값을 넣어, 추출한 식을 eval 함수를 이용해 계산하도록 작성했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85 |
#-*- coding: utf-8 -*-
import requests
import getpass
import sys
import os
def clear_screen():
if sys.platform == 'win32':
os.system("cls")
else:
os.system("clear")
def get_session(login_url, username, password):
data = {}
try:
data["user"] = username
data["pass"] = password
print("\n [*] Connecting to " + login_url)
session = requests.Session()
if "200" not in str(session.post(login_url, data=data)):
raise requests.exceptions.ConnectionError
print(" [*] Connection Success\n")
except requests.exceptions.ConnectionError:
print(" [*] Connection Failed\n")
sys.exit()
return session
def extract_necessary_string(session, target_url, find_text):
response = session.get(target_url).text
expression = response[response.find(find_text[0][0]) + len(find_text[0][0]):response.find(find_text[0][1])]
parsed_operands = response[response.find(find_text[1][0]) + len(find_text[1][0]):].split(',')
extracted_operands = list()
for operand in parsed_operands:
extracted_operands.append(int(operand.split('=')[1]))
print(" [*] Expression: " + expression)
print(" [*] Operands:"),
print(extracted_operands)
A = extracted_operands[0]; B = extracted_operands[1]; C = extracted_operands[2]
D = extracted_operands[3]; E = extracted_operands[4]
result = eval(expression)
print(" [*] Extracted Strings: %s" % result)
return result
def submit_answer(session, submit_url, answer):
print(" [*] Answer to submit: %s\n" % answer)
response = session.post(submit_url, data={"solve": answer}).text.encode('utf-8')
if "Slow" not in response:
print(" [*] Submit Success :)")
print("\n [*] The Key is " + response)
else:
print(" [*] Submit Failed :(")
def main():
target_domain = "http://challengeland.co/"
target_url = target_domain + "Challenges/Programming/aff396c38aRequest"
submit_url = target_domain + "Challenges/Programming/aff396c38aResponse"
login_url = target_domain + "Site/Login"
find_text = [[": ", " ="], ["with"]]
clear_screen()
session = get_session(login_url, raw_input("\nUsername: "), getpass.getpass())
submit_answer(session, submit_url, extract_necessary_string(session, target_url, find_text))
if __name__ == '__main__':
main()
|
cs |
성공하면 키 값을 보내주는데,
받은 값을 입력하면
Clear~