study 973

wargame.kr php? c?

c의 오버플로우 관련 문제. d1과 d2를 post로 받은 후 p7.c파일을 컴파일해서 /tmp/p7로 만든 후 d1을 인자로 줘서 프로그래밍 실행 후 결과가 1이 아니면서 d2와 나온 결과가 같으면 키값 출력. 우선 뭔지 알려면 컴파일하게 되는 p7.c소스코드를 봐야된다. p7.c를 주소창에 입력해보면 소스코드가 나온다. #include #include void nono(); int main(int argc,char **argv){ int i; if(argc!=2){nono();} i=atoi(argv[1]); if(i4){nono();} if(i

webhacking/etc 2014.10.04

사칙연산 계산 서버, 클라이언트

이전에 소켓 공부하면서 소켓 프로그래밍에 익숙해지기 위해 짜봤던 계산 서버입니다. 코드는 제일 아래에.. 서버를 먼저 실행시키고 클라이언트를 실행시켰을시 첫 화면. 오른쪽이 서버, 왼쪽이 클라이언트. 클라이언트에 계산 식을 입력하면 서버에 자동으로 식과 답이 나타납니다. 클라이언트에서 q를 눌러 종료하면 클라이언트는 종료되고, 서버는 총 5대의 클라이언트를 기다릴수 있으니 다른 클라이언트 4대를 기다립니다. 새로 연결된 모습. 새로 연결되고 위와 같습니다. 지금 보니까 서버 부분에서 클라이언트 소켓 받아들이는 부분을 쓰레드로 처리 안해서 한번에 한 클라이언트만 처리 가능하겠네요... 처음에 c언어로 계산 서버, 클라이언트 짜보려고 했는데 c언어로 짜기에는 너무 어렵네요. 코드 라인수도 파이썬의 두배 이상..

Python/2.7 for fun. 2014.10.03

wargame.kr strcmp

코드게이트 2013에서 나왔던 php strcmp취약점. 찾아보니 루비야님이 잘 정리 해놓으셨음... http://blog.naver.com/withrubiya/70173344266 데이터 전송시 배열형태로 전송하면 된다. password[]=a 배열 형태이면 무조건 0이 반환.... 근데 루비야님의 실험을 보면 php 5.2부터는 제대로 1로 나온다고함.. $password는 sha1로 변환한 엄청나게 복잡한 값이고 내가 입력해서 POST방식으로 받은 password변수와 비교해서 0이 리턴되면 통과. php 4버전 이하로 strcmp함수에 배열값이 들어왔을때 NULL값이 반환되어 무조건 0이 반환된다. PHP5부터는 패치되서 안된다고 한다.

webhacking/etc 2014.10.02

wargame.kr DB is really GOOD

뭔지 몰라서 한참찾았다. 이것저것 별 난리를 다해봐도 넘어가는데 이상이 없다. 문제 클릭을 해보면 유저와 db사이에 관계? 를 파악하는 문제라는데 답이 없어보인다. 첫번째날은 그냥 포기해버리고 다음날에는 admin으로 접속하면 안된다고 자바스크립트로 표시된 부분에 주의하여, admin계정으로 접속하면 뭔가 있을것같아서 접속했다. 어 근데 자바스크립트로 되있어서 아무값이나 입력 후 프록시로 잡아채서 admin으로 바꿨는데 안된다. 클라이언트측에서도 검사하고 서버측에서도 검사하나보다. 서버측에서 검사할땐 일반적인 php....같은걸로 할테니까 예전에 어디서 보았던 php의 널바이트 였나? ;%00 으로 잘 조합하면 될것같기도 했다. user_id=adm;%00in 로 바꿔서 보내봤더니 이런 소스가 뜬다.? ..

wargame.kr fly_me_to_the_moon

