[Problem]



소가 있다.

소를 눌러보면



아래와 같은 수열이 나온다.


[Scenario]


소 아래에서 볼 수 있듯이, a[30]에 해당하는 수열의 길이를 구하는 것이 이 문제의 핵심이다.

이 수열이 무엇인고 하니, 개미수열이라고 하더라.

하지만 잘 살펴보면 일반적인 개미수열과 달리, 수가 뒤집혀 있다는 것을 알 수 있다.

그에 맞게 코딩해주자. 물론 나는 코알못이기 때문에 발코딩인 것은 이해해주자.


[Payload]

#coding: utf-8
import sys

ant_list = [1,]
for i in range(30):
    string = str(ant_list[i])[::-1]
    cnt = 1
    result = ""
    for j in range(len(string)):
        if j+1 >= len(string):
            result += string[j] + str(cnt)
            break
        elif string[j] == string[j+1]:
            cnt += 1
        else:
            result += string[j] + str(cnt)
            cnt = 1
    ant_list.append(result[::-1])
    print ant_list[i]

print len(ant_list[30])

payload.py




[Result]


a[30] = 5808

next stage : 5808.html


'Wargame > PythonChallenge' 카테고리의 다른 글

[PythonChallenge] Level10  (1) 2017.02.15
[PythonChallenge] Level9  (0) 2017.02.15
[PythonChallenge] Level8  (0) 2017.02.15
[PythonChallenge] Level7  (0) 2017.02.14
[PythonChallenge] Level6  (0) 2016.06.28
[PythonChallenge] Level5  (0) 2016.06.27
  1. mtucx 2017.09.11 22:17

    ☺♪ hi choiys it's a long time :p
    i just want to ask you if you can give an invt
    in tistory blog
    i just forget all my gmail info & tistory info ☺

    감사





;와 |, &가 필터링 되어 있습니다.







'Wargame > Natas:OverTheWire' 카테고리의 다른 글

[Natas] Level12  (0) 2016.10.23
[Natas] Level11  (0) 2016.10.22
[Natas] Level10  (0) 2016.10.22
[Natas] Level9  (0) 2016.10.22
[Natas] Level8  (0) 2016.10.22
[Natas] Level7  (0) 2016.10.22

SuNiNaTaS

Web Level10(Prob_23)




써니나타스 웹 카테고리의 마지막 문제입니다.

Hard Blind SQL Injection 문제라고 합니다.

이번에는 admin이라는 단어 자체가 필터링이 되어 있습니다. 이를 우회하여 admin 계정의 패스워드를 알아내는 것이 우리의 목표가 되겠습니다.



기본으로 주어지는 계정인 guest/guest 계정을 이용하여 주물럭거리다 보니 위와 같은 형태로 문자열 필터링 우회가 가능하다는 것을 알아냈습니다.



그래서 22번 문제와 동일한 방법으로 admin 계정의 pw 길이를 먼저 알아냈습니다.



그런데 쿼리를 작성하다 보니 자꾸 No Hack. 필터링이 걸리기에 확인을 해봤더니 역시나 쿼리 길이 제한이 있었습니다.

우와 같이 30byte까지는 허용 범위이지만



30byte를 넘어가는 순간 No hack을 뱉어내고 종료시킵니다. 따라서 우리는 30byte 이내의 쿼리를 작성해야 하는 상황이 됩니다.



한참 고민하던 중 22번과 다르게 23번 문제는 or 이 필터링 되지 않았다는 것을 알고 바로 이용했습니다.

substring, substr이 필터링 되기 때문에 이를 우회하기 위해 left 함수와 right 함수를 함께 사용하여 기능을 구현했습니다.

또한 쿼리를 작성하다보니 계속 30byte를 넘겨서 고민을 계속 해본 결과 위와 같은 형태의 쿼리문이 완성되었습니다.



딱 30byte



바로 python으로 브포 코드를 작성하여 key값을 찾아냈습니다.



SuNiNaTaS web level all clear!

'Wargame > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS System Level2(Prob_24)  (0) 2016.05.10
SuNiNaTaS System Level1(Prob_16)  (0) 2016.05.10
SuNiNaTaS Web Level10(Prob_23)  (0) 2016.05.10
SuNiNaTaS Web Level9(Prob_22)  (0) 2016.05.09
SuNiNaTaS Web Level8  (0) 2016.05.09
SuNiNaTaS Web Level7  (0) 2016.05.09

OverTheWire_Wargame Bandit

[ level10 -> level11 ]


자, 드디어 레벨10입니다. 한참 한 것 같은데 아직 절반도 못 왔네요.. 부지런히 해야겠습니다.

힌트부터 살펴보죠.


이전 레벨과 마찬가지로 data.txt에 패스워드가 들어있으며, base64로 인코딩 된 데이터가 패스워드라고 합니다.

확인해보죠.


위와 같이 base64로 인코딩 된 데이터를 확인 할 수 있는데, 이를 python으로 디코딩 해줍시다.


바로 패스워드를 뱉어줍니다.


OverTheWire_Wargame Bandit

[ level9 -> level10 ]


자, 이제 레벨10으로 가는 마지막 관문이 남았습니다. 힌트를 확인 해 보도록 하죠.



이전 레벨과 동일하게 data.txt 안에 패스워드가 저장되어 있으며, 몇 개의 '='로 시작하는 문자열에 읽을 수 있는 문자열이 약간 있다고 합니다.

확인해봅시다!



grep으로 '==='를 필터링 하여 실행 해 보니 'Binary file (standard input) matches'라는 오류를 뱉으며 제대로 실행이 되지 않습니다.

이 오류는 바이너리 파일을 grep 했을 때 나타나는 오류라고 하는데, 이 때 -a 옵션을 주면 바이너리를 텍스트로 읽어들여 제대로 필터링 할 수 있다고 합니다.



-a 옵션을 걸어주고 grep 해 봅시다.


몇 개의 equals 뒤에 key 값이 나타난 걸 확인 할 수 있습니다.


+ Recent posts