54번째 글. 1. 코드 분석 뭐지 특별한 것이 없었다. 기존에 풀었던 문제들과 같으며 특이점이 없다. 2. Exploit 하지만 역시 쎄한기분은 틀리지 않았다. pw의 길이는 12로 나오는데 아무리 해봐도 pw가 찍히지 않았다. 결국 힌트를 찾게 되었고 pw가 영문이나 숫자가 아닐 수 있다는 것을 알게 되었다. 자연스럽게 한글일 수 있겠구나라고 생각했다. pw의 첫 글자의 길이를 찍어봤더니 4바이트라고 한다. 그러면 처음의 모든 길이를 찍었을 때 12였으니 3글자일 것이다. 그리고 기존의 pw를 hex() 함수를 써서 변환해본 결과 총 24글자가 나왔다. (한글에서 영문과 숫자로 이루어진 조합으로 되기 때문에 한 글자에 1바이트씩 되므로 혼동하지 말자) 3등분으로 쪼개면 8 글자씩 된다. 즉 16진수로..
53번째 글. 1. 코드 분석 strlen() 함수는 바이트 기준으로 문자열의 길이를 알려주는 함수이다. 한글과 영어일 때 같은 문자열의 길이를 입력해도 서로 다르다. 어쨌든 길이가 6 이상이면 'No Hack ~_~'을 출력한다. 2. Exploit MySQL의 자동 형 변환을 이용해서 풀 수 있다. 서로 다른 데이터의 타입을 조회할 시 같은 타입으로 형 변환을 하여 비교하게 된다. 결론적인 핵심만 말하면 문자는 숫자 0과 같다라는 것을 기억하면 된다. ?pw=')=0;%00 이렇게 보내주면 문자 또는 0으로 시작하는 pw가 조회될 것이고 세미콜론과 널바이트로 쿼리를 종결해 줄 수 있다. Reference https://limjunyoung.tistory.com/121 // MySQL 자동 형 변환 h..
52번째 글. 1. 코드 분석 addslashes() 함수를 이용해서 single quote, double quote, \, 널바이트를 escape해주고 strrev() 함수로 문자열을 거꾸로 배치한다. 2. Exploit 운이 좋게 앞 문제와 비슷한 유형일거라고 생각하고 id의 두 번째 single quote를 escape하면 어떨까라고 생각했는데 ?id="&pw=%23 1=1 ro double quote를 쓰면 single quote와 짝을 이루지도 않고 \를 id의 두 번째 single quote앞에 놓을 수 있기 때문에 쉽게 escape할 수 있었다.
51번째 글. 1. 코드 분석 id, pw 파라미터에 대해서 single quote를 필터링하고 있다. 2. Exploit 백슬래시를 쓸 수 있으면 escape를 이용할 수 있다. ?id=\&pw= or id="admin"%23 위처럼 주게 되면 select id from prob_succubus where id='\' and pw=' or id="admin"#' 두번째 single quote가 escape되고 id의 첫 번째 single quote와 pw의 첫 번째 single quote로 감싸 지게 되어서 빨간색 부분이 id의 값으로 들어가게 된다.
50번째 글. 1. 코드 분석 일단 single quote가 필터링되어있다. 2. Exploit single quote를 bypass하려고 시도해봤지만 전혀 되질 않았다.. 그러던 중 구글링을 통해 like를 쓰는 경우 패턴 매칭을 통해서 쿼리의 결과를 얻어낼 수 있다는 사실을 알게 되었다. 예를 들어 pw가 15304이고 쿼리가 select id from table where pw like '1%'라 하면 pw가 1로 시작하는 것을 검색하겠다는 의미이다. 이런 점을 이용해 코드를 짜면 다음과 같다. import requests import string sess = requests.session() headers = {'Cookie': 'PHPSESSID=YOURSESSID'} # password_len..
마흔아홉 번째 글. 1. 코드 분석 single quote, substr, ascii, =, or, and, whitespace, like, 0x... 많은 것들을 필터링하고 있었다. 이 문제 역시 온전한 pw값을 입력해야 풀린다. 2. Exploit 공백 -> %0a or -> || and -> %26%26(이 문제에서는 &&를 URL인코딩을 해줘야 된다.) substr -> mid() ascii -> hex() =,like -> in() ?no=1000%0a||%0aid%0ain(char(97,100,109,105,110))%0a%26%26%0a1%0ain(if(hex(mid(pw,인덱스,1))in(hex(비교값)),1,0))%23 점점 길어진다... import requests sess = requ..
마흔여덟 번째 글. 1. 코드 분석 single qutoe, substr, ascii, = 를 필터링하고 있었으며 admin의 pw를 찾아야지 문제가 풀린다. 2. Exploit single quote가 필터링되고 있고 파라미터 no가 single quote로 감싸져 있지 않기 때문에 이쪽을 이용해야 한다. substr -> mid ascii -> ord = -> like ?no=1000 or id like(char(97,100,109,105,110)) and 1 like(if(ord(mid(pw,인덱스,1))like(비교값),1,0))%23 위에 처럼 사용하면 된다. 문제를 처음 풀 때 약간 이상했다. 분명 pw의 길이는 8글자가 맞는데 계속 7자리만 나오는 것이다... 확인해보니 우연한 건지 의도인지..
마흔일곱 번째 글. 1. 코드 분석 전에 풀었던 문제처럼 Blind SQL injection을 이용해서 pw값을 찾아야 문제가 풀린다. 이번에는 or, and, substr(, =를 필터링하고 있었다. 2. Exploit or -> || and -> && substr -> mid = -> like ?pw=' or 1 like(if(ascii(mid(pw,인덱스,1))like(비교값),1,0))%23 substr() 함수와 동일한 mid() 함수로 대체하였고 아스키코드로 변환하는 함수도 처음에 ord()를 썼었는데 'or'가 필터링되면서 계속 걸렸었다. 그렇기 때문에 ascii() 함수로 대체하였다. 최종적으로 아래와 같이 전에 쓰던 코드를 변경해 주면 된다. import requests sess = re..
- Total
- Today
- Yesterday
- Windows Fundamentals
- alasql
- 드림핵 DOM XSS
- dreamhack DOM XSS
- xxe injection
- DreamHack
- dreamhack Relative Path Overwrite
- htb Windows Fundametals
- WebHacking
- 웹해킹
- dreamhack padding oracle
- 드림핵 Relative Path Overwrite
- wargame
- LFI vulnerability
- dreamhack web-alasql
- Lord of SQL injection
- csp
- blind injection
- htb
- SQL Injection
- 드림핵 padding oracle
- 드림핵
- php LFI
- hackerfactory
- csp bypass
- dreamhack CSS Injection
- CSS Injection
- hack the box
- webhacking.kr
- 해커팩토리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |