59번째 글. 1. 코드 분석 hell_fire 문제와 차이점은 sleep()과 benchmark()를 사용할 수 없다는 점이었다. 2. Exploit hell_fire 문제에서도 sleep()과 benchmark()를 이용하지 않았기 때문에 사용했던 코드에서 조금만 바꿔줘도 문제가 풀린다. import requests import string sess = requests.session() headers = {'Cookie': 'PHPSESSID=YOURSESSID'} admin_password = '' ascii_printable = string.printable #print(ascii_printable) ## get password length for i in range(100): url = f"ht..
58번째 글. 1. 코드 분석 쿼리 스트링으로 order 파라미터에 값을 주면 'order by' 쿼리에 의해서 id와 email 그리고 score를 테이블에 아래와 같이 출럭한다. admin의 email을 찾아내면 문제가 풀린다. 2. Exploit 이 문제도 힌트를 보고 풀었다 -,- 이제 점점 힌트없이는 풀 수 없는 문제들이 나오는 것 같다 ㅜㅜ id='rubiya'로 정렬기준을 줬을 때는 아무런 변화가 없는 것 처럼 보인다. id='admin'으로 하면 admin이 밑에 깔린다. 즉, 정렬기준이 아래에 깔린다고 볼 수 있다. 이 부분을 이용하면 된다. ?order=length(email)=특정 정수,id='rubiya' 정렬기준에 이렇게 함수를 이용해도 정렬이 된다는 것을 알 수 있었다. 만약 a..
57번째 글. 1. 코드 분석 특이점은 if를 필터링하고 있다. 또한 iron_golem문제 같은 경우는 error를 띄어줬지만 이번 문제는 error가 생기면 흰 화면만 보여준다. 2. Exploit 계속되는 삽질에 결국 힌트를 얻어서 풀었다;; ' or id='admin' and (select 1 union select length(pw)=특정숫자)%23 서브쿼리를 쓸 때는 보통 단일 행, 단일 칼럼의 결과가 반환되도록 해야 한다. 그렇기 때문에 pw의 길이가 일치하지 않으면 서브쿼리 구문은 2개의 행을 반환하게 되어서 오류가 나게 된다. 만약 pw의 길이가 일치하면 select 1 union select 1 이렇게 되어서 아래와 같이 하나의 행만 반환하여 정상적으로 쿼리가 실행되어서 흰 화면이 나오..
56번째 글. 1. 코드 분석 기존의 'Hello admin'을 이용하는 Blind injection을 사용할 수 없게 되어 있다. 또한 sleep과 benchmark가 필터링된 것을 보니 그냥 Blind injection은 쓰지 말라는 소리이다. 2. Exploit single quote만 넣어줘도 error based injection임을 알 수 있다. ' or id='admin' and if(length(pw)=7, pow(10,10000),0)%23 pow() 함수를 이용해서 pw의 길이가 맞으면 MySQL에서 지원하는 double형의 범위를 일부러 초과하여 에러를 띄우는 식으로 원하는 정보를 얻을 수 있다. ' or id='admin' and if(substr(pw,인덱스,1)='특정문자',po..
55번째 글. 1. 코드 분석 주석(#)을 통해서 뒤에 있는 조건을 무효화시키고 있다. 2. Exploit #은 한줄만 주석처리를 하기 때문에 개행(line feed)을 통해서 escape 할 수 있다. ?pw=aaa'%0a and 1=2 or id='admin' and 1=1%23 이렇게 주게 되면 당연하지만 주석과 개행 사이의 문자는 무효가 되고 뒤에 오는 조건이 하나의 쿼리로 인식되어 실행이 가능해진다. 그렇기 때문에 일부러 false인 조건을 넣고 앞의 and 연산을 false로 만든 뒤 id='admin'인 조건을 넣어서 쿼리의 결과가 admin이 될 수 있도록 만들어 준다.
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할 수 있었다.
- Total
- Today
- Yesterday
- 웹해킹
- LFI vulnerability
- hack the box
- 드림핵 padding oracle
- CSS Injection
- 드림핵 Relative Path Overwrite
- dreamhack Relative Path Overwrite
- htb Windows Fundametals
- dreamhack padding oracle
- SQL Injection
- wargame
- hackerfactory
- dreamhack CSS Injection
- 드림핵 DOM XSS
- 드림핵
- alasql
- dreamhack web-alasql
- webhacking.kr
- htb
- Windows Fundamentals
- WebHacking
- csp
- xxe injection
- blind injection
- dreamhack DOM XSS
- Lord of SQL injection
- php LFI
- csp bypass
- DreamHack
- 해커팩토리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |