본문 바로가기

분류 전체보기

(297)
LORD OF SQLINJECTION : iron_golem Write-Up if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); if(preg_match('/sleep|benchmark/i', $_GET[pw])) exit("HeHe"); $query = "select id from prob_iron_golem where id='admin' and pw='{$_GET[pw]}'"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if(mysqli_error($db)) exit(mysqli_error($db)); echo "query : {$query} "; $_GET[pw] = addslashes($_GET[pw]); $query = "sel..
LORD OF SQLINJECTION : dragon Write-Up if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); $query = "select id from prob_dragon where id='guest'# and pw='{$_GET[pw]}'"; echo "query : {$query} "; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) echo "Hello {$result[id]}"; if($result['id'] == 'admin') solve("dragon"); 해당 challenge에 해당하는 필터링 조건 및 pass 조건은 위와 같다. 눈에 띄는 점은 query에 #이 들어가 있..
Webhacking.kr : old-46 Write-Up 위의 필터링을 볼때, 공백, % 가 필터링 되어 있어 어떻게 우회를 할지 고민이 좀 됬었다. 우선, SQL Injection 가능성을 파악해본다. ( 물론, 문제 페이지에 대놓고 SQL Injection이라 적혀있긴 하지만.. 말이다. ) lv 를 보면, 숫자로 이루어진 컬럼이란 것을 알 수 있고, lv = 2-1 과 같이 query를 보냈을 때, lv = 1로 계산되어 query가 동작하게 되어, 값이 정상적으로 출력된다. 이제 공백을 어떻게 우회해야 할지 고민해야 한다. %09,%20등 과 같은 형태는 %가 필터링되어 안된다.('%'가 필터링 되어 안되는 것이 아닌, 공백이 필터링 되어 안됨) 그래서 괄호를 사용하기로 했다. 먼저 아래와 같은 payload를 요청해보았다. /?lv=(..
Webhacking.kr : old-05 Write-Up 처음 페이지를 보면, Login 과 join 버튼이 있다. 하지만 join 버튼 클릭 시, 엑세스가 거부된다. Login 버튼 클릭 시, challenge/web-05/mem/login.php 위 URL로 이동되며, 로그인 페이지를 볼 수 있다. 위 그림 1과 같이 다양한 SQL Injection 시도를 했는데, 먹지 않았다. 아래 같은 Time based 도 안된다. 'or 1=1 AND if(1=1,sleep(10),false)# 'or 1=1 AND if (1=1) waitfor delay '0:0:10'# 'or 1=1 AND if 1=1 then BEGIN dbms_lock.sleep(10); END; end if--+ 현재 challenge/web-05/mem/login.php..
Webhacking.kr : old-49 Write-Up level :
LORD OF SQLINJECTION : xavis Write-Up 첫번째 시도 ( Fail ) import requests import string url="https://los.rubiya.kr/chall/xavis_04f071ecdadb4296361d2101e4a2c390.php?pw='or id='admin'%26%26length(pw)= " cookies ={'PHPSESSID':"p0cct2pi257sma3qvmjcgbv5cb"} for i in range(100): param=str(i)+"%23" URL = url+param print(URL) response = requests.get(URL, cookies=cookies) if "Hello admin" in response.text: print(i) break id가 admin일 경우 p..
Webhacking.kr : old-48 Write-Up 해당 페이지 접근 시, 위 그림 1과 같이 파일 업로드 기능과 memo 기능 그리고, 이전에 작성된 글과 그림이 출력되어 진다. 우선, 태그 및 기타 태그 삽입을 시도했었다. 그 결과는 아래와 같다. 1234 HTML Entity Encoding 이 적용되어, XSS 공격이 시행될 수 없다. 그럼에도 불구하고, XSS 공격을 계속 시도하였다... SVG image를 이용한 XSS를 시도했는데, 그 결과는 아래와 같았다. 페이지에 출력되는 그림이 ./7.jpg 이므로, file upload와 path_traversal과 svg_xss를 이용해 스크립팅을 일으키고자 했다. 실패했고, HTML Entity Encoding 또한 적용되어서 실패할 수 밖에(?) 없었다. 결국 다른 W..
LORD OF SQLINJECTION : nightmare Write-Up if(preg_match('/prob|_|\.|\(\)|#|-/i', $_GET[pw])) exit("No Hack ~_~"); if(strlen($_GET[pw])>6) exit("No Hack ~_~"); $query = "select id from prob_nightmare where pw=('{$_GET[pw]}') and id!='admin'"; if($result['id']) solve("nightmare"); 위의 필터링 조건에서 눈여겨 봐야할 부분은 strlen() 으로 길이를 제한 하고 있다는 점과 주석 기호가 필터링되고 있다는 것이다. 주석 필터링에 대한 우회방법은 아래와 같다. --(공백) : -- 뒤에 공백이 있어야 주석 처리가 가능하다. # : 뒤에 공백이 없어도,..