전체 글

하고 싶은게 많은 사람입니다. 게임 개발도 하고 싶고 보안 공부도 하고싶어요 앱개발도...
if가 막혔다. select union으로 이를 우회하겠다 . 이제 에러메세지가 뜨질 않기 때문에 이를 생각하고 자동화를 해야한다. union select를 통해 이전 쿼리의 결과와 값을 합쳐서 나타낼 수 있다. 다만 컬럼의 수가 동일해야한다! 먼저 비밀번호의 길이를 구하였다. 이 원리는 서브쿼리는 레코드가 무조건 한개여야한다는 원리로, length(pw)=8일시에는 1이 반환되고 아닐 시에는 0,1 이 반환되어 에러가 뜨는 것이다. 일단 비밀번호의 길이는 8자라는 것을 알았다! 또한 비밀번호가 ascii로 인코딩 되있다는 것도 알아냈다. 이제 자동화를 돌려줄 수 있을 것 같다. (select 1 union select substr(pw,1,1)=?) 으로 구해줄 수 있을 것이다. 만약 참이라면 결과값에..
이제부터 푸는 방법이 바뀌었다. 오류기반 sql injection 기법들을 적극 활용하겠다. 가장 중요하게 쓴 것은 if(조건, ture, false) 였다. 먼저 if(length(pw)=32, pow(2,9999),1) 을 통해 pw의 길이가 32바이트라는 것을 알았다. 그리고 ascii 인코딩임을 확인하였다. 이제 substr로 단순한 brute forcing을 진행하였다. 코드는 다음과 같다 #!/usr/bin/python #-*-coding:utf-8 -*- import urllib,urllib2,requests header={"Cookie":"PHPSESSID=****"} password='' a='' for i in range(1,33) : admin=0 guest=0 b=[0,0,0,0] ..
atoi 함수는 문자열을 만나면 지금까지 읽은 숫자를 반환하고 종료한다. 그러나 몇가지 제어 문자는 그냥 무시를 하는데 그 문자들은 다음과 같다. 아스키 코드(16진수) 아스키 코드 (10진수) 문자 0x9 9 가로 탭 0xa 10 개행 0xb 11 수직 탭 0xc 12 뉴 페이지 0xd 13 케리지 리턴 0x20 32 공백 0x2b 43 + 0x2d 45 - 단 -는 뒷 숫자가 -로 인식되기 때문에 주의해야 한다. 포너블 할 때 쓸일이 있을지도 모른다.
이건 정리를 해두어야 할 것 같아서 글을 쓴다. 요약하자면 FS 세그먼트 부분과 , libc 메모리 쪽 컨트롤이 가능할 때 원하는 함수 실행이 가능하다 exit 함수에서는 필수적으로 _call_tls_dtors가 호출이 되는데, ida에 문제가 생겨서 좀 이상해졌지만 저 memory 부분은 free함수이다. 따라서 0x3f0b18과 fs 쪽 메모리를 건드려 줄 수 있다면 원하는 함수를 호출 시킬 수 있다. 이때 free hook 까지 이용하기 위해서는 메모리 세팅을 rdi=[rbx+8]=0 rax=[rbx+0x10]=아무 주소(실제 존재하는) rdx=[rbx+0x18] 으로 맞춰줘야 한다. rdi가 0인이유는 xor연산을 무시하기 위함이다. 저 rax에 주소를 넣어주는 이유는 lock을 하기 때문이다.
ptrace함수로만 뻘짓을 하고 있었는데, /proc/pid/mems 이 녀석이 그냥 프로세스의 메모리였다.. 파일열어서 fseek로 탐색해서 원하는곳에 쓰거나 읽을 수 있다. 단 바뀐 데이터 반영을 위해서는 계속 열고 닫았다가 반복해야함.. heap tracer는 파이썬으로 만들어야겠다. 이런 것이 있다니...
%0a(개행)을 통한 우회를 하였다.
상당히 어려웠던 문제이다... 솔직하게 인터넷 찾아보고 싶었다. 그런데 쉬운문제들은 봐도 상관없는데 어려운 문제는 안보고 푸는 재미가 있기때문에 좀 삽질을 많이 해보았고 혼자 풀어서 뿌듯했다 일단 bruteforce관련 문제이다. 그리고 regex와 like가 안되는데, regex는 정규표현식. 일단 pw 길이는 8일것이다. 귀신같이 아니였다 ㅋㅋㅋㅋ 물론 password 길이를 자동화 돌려도 되지만, 약간의 주의가 필요할 듯 보여서 (그리고 사실 부등호를 이용하면 이진탐색이 가능하고 이건 손으로 하는게 더 빠를 것 같아서. ) order by로 admin이 최상단에 위치하게 해주겠다. 비번은 12바이트이다. 사실 order by 쓸 필요가 없었던듯.. 이제 자동화를 돌려주면 된다. addslashes우..
갑자기 괄호가 들어간 것과 filter식에서 괄호가 없는 것을 봐서는 괄호를 쓰라는 것 같다. 근데 #도 필터링이라서 우회코드인 %00을 써주도록 하겠다. 그리고 페이로드가 6글자까지로 제한되서 sql cheat sheet를 참고해 or 1=1 대신 =0#을 사용해주었다. 이 원리는 ''이 빈공간이라 0으로 인식이 되서 그렇다고 한다. 부등호도 된다.
OSOR2
Osori Development Studio