본문 바로가기

웹해킹56

webhacking.kr 57번 Webhacking.kr#57[Time-Based SQL Injection] 57번 문제를 열면 아래와 같은 화면을 볼 수 있다. 소스코드를 보면, 필터링 되는 문자열 또한 알 수 있다. 이 때 필터링 대상을 보면 흔히 나타나지 않았던 benchmark가 존재하는 것을 볼 수 있다. Mysql manual 페이지를 보면 benchmark는 expression이나 function의 속도를 측정할 때 이용한다는 것을 알 수 있다. Benchmark는 필터링 되어 사용할 수 없지만, 여기서 Time-Based SQL Injection이 가능하겠다는 추측을 할 수 있다. 출처: https://dev.mysql.com/doc/refman/5.5/en/select-benchmarking.html 예를 들면, pw의.. 2019. 2. 1.
webhacking.kr 55번 Webhacking.kr#55 55번 문제를 열면 아래와 같은 화면을 볼 수 있다. 아래는 rank를 눌렀을 때 볼 수 있는 랭킹 페이지이다. 이 때 score를 누르면?score=2147483647로 요청하기 때문에 뒤에 or 1=1을 붙여보면 아래와 같이id : localhost // 0이 출력된다. 이 때or 1 = 0을 수행하면 아래와 같이 gurwodla // 2147483647 가 출력된다.이를 이용하면 blind sql injection이 가능할 것으로 보인다. 먼저 컬럼의 정보를 알기 위해 procedure analyse()를 하면 아래와 같이 db, 테이블, 컬럼 정보를 얻을 수 있다. 힌트를 보면 password는 3번째이므로 limit을 이용하여 보면 아래와 같이 패스워드의 실제 컬럼.. 2019. 2. 1.
webhacking.kr 45번 [SQL Injection] 45번 문제를 보면 아래와 같은 화면을 볼 수 있다. 아래 코드는 index.phps이다. solve()를 위해서는 쿼리문의 결과가 admin이어야한다.필터링 되는 문자들을 보면 id에서 or과 =을 사용할 수 있기 때문에where id=’’ or id=’admin’ # and pw=md5(‘$_GET[pw]’)과 같은 방식으로 우회할 수 있을 듯하다. admin이라는 문자열은 입력할 수 없기 때문에char(97,100,109,105,110)를 이용하면 된다. ‘를 입력하는 방법에 대해서도 생각해 봐야 하는데,위 코드에서 mb_convert_encoding을 이용하기 때문에 이 취약점을 이용하면 된다. 우선 mb_convert_encoding의 manual을 보면 아래와 같이.. 2019. 2. 1.
webhacking.kr 44번 [Command Injection] 44번 문제를 보면 아래와 같은 화면을 볼 수 있다. 먼저 a를 입력해보면 hello a 가 출력되는 것을 볼 수 있다. 다른 문자열들을 입력해도hello [입력된 문자열]이 출력된다. 이 것을 보면 echo를 이용한 것이 아닌가 하는 추측을 할 수 있다.따라서 ;ls를 입력해보면 아래와 같이 아무 것도 출력되지 않는 것을 볼 수 있다. 아마 Command Injection을 막기 위해 ;나 ls 등에 필터링이 적용되어 있는 듯하다.따라서 ‘’를 이용하여 입력하니 아래와 같이 ls가 입력된 것을 볼 수 있다. 이에 ;을 넣어주기 위해 ‘;l’s로 입력하니 결과를 얻을 수 없어&를 이용하여 ‘&l’s와 같이 입력하였다. ls의 결과를 얻을 수 있었고, 위의 페이지로 이동.. 2019. 2. 1.
webhacking.kr 40번 [Blind SQL Injection] 40번 문제를 열면 아래와 같은 화면을 볼 수 있다. 이 때 no가 1일 때 guest인 것으로 추정된다.따라서 no가 2일 때로 요청해볼 것이다. 원래 guest로 로그인할 경우no=1&id=guest&pw=guest가 된다. 이를 약간 변형하여no=0||no=2&id=guest&pw=guest를 수행할 것이다. 참고로 no=1인 경우 guest에 해당하기 때문에(no=2를 시도하는 이유는 guest가 아닌 유저에 관한 정보를 얻기 위함이다.)no=1||no=2가 아닌 0으로 한 것이다. 0이 실제로 다른 id에 할당된 값인지 먼저 확인하였다. Failure가 출력되는 것을 보면 사용해도 될 것으로 보인다. 그리고 no=2인 경우 admin password를 입력.. 2019. 2. 1.
webhacking.kr 33번 Webhacking.kr#33 33번 문제는 총 10개의 문제로 구성되어 있다. [33-1] 위의 화면은 33번 문제를 열면 가장 먼저 나오는 문제이다.아래는 index.phps 코드이다. get method 이므로 ?get=hehe 과 같이 주면 아래와 같이 다음 문제로 넘어갈 수 있는 Next가 나온다. [33-2]2번째 문제이다. post 메소드를 이용하면 된다. 따라서 개발자도구를 이용하여 form 태그를 만들어서 submit하였다. 그 결과 2번째 문제를 clear할 수 있다. [33-3]3번째 문제이다. 코드는 아래와 같다. myip에 ip를 주면 된다. ?myip=0.0.0.0 과 같은 방식으로 전달하면 된다.(실제 자신의 ip) [33-4]4번째 문제이다. 코드를 보면 time()을 md5.. 2019. 2. 1.
webhacking.kr 29번 Webhacking.kr#29 29번 문제를 열면 아래와 같은 힌트를 볼 수 있다. 우선 파일을 업로드해보았다. 위와 같이 Done이라는 메시지와 함께time, ip, file 정보가 출력되는 것을 볼 수 있다. 힌트에서select password from c29_tb라고 되어 있는 걸을 보면파일을 업로드할 때, 파일 이름, time, ip정보가 c29_tb 테이블에 저장될 것임을 알 수 있다. 쿼리문은 아마 아래와 유사한 형태를 가질 것으로 추정된다.Insert into c29_tbValues (time, ip, file) 이 때, file 이름을 이용하여 select 문을 수행하도록 하면 패스워드를 얻을 수 있을 듯하다. 그런데 time, ip, file이 실제 쿼리문에서 어떤 순서로 되어 있는 지를.. 2019. 1. 29.
webhacking.kr 15번 15번 문제를 열면 내용을 확인하기 전에 Access_Denied라는 창이 나오는 것을 볼 수 있다. 따라서 Burp Suite를 이용하면아래와 같이 패스워드를 확인할 수 있다. 2019. 1. 29.
webhacking.kr 13번 [Blind SQL Injection] 13번 문제를 열면 아래와 같은 화면을 볼 수 있다. 먼저 no에 1을 입력하면 result로 1이 나오는 것을 볼 수 있다. 왠지 true와 false에 대해 result를 반환해주는 듯하여실제로 true와 false를 입력하면 각각 1과 0이 출력된 것을 볼 수 있다. 따라서 이 점을 이용하여 flag를 얻으면 된다.Select flag from prob13password라는 힌트를 이용하기 위해먼저 flag가 존재하는 지 확인하는 쿼리를 작성했다. ( select ( count(flag) ) from ( prob13password ))in(1) (이 문제는 다른 문제에 비해 필터링이 더 많이 처리되어 있었다.아래 인풋 값들은 입력이 가능한 것들을 이용하여 작성.. 2019. 1. 29.