본문 바로가기

전체 글143

remote BOF1 - [xinetd 데몬으로 작동하는 프로그램] 먼저 local bof만 하다가 remote bof가 무엇인지 모르는 분들을 위해서 간략하게 설명하자면 local bof의 경우에는 해당 서버의 계정이 있을때 서버에 접속하여 root권한 아니면 자신보다 더 높은 권한을 얻을 수 있게됩니다. 그런데 해당 서버에 계정이 없을 때는 지금 말하는 remote attack을 하면 됩니다. remote bof는 서버에서 제공하는 취약한 서비스 프로그램을 exploit하여 해당 서비스를 실행하는 데몬의 실행권한(쉘)을 가져올 수 있게 됩니다. 그럼 xinetd로 작동하는 프로그램에 대해서 remote bof를 해보도록 하겠습니다. 실습 환경은 Red Hat Linux release 8.0 입니다. 시작하기 전에 먼저 데몬의 2가지 실행 모드에 대해서 조금 알아보면 .. 2012. 7. 24.
upx 언패킹하기 - MUP(Manual UnPacking) upx로 패킹된 프로그램을 MUP로 upacking하는 방법을 알아보겠습니다. 예제 프로그램은 CodeEngn Basic 6번 문제로 하겠습니다. 파일 : 실행 화면은 아래와 같습니다. peid와 stud_pe로 패킹되어 있는지 확인해보면 UPX로 패킹된 것을 볼 수 있습니다. - peid - - stud pe- 위와 같은 툴 없이도 올리디버거로 확인해 볼 수 있습니다. 올리디버거를 열면 "Compressed code?"라는 메시지를 띄어줍니다. 이걸로 패킹에 대한 의심을 해볼 수 있습니다. ..... 그리고 코드 부분을 보면 위쪽에 pushad, 아래쪽에 popad와 jmp를 볼 수 있습니다. pushad가 있다면 패킹된 것으로 보면 됩니다. 패킹되어있더라도 프로그램을 실행하면 정상동작하기 위해 패킹을.. 2012. 7. 12.
base64 인코딩 & 디코딩 원리 Base64 인코딩은 64개의 문자를 이용하여 바이너리 데이터를 아스키 텍스트 데이터로 표현하기 위해 사용됩니다. base64는 8bit의 데이터(바이너리)를 6bit의 크기로 표현합니다. 따라서 24bit를 단위로 하여 3개의 문자에서 4개의 문자를 얻게 되는 것입니다. 위와 같이 abc를 base64 인코딩 하여 YWJj를 얻을 수 있게 됩니다. 여기서 6bit의 이진수는 아래의 base64 table을 이용하여 문자로 바꿔줍니다. 그리고 base64 인코딩 24bit 단위인데 인코딩할 문자가 3개(24bit) 단위가 아닐 때는 어떻게 되는지 알아보겠습니다. 위의 결과를 보면 a라는 문자 하나를 넣었을 때는 YQ==으로 base64 table에 없는 '=' 문자가 추가된 것을 알 수 있습니다. '='.. 2012. 6. 13.
c언어 - 확장 유클리드 알고리즘 확장 유클리드 알고리즘이란? 정수 m, n의 최대 공약를 gcd(m, n)으로 나타낼 때 1. 확장된 유클리드 호제법을 이용하여, am + bn = gcd(m,n)의 해가 되는 정수 a, b 짝을 찾아낼 수 있다. 2. 특히, m, n이 서로소(gcd(m,n) = 1)인 경우 유용한데, 그럼 위의 식은 am + bn = 1이 되고, 여기서 a는 모듈러 연산의 곱의 역원(modular multiplicative inverse)이 되기 때문이다. 등식 : s*m + t*n = gcd(m, n) r = r1-q*r2 --> r1 = q*r2 + r //초기 r1, r2는 (m, n)이고 q는 몫 r은 나머지 s = s1-q*s2 //초기 s1, s2는 1, 0이다. t = t1-q*t2 //초기 t1, t2는.. 2012. 5. 26.