본문 바로가기

전체

[plaid CTF 2013] web 150 write up 이번 plaid CTF 에서 가장 만만했던 문제는 web 150 charseet 문제밖에 없었다. 나머지는 탈탈탈 털렸다. 특히 64비트 elf 문제들....... 그 문제들과는 반대로 web 150문제는 너무 쉬워서 거의 바로 풀었던것 같다. union sql injection 문제였는데, 취약점은 search를 하는부분에 있었다. 우선 로그인을 하고나서, search 부분에 들어간후, ' (따옴표) 를 삽입해보면 아래와 같은 에러가 뜬다. Failed to query database: SELECT c.id, c.cname, DATE_FORMAT(c.lastedited, '%d %M %Y @ %H:%i') as lastedited, c.owner, st.name as tname, ca.name as c.. 더보기
리버스쉘과 바인드쉘이 안될때 대처법 (dup2+/bin/sh) CTF를 풀때 정말 난감한 환경들이 있다. 예를들어, 특히 우리학교. 우리학교처럼 외부접속을 아예 막아버린 상태에선 리버스텔넷이 불가능하다. 이런 상황에서 CTF서버측에 방화벽이 켜져있으면 바인드쉘도 불가능하기때문에, 다른방법을 써야하는데 dup2+쉘을 이용하면 가능하다. dup2에 대해서 우선 설정하자면, dup2(a,b) 의 형식인데 원래 dup 함수에 대해 검색해보면 알겟지만, 파일 디스크립터를 복사해주는 역할을 하고 파일디스크립터 번호를 안쓰는 랜덤번호로 지정해준다. dup대신 dup2를 쓰게되면, 번호를 지정해서 변경할수 있는데, 파일디스크립터 a를 특정번호 b로 지정해준다. 이때, b를 1로 지정해주게되면 stdout으로 지정이 되어, stdout의 결과가 클라이언트로 전송이 된다. 그래서, .. 더보기
[Codegate 2013] Web 400 simple write up 이 문제는 if문과 rand를 이용한 문제 수학문제 4문제가 주어지고, 다 풀면 원래는 700점이 한계인데, 3000점을 넘어야한다. 처음엔 blind injection을 통해 숨겨진 문제를 찾는거라 생각했다.그래서 시간을 좀 많이 소모했다. 근데 블라인드 인젝션을 힘겹게 해서 데이터를 다 보고나니, 포인트가 있는 문제는 그 4개가 전부였다. 그렇다면, 방법은 1,2,3,4번 문제를 여러번 풀어야 한다는 소리인데.. 파라메터를 조작해서 인젝션을 하다보면, 정답에 + or 1 like 1 #만 붙이면 클리어가 뜨는걸 알수 있다. 첫번째 쿼리에서 이미 풀었는지 확인을 하고, 두번째 쿼리에서 문제의 포인트를 불러오고,세번째 쿼리에서 불러온 포인트를 이용해 업데이트 한다. 이렇게 추측했다. 그렇다면 첫번째 쿼리.. 더보기
[Codegate 2013] Binary 100 simple write up peid를 통해서, 혹은 그냥 프로그램을 바로 켜봐도 느낌상 C# 파일이라는것을 확인할수 있다. 그러므로, net reflector를 이용해서 디컴파일했다. 코드를 쭉 살펴보다보면, 우리에게 보여주는 중요한 string은 암호화 되어있고 xor과 AES encrypt로 되어있다는것을 알수있다. blocksize가 0x100이므로, Rijndael 방식중에서도 256비트라는것을 알수있고, key값은 9e2ea73295c7201c5ccd044477228527 이다. iv값도 key값과 같은 값을 사용한다. 그리고 중요한점은, utf-8방식으로 해야한다는것이다. 그래서 온라인상에 있는 rijndael decrypt 페이지에서는 안되더라.. 그래서 처음엔 python으로 진행하다가 나중에 php를 이용해서 디코.. 더보기
[Codegate 2013] Web 300 simple write up 전형적인 블라인드 인젝션 문제다. contact를 하는 부분(이름,메일,question,메세지 보내는 부분)에서 인젝션이 가능하다. question 파라메터를 이용해서 블라인드 인젝션을 했다. 그러면 멤버들의 비밀번호가 md5로 해쉬 되어있는걸 확인할수 있고 사전식으로 online md5 decoding 페이지들을 이용해서 디코딩이 가능하다. 그리고 소스보기를 통해 보면, 자바스크립트가 숨겨져있고, 숨겨진 로그인페이지가 있다는걸 알수 있다 그리고 나서 하나씩 로그인해보면 Hound 해킹을 의뢰한 사람과 시간이 나타난다. [python] import httplib,urllib; import sys import time # Blind SQL injection # setting #toget = 'databas.. 더보기
[Codegate 2013] Web 100 simple write up 비밀번호 해쉬를 하는데 세번째 인자가 true이다. raw 형식으로 hash를 한다는것을 알수있다. 예전에 wargame에서 풀어본 경험이 있는데.. 아마 webhacking.kr에 있었던 문제 같았다. 경험이 있으므로.. 쉽게 풀었는데 예전엔 md5로 해쉬를 했는데, 이번엔 좀 다른방법으로 해쉬를 한다. 그러므로 새로 php를 짰고, 'or' 이나 '||' 이 들어있는 해쉬를 하나씩 돌려서 찾아봤고, 결과를 하나씩 넣어보다 보니 로그인 성공 (숫자 몇이 성공이었는지는 정확히 기억이 안난다) 비밀번호를 찾는 코드 $i의 값이 비밀번호다. $i=0; echo "start\n"; for ($i=119335433; $i 더보기
Failed to allocate memory: 8 해결법 C:\Users\[사용자명]\.android\avd\[avd 이름].avd\config.ini 위의 파일을 열어서, hw.ramSize=1024 와 같은 내용을 hw.ramSize=1024MB 로 변경후 실행하면 정상 작동 됩니다. 더보기
SQL injection addslashes, utf-8 변환시 우회법 php mysql에서 addslashes를 이용해서 인젝션을 차단하고 있거나, euc-kr을 utf-8로 변환을 하는 작업이 있을경우, 멀티바이트를 이용해서 우회가 가능합니다.두가지 케이스 모두 솔루션은 같으므로, 한번에 설명하겠습니다. addslashes는 입력스트링 중에 quote(') 가 있다면 앞에 \를 붙여줌으로써, " \' " 로 변환됩니다.그래서, quote를 소용없게 만드는것이죠. 하지만, 멀티바이트로 보내면 소용이 없습니다. 예를 들어 url encoding 구문으로 %bf%27을 보낸다면, (%27이 quote입니다.)%bf%5C%27 로 변하게 되고. (%5C가 \ 입니다.)결국, %bf%5C 가 한글자로 읽히게 됩니다. (유니코드이기 때문에.)그리고 %27이 \의 간섭을 안받고 자유.. 더보기
LPAD,bin,ascii를 이용한 효과적인 Blind SQL Injection (Only mysql) Blind SQL injection은 아무래도 브루트포싱이다보니, 한글자를 알아내기까지 많은 쿼리를 보내야합니다.빠릿빠릿한 서버라면, 별 상관없을수도 있지만. 느린서버를 공략할때는 너무 답답합니다.하지만, LPAD,bin,ascii와 같은 함수들을 이용하면, 쿼리의 횟수를 확 줄일수 있습니다. 기존의 방법대로라면 한글자를 알아내기까지 최대 약 70개정도의 쿼리를 보내야 한다면.이 방법을 사용했을땐, 8번의 쿼리만으로 글자를 알아낼수 있습니다. 함수들을 설명해드리면,ascii는 캐릭터를 숫자로 변환하는 함수입니다.ex) 'A' -> 65, 'a' -> 94, '0' ->48 bin은 숫자를 2진법 형태의 스트링으로 변환하는 함수입니다.ex) 12 -> '1100', 65->'1000.. 더보기
Time-based Blind Injection 이번에도 문법은 MySQL 기준으로 설명하겠습니다. Blind SQL injection을 할때, True or False에 따라 결과값이 달라진다면, 간단히 해낼수있지만.True or False에 따른 화면 결과값이 달라지지 않을때가 있습니다. 그럴땐 if함수와 sleep함수를 이용하면 됩니다.그리고, 시간을 재야하기 때문에 파이썬등의 스크립트를 이용한 공격이 필수라고 생각됩니다.. Sleep은 대부분 아실텐데, sleep(x) 라면, x초간 멈추는겁니다. 그리고 if함수의 구성을 보자면,if(조건,참일때 결과값,거짓일때 결과값)입니다. 그래서 참일때, sleep(x)을 걸고, 요청을 보내서 response가 x초 이후에 도착했다면, True라고 판단하면 됩니다.물론, 평소의 response가 오기까지 .. 더보기