본문 바로가기

전체 글

(156)
[Webhacking.kr] old-8 write up 문제 접속하면 hi guest가 나온다. 코드를 보면 접속 사용자의 user_agent값을 가져와서 from가 있는지 확인한다. 그 후 서버 DB의 id의 개수를 가져오며 70개 이상일 경우 DB 데이터를 지운다. db의 agent가 접속자의 user_agent와 같은 id를 조회하고 id값이 있으면 echo해주고 admin일 경우 문제가 해결된다. 반대로 조회된 id가 없을 경우 insert 구문으로 DB에 agent, ip, 'guest'를 삽입한다. 먼저 패킷을 잡아 user_agent값을 admin으로 변조해봤다. 👆 위와같이 insert 문이 제대로 삽입 후 done!이라는 문자열이 나온다. 변조할수 있는 부분은 user_agent 부분이므로 이걸 이용해 해결해야하는 것 같다. user_age..
[Lord of SQLInjection] 5번 wolfman write up 이번 문제는 공백이 필터링 되고 있으며, id가 admin일때 문제가 해결된다. 그러나 코드에는 id가 guest로 하드코딩 되어 있기 때문에 수정이 불가능하기 떄문에 or id='admin'으로 만들어줘야 한다. 공백은 %09로 우회가 가능하다.
[Lord of SQLInjection] 4번 orc write up 이번 문제는 두 번의 필터링을 진행하고 있다. 먼저 prob _ . ( ) 을 필터링하며 2차적으로 addslashes함수를 이용하여 싱글쿼터를 필터링 중이다. addslashes는 싱글쿼터('), 더블쿼터(""), 널문자, 백슬레쉬(\)에 해당하는 문자가 들어오면 백슬레쉬를 앞에 붙여 sql injection을 방어하게 된다. ex) ' -> \' 1차 필터링은 가볍게 우회가 되나, addslashes를 우회가 안된다. 싱글쿼터를 어떻게 우회할지 생각해봐야 한다. addslashes로 싱글쿼터가 이스케이프될 경우 이를 우회하기 위해선 한 가지의 전제조건이 선행되어야 한다. euc-kr을 utf-8로 변환하는 작업을 하고 있는 경우에만 멀티바이트 삽입을 통해 우회가 가능하다. 먼저 '(%27)을 보낼경우..
[Lord of SQLInjection] 3번 goblin write up 이번 문제는 no에 값을 받고 있으며 ', ", `를 추가적으로 필터링하고 있다. 우선 id가 admin일때 문제가 해결된다. 현재 코드상엔 id가 guest로 코딩되어 있으므로 or를 이용하여 앞 조건문을 거짓으로 만든 후 id에 admin을 입력하면 된다. no에 1을 줬더니 guest가 참이 됐다. admin의 no를 막 입력해봤는데, 풀렸다 ㄷㄷ.. 정석 풀이 👇 1. char 함수 이용 char함수에 아스키 코드값을 주면 문자열을 반환환다. 2. 16진수 이용 admin의 16진수를 입력하여 우회하였다.
[Lord of SQLInjection] 2번 cobolt write up 1번 문제와 마찬가지로 id와 pw를 get 방식으로 입력 받고 있다. 필터링 하는 문자들도 똑같다! 다만 다른점이 있다면 pw를 md5 해시화 시켜 비교하고 있기 때문에 pw에서 싱글쿼터 탈출은 불가능해 보인다. 문제는 id가 admin일 경우 해결된다. id=admin%23을 이용하여 해결했다.
[Lord of SQLInjection] 1번 gremlin write up get 방식으로 id와 pw를 입력받고 있다. 정규표현식 필터링으론 "prob", "_", ".", "(", ")" 을 id와 pw 동일하게 필터링 중이다. select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}' 👆 위와 같은 쿼리문이 참이 될경우 문제는 해결되기 때문에 위 조건식을 참으로 만들면 된다. a' or 1=1 # 👆 위 문자열을 id에게 넘겨주어 조건식을 항상 참으로 만든 후 뒷 부분을 주석처리 하였지만 풀리지 않았다. 주석을 #말고 --%09를 이용하여 해봤다. (--이후에는 공백이 나와야 주석처리가 된다.) 클리어! #이 안풀린 이유는 URL Encoding을 안해주었기 때문 위 사진은 URL Encoding을 하지..
[Webhacking.kr] old-21 write up 이번 문제는 Blind SQL Injection이다. 서버측 코드를 모르기 때문에 로그인 시 반환되는 결과를 보고 비밀번호를 구해야 한다. 쿼리가 참을 반환할때와 거짓을 반환할때 반응이 다를 것이다. 먼저 guest guest를 입력해본다. guest가 존재하는 것 같다. guest의 비밀번호가 guest인 것을 알았으므로 이를 가지고 테스트를 해볼 것이다. 먼저, substr 함수를 이용하면 비밀번호를 한 글자 씩 비교할 수 있다. 그전에 먼저 고의로 틀린 비밀번호를 입력해보니 다음과 같은 결과를 반환한다. 쿼리문이 거짓이 되었을 때 나오는 결과인 것 같다. 다음은 싱글쿼터를 탈출해서 쿼리문을 참으로 만들어보자. 쿼리문이 참이 될 경우는 'wrong password' 라는 문자열을 반환하고 있다. 이로..
[Webhacking.kr] old-27 write up 입력폼과 코드가 존재한다. 저번 sql과 달리 부등호가 필터링 되어 있다. 괄호를 탈출할 수는 있지만 다시 닫지는 못 한다. 따라서 뒤의 쿼리문은 주석처리를 해주어야 한다. 부등호는 like로 대체가 가능하다. 0)%09or%09no%09like%092;%00 (널 바이트 삽입)) 0)%09or%09no%09like%092%09--%09 공백은 모두 %09로 대체해주면 된다. '--'로 주석을 처리할 경우에는 뒤에 공백이 있어야 주석처리가 된다.