본문 바로가기

[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 #만 붙이면 클리어가 뜨는걸 알수 있다. 첫번째 쿼리에서 이미 풀었는지 확인을 하고, 두번째 쿼리에서 문제의 포인트를 불러오고,세번째 쿼리에서 불러온 포인트를 이용해 업데이트 한다. 이렇게 추측했다. 그렇다면 첫번째 쿼리.. 더보기