본문 바로가기

보안

(8)
[wargame.kr] type confusion 오늘도 한문제~ type으로 생기는 취약점을 찾아내야 하는 건가 보다. json을 받아오고, gen_key()를 통해 sha1한 해시 값을 비교하는 로직이다. 뭘 어떻게 해야될지 모르겠어서 한참 들여다봤다... 내가 입력한 key값이 json으로 들어간다. 너무 또 json이나 gen_key()에 집중하다가.. == 연산자를 사용한 걸 이제야 발견했다...ㅠㅠ 짜증 내가 보낸 키값과 함수에 의해 생성된 키값을 비교해서 true를 return하면 되는데 sha1로 해시된 키값과 == 연산자를 통해 비교해서 true를 return 하는게 뭘까 찾아봤다. 숫지 0이나 true를 넘겨주면 되는 것 같다. 저기서 바로 0이나 true를 입력해버리면 {"key": 0}, {"key": true}가 되지 않고 문자열..
[wargame.kr] tmitter admin으로 로그인하는 문제 로그인과 회원가입을 할 수 있는 메인 화면 이거 다 안된다^^ 하;; 진짜 한참 별짓을 다하다가 max length가 32라길래 그 이상 길이로 join 해봤더니 프로필이 안뜬다. 또 저거갖고 한참 뻘짓하다가 내가 저 아이디를 만들때 "admin--nn ..."해서 n을 30번 누른거로 기억하는데 32자가 나온다. 말도 안되는 일이다. 저 위에 소스코드를 보면 max length가 32로 돼있어서 32자 이상으론 아예 입력이 안되나보다. 그리고 또 이상한게 있었다. "admin# 1"로 했는데 공백이 없어진 것 뭔가 공백이 무시되는 것 같다. 개발자 도구에서 max length를 33으로 수정하고 "admin 1"로 join하니까 1은 잘리고 공백도 무시돼서 admin으로 ..
[wargame.kr] md5 compare 와 며칠 밀렸다..ㅜㅜ 단순한 비교같다 md5 해시한 값을 ==비교하는건데 v1는 알파벳, v2는 숫자여야함 현대암호 수업이 생각났다. 문자열과 수열의 해시값이 충돌나는걸 찾으면 될 것 같았다. 근데 충돌쌍이 안나온다. 아니면 ==에서 취약점이 나도록 찾아야하는건가 해서 찾아봤다. php에서 e뒤에 모든 글자가 숫자라면 float형으로인식한다. 0e1234 = 0 * 10^1234 = 0 1e7 = 1 * 10^7 = 10^7 이런식으로 계산이 된다. 따라서 0e뒤에 무슨 숫자가 오건 모두 0 으로 인식하기 때문에 v1, v2의 해시값이 0e뒤에 문자없이 숫자가 오는 문자열, 수열을 찾으면된다. 이건 stack overflow의 질문에 많이 나온듯 하다. 플래그가 떴다.
[wargame.kr] DB is really GOOD 이제 슬슬 모르는 분야가 나온다 user name과 db의 연관성을 찾으라고 한다. 링크로 들어가면 이런 화면이 나온다. 로그인을 하면 이런 화면이 나온다. name으로 user를 구분하고 메모를 하는 방식 콘솔창을 보면 GET으로 db에 있는 메모를 갖고오고, POST로 write하는 것 같다. database 종류과 관련해서 서치를 해봤더니 mysql injection 공격으로 db 정보를 알 수 있는 것 같았다. 일단 admin으로는 로그인이 안된다. 그냥 막 'or 1=1--같은 쿼리문을 넣어보거나 특수문자를 넣어봤는데 write에서 뭘 할 수 있는건 아닌것 같았다. user login할 때 관련이 있다고 생각했다. /dare로 로그인했더니 저런 화면이 나왔다. 내가 /dare로 했을 때 open..
[wargame.kr] strcmp 오늘도 새로운 문제~ 생긴건 역시 간단하고 소스코드를 보자 일단, password를 strcmp로 검사하는 간단한 코드이다. 여태껏 그래왔듯이 strcmp에 취약점이 있을 것이라고 생각해서 찾아봤다. strcmp는 보통 strcmp(string1, string2) 이런방식으로 사용해야한다. 하지만 strcmp(string, array[])가 가능하다. php 5.2 버전까지는 1 또는 -1로 정수값이 return 됐는데, php 5.3 버전 이상부터는 NULL값을 return 한다고 한다. == 연산자를 사용했을 때 NULL==0이 되므로 아마 입력하는 password에 배열을 인자로 주면 strcmp($_POST['password'], $password)==0 을 만족할 수 있을 것 같다. postbi..
[wargame.kr] md5 password 오늘도 한 문제 이런 화면이 나오고 소스코드를 준다 일단 무슨말인지 모르겠다. password를 틀리게 입력하면 위에 wrong이라고 뜬다. 소스코드에서 눈에띄는점은 md5($ps, true)인데, 이게 뭔지 몰라서 찾아봤다. md5('value')로 하면 해쉬값을 반환해주고, md5('value', true)로 하면 결과값을 바이너리 형식으로 돌려준다. 너무 어이없었던게 md5(true)라고 서치하니까 바로 취약점이 떴다.. md5 해시 결과값에 '가 들어갈 수 있으므로 md5 함수에 들어가는 값이 해시함수를 적용했을 때, 1' or '1 같은 query가 나오면 되는 값을 찾으면 되는것, 129581926211651571912466741651878684928가 예시로 있어서 바로 적용했더니 풀렸다. ..
[wargame.kr] login filtering 가을에 풀다가 접은 문제 sql injection 문제라고 생각했다. 위가 소스코드고, 아래는 주석처리 돼있던 부분 아이디를 admin으로 해서 패스워드를 브루트포싱하는 건가 했는데 패스워드가 md5 해시돼서 저장되기 때문에 패스워드를 예측하기에는 너무 크립토같아서 제꼈다. 그럼 guest나 blueh4g1234ps로 얻어낼 수 있어야 할 것 == 연산자에 대해서 찾다가 얼마전 ctf문제에서 ===연산자가 나왔던 게 생각났다. ===는 데이터 타입까지 비교한다는게 기억이 나서 차이점을 찾아보니 ==은 1과 '1'을 같다고 취급하고, ===는 다르다고 취급한다. 따라서 차이점을 언급한 글들 에서는 변수값을 비교할 때 ===을 사용하는 것을 권장했다. (이 문제가 '변수 비교에 ===를 쓰지 않았다' 가 포..
PE 포맷 공부 목적으로 적는 글 PE 파일: Portable Excutable. 윈도우 운영체제에서 사용되는 실행파일. dll, obj코드, FON 폰트 파일 등을 위한 파일 형식. 즉, 실행 가능한 파일 형식을 말한다. PE 구조는 크게 PE Header와 PE Body로 나눌 수 있다. 헤더는 DOS Header, DOS Stub, NT Header, 그리고 Section Header들로 이루어져있고, PE Body는 Section들로 이루어져있다.PE Header의 끝부분과 각 section사이에는 Null Padding 영역이 존재하는데컴퓨터에서 파일, 메모리, 네트워크 패킷 등을 처리할 때 효율을 높이기 위해 최소 기본 단위 개념을 사용하는데 이 개념을 PE 파일에도 적용한 것. CFF explorer로..