일단 비행기 게임을 해보고, 제작자가 일부러 햇갈리게 하려고... 인지는 모르겠지만 항상 해왔던데로 소스를 열어봤는데 eval(function(p,a,c,k,e,d) 로 시작되는 엄청 긴 소스가 있다. 자바스크립트 문제구나. 생각하고 이쁘게 만들어서 소스를 해석해보았는데 별 정보가 없다. 계속 봐도 없다. 나중에 생각하니 p.a.c.k.e.r이게 너무 유명해서 너무 거기에 민감해진 듯 싶다. 그러다가 다시 게임을 해 봤는데 31337점이 필요하다고 한다. 점수는 뭐 내가 죽으면 보내지는거니까 점수 보내질때 변조를 해보자고 생각하고 프록시를 켜니 또 이상한것들이 잡힌다. 그건 무시하고 점수를 31337로 변조해서 보내봤는데 반응이 없다. 뭐지... 계속 하다가 프록시로 잡아서 보낼때만 token error..

webhacking/client 2014.09.29

burp suite

프록시로 버프를 쓰는데 request를 캡쳐하는 옵션에서 아무리 바꿔도 해당 옵션이 적용되지 않는다. wargame.kr을 풀려고 하는데 wargame.kr은 계속해서 통신?을 하는지 프록시를 켜면 가만히 있어도 짧은 간격으로 패킷이 잡힌다. 짧은 간격으로 쓸모없는 패킷이 캡쳐되다 보니 내가 보내고 싶은 패킷을 못 보내겠다.(ㅅㅂ..) 이게 내가 보낸 요청을 체크하는 옵션인것 같은데 Enabled부분을 다 체크해제해도 변함이 없다. 위에 써있는 요청을 아래의 규칙에 따라서 캡쳐 부분을 체크해제하면 안 잡히긴 하는데 그러면 패킷이 아예 안 잡혀버린다. 옵션을 찾아봐도 잘 안나오고 이거때메 파로스로 갈아타야 하나 ㅅㅂ.. 이거 옵션적용에 대해 아시는분 있나요....... --------------------..

private/memo 2014.09.29

wargame.kr QR CODE PUZZLE

들어가보면 예전에 필통으로 많이 하던 퍼즐이 나온다. 소스를 보면 jquery소스가 있다. 근데 난 jquery를 자바스크립트에서 조금 쓰기 쉽게 된 그런 언어? 라는것밖에 모른다.(방학때 공부해야겠다.) /*$(function(){ $('#join_img').attr('src',unescape('.%2f%69%6d%67%2f%71%72%2e%70%6e%67'));$('#join_img').jqPuzzle({rows:6,cols:6,shuffle:true,numbers:false,control:false,style:{overlap:false}});hide_pz();});function hide_pz(){var pz=$('#join_img div'); if(pz[pz.length-2]){$(pz[1]).r..

webhacking/client 2014.09.28

wargame.kr wtf_code

이거밖에 없다. 꾸쌤이 이거에 대해 언급하지 않았으면 계속 몰랐을듯 싶다. 스페이스바, 탭 줄내림만으로 이루어진 white space라는 이상한 언어이다. http://en.wikipedia.org/wiki/Whitespace_(programming_language) white space라는것만 알면 인터프리터 찾아서 돌리면 되므로 쉽다. http://ws2js.luilak.net/interpreter.html 근데 언제봐도 신기하다... 이거말고도 brainfuck라는 이상한 언어도 있다 ㅋㅋ http://cafe.naver.com/sourcemulti/42579 http://en.wikipedia.org/wiki/Brainfuck

webhacking/etc 2014.09.28

information_schema

information_schema 데이터베이스에는 모든 테이블의 정보가 들어있음. 데이터베이스.테이블이름 이런 형식으로 접근 가능함. 많이 쓰이는건 information_schema.tables, information_schema.columns, information_schema.processlist 테이블명을 알아낼때. information_schema.table 테이블의 table_name컬럼이 있음. 이 컬럼은 영어 그대로 테이블 이름을 저장해둠. select table_name from information_schema.tables; 로 해보면 시스템 테이블이라던지 모든 테이블이 보여져서 찾기가 불편함. 현재 내가 들어온 db의 테이블만 보려면 select table_name from inform..

wargame.kr lonely_guys

http://wargame.kr:8080/lonely_guys/index.php 방법론은 대충 알았는데 잠시 해멨다. reg_single(sort) 부분을 클릭하면 정렬이 됬다가 다시 반대로 정렬이 됬다가 바뀐다. 소스 윗부분에는 POST방식으로 sort를 받는다. 그리고 이것에 따라서 정렬을 수행하는것 같다. if(isset($_POST['sort'])){ $sort=$_POST['sort']; }else{ $sort="asc"; } 그리고 mysql_real_escape_string함수로 받은 sort에서 위험한 문자를 제거한 후에 쿼리를 돌린다. $result=mysql_query("select * from guys_tbl order by reg_date $sort"); 대충 여기까지 읽어봤으면 P..

미ㅏㄴ얾저ㅑㄹ;ㅐㅈ머;ㅑㅐㄷㄹ

주말이라서 시간을 버리기 싫어서 오늘부터 시스템 공부 다시 시작하자는 마음으로 ftz를 하려고함. ftz 하려다가 이전에 종종 접속이 끊기는걸 확인해서 내 vmware에 직접 ftz 구축하기로 결심! 결심을 하고 레드햇을 받고 ftz.iso를 받았는데 접속이 안됨. 어? 확인하니 vmware 네트워크가 끊겨있음. 뭐지? 확인했는데 특정 vm만 끊긴게아니라 전체 vm 네트워크가 다 끊겨서 인터넷이 안됨. 1시간동안 해결해보려다가 빡쳐서 vm을 재설치하려고 마음먹음. vmware10을 받아서 설치했는데 설치중에 오류뜸. 오류원인을 또 찾아보니 설치된 avast때문에 오류뜬다그래서 avast를 지우고 다시 설치해봄. 또 오류뜸. 너무 최근 버전이라 그런가.. 생각해서 조금 더 낮은 버전 받아서 설치 했는데 또..

private/memo 2014.09.13

시스템......

웹만 해서 먹고살기 힘들다는걸 깨닫고 시스템도 하려고했는데 수강신청 애매하게 해서 중간중간 못하고 그냥 겨울방학때나 제대로 해야 될듯. 기본적인 해커스쿨문제나 해킹 공격의 예술 책은 몇번 봤었는데 한달동안 알바도 안하고 공부 열심히 하면 어느정도 되겠지요....? 해킹공부한지 이제 1년 되가지만 항상 왜 어릴때부터 이걸 안해왔나 후회된다..... ㅠㅠㅠㅠㅠ 이번에 구글 3000만원 탄 사람도 나보다 어리다던데.... 휴 부럽다.

private/memo 2014.09.11

rubiya.kr 19번 다른방법.(원래방법?)

if등의 조건문이 전부 막혔을시 이전 글에서 coalesce라는 이상한 함수를 써서 해결했었는데 페이스북 그룹 생활해킹에서 또다른 해답이 올라왔는데 너무 좋은 방법같아서 포스팅... Izayoi Sakuya님의 방법인데.. 이런식으로도 할수 있다고 함.. 우와 신기... 더 아래 댓글에서 union은 내부적으로 임시 테이블을 만들고 쿼리문의 결과를 테이블화 한 후에 리턴하므로 저런 에러가 발생하는것 같다고 추측하셨음.. 어제 적었던 a' or coalesce(substr~ or null, (에러나는서브쿼리)); 나 이 글의 a' or (select 0x~ union select substr~); 를 조합하면 엄청나게 많은 벡터가 생성될듯. 다만 위 구문은 or이 안막혀있어야 하고, 아래구문은 select..

mysql hex()함수에 관해서

블라인드 인젝션시 한글자씩 값을 뽑아와야되는데 ascii나 ord가 막혀서 hex로 값을 뽑아오는 경우가 있다고 가정하자. 일단 프로그래밍으로 자동화하기에 앞서 mysql에서 구문이 제대로 동작하는지 확인해봐야 될 것이다. mysql> select * from prob;+-------+-------+| id | pw |+-------+-------+| admin | 1234 || guest | guest || oop | nop |+-------+-------+3 rows in set (0.00 sec) mysql> 요런 테이블이 있다고 가정하면 연습으로 pw에서 제일 첫번째 글자를 뽑아와서 그것을 hex했을시 아스키코드값인 0x67(10진수 103) 이 나오는걸 확인할수 있다. 그런데 단순히 이거만 확인..

webhacking.kr 13번.

힌트는 HINT : select flag from prob13password 라는 쿼리문하나. 다른곳을 찾아봐도 다른 힌트는 없고, SQLI같이 소스가 보이지도 않아서 블라인드 인젝션으로 생각. 나와있는 열은 flag밖에 없어서 flag값을 알아내는거라고 추측 값을 넣을 수 있는 no에 이것저것 값을 넣어보면 0또는 1만 나오고, 1 이외의 다른 수를 넣어봤을때 무조건 0이 나오는걸로 보아서 0을 틀린경우로, 1을 맞는경우로 사용하면 되겠다고 생각. 값을 넘길때 no=?식으로 값이 넘어가는데 쿼리문을 예상해보자면 select flag from prob13password where no=?같은 형식이나 select 열 from 다른테이블 where no=? 같은 형식으로 예상할 수 있음. no=if((se..

mysql max,min함수

mysql에서 max,min함수를 자주 쓴다. 그런데 종종 헷갈릴 때가 있다. 컬럼에 'aaa'와 'bcd'와 같이 길이가 같은 두개의 열이 있다고 하면.. max결과시 뭔가 예상했듯이 'bcd'가 결과로 나온다. 하지만... 'c' 'bcd' 두개의 열이 있고, max함수를 써보면 c가 결과값으로 나온다. 개발 경험이 없고 웹해킹에서만 쓰다 보니 그냥 길이가 긴게 우선인줄 알았는데 아니다. 길이가 같던 다르던, 앞에서부터 하나하나 비교하다가 더 뒤쪽의 아스키코드값이 나올경우 그게 max값이다. 'bc'와 'bcd'가 있으면 bcd가 max이고, 'bd'와 'bcz'가 있으면 bd가 max이다. (길이는 상관없다.) mysql> select * from contacts;+------+-------+---..

webhacking.kr 12번

크롬 개발자도구에 eval로 실행하는 부분만 빼고 돌려보면 저렇게 나옴. 대충 소스 살펴보면 아래의 if 내부의 ck가 뒤의 복잡한 부분이 맞으면 alert으로 답을 출력해주는거같음. ck는 url의 =의 위치. 뒷부분만 추려서 document.write로 화면에 출력해보면 =youaregod~~~~~~~! 출력. ck(url에서 =의 위치)와 저 문자열이 같아야 하므로 뒤에 =youaregod~~~~~~~!를 붙여주면 통과 ****** 파이썬으로 위의 악성코드 생성기를 구현해보았음.(심심해서) javascript = "alert('xss!');" strs = """""" print strs 돌려보면 로 잘 생성됨. 제대로 동작도 함..

webhacking/client 2014.08.31

webhacking.kr 9번.

처음에 문제 들어가기 위한 관련 자료 -> 여기 a = ['{:x}'.format(i) for i in range(128+1)] 관련 자료는 여기 일단 요청을 보낼때 파로스나 버프같은 프록시로 요청을 잡아서 메소드를 OPTION메소드로 바꿔서 요청을 보내면 어떤 화면이 나오는데.. 인젝션은 특별히 어려운게 없으므로 그냥 하면 됨. 필터링을 다 피하고 쿼리문을 짜보면 if(substr(비밀번호,1,1)in(0x16진수),3,0) 이런식으로 판별. 그런데 한가지 이상한점. 처음에 인젝션할때는 맞으면 no=1로 판별해서 Apple가 출력되면 맞는걸로 확인, 틀리면 no=2로 판별 해서 banana였나? 그게 나오도록 해서 판별했는데 이런식으로 판별하니 중간에 맞는 값인데도 인젝션 결과가 틀리게 나와서 한참동안..

itchy

http://itchy.dothome.co.kr/ 예상 쿼리문 : select id from table where id='$_GET[id]' and pw='$_GET[pw]' 1. admin으로 로그인하면 통과. id=guest,pw=guest입력시 guest로 로그인 가능.필터링된게 없는거 같으므로admin'#&pw=guest 등으로 pw를 막아버리면 됨.만들어질 예상 쿼리문 : select id from table where id='admin'#' and pw='guest'?id=admin'%23&pw=guest %23은 #으로 mysql 주석. 2. id에 #과 --필터링 추가.id=a&pw=g' or id='admin 으로 id, pw다틀려도 마지막 id='admin으로 true를 만드면 됨.만들..