62번째 글. 1. 코드 분석 특이한 것은 쿼리를 날리고 single quote와 \를 필터링하고 있었다. (이 사실을 찾는데 오래걸림;; 항상 넓게 보자) 그 외에 특별한 점은 없었다. 2. Exploit 위에서 말했듯이 쿼리를 날리고 필터링하기 때문에 sleep() 함수를 이용해서 비밀번호를 찾을 수 있었다. ?pw=' or if(id='admin' and length(pw)=특정 숫자,sleep(5),1)%23 이렇게 하면 pw의 length가 brute force한 값과 맞으면 sleep이 일어나서 쿼리를 보낸 이후에 필터링이 돼도 내가 원하는 값을 알아낼 수 있다. import requests import string import time sess = requests.session() heade..
61번째 글. 1. 코드 분석 id의 길이가 7글자를 넘으면 'too long string'이라는 문자열을 출력하고 쿼리 스트링인 no가 숫자이면 그 숫자를 no 변수에 넣고 숫자가 아니면 1을 넣는다. 그리고 반환되는 아이디에 따라서 'Hello id'를 출력한다.(즉 블라인드 인젝션인 것 같다) 마지막으로 admin의 정확한 no를 입력하면 문제가 풀리게 된다. 2. Exploit ?id=%27||no>%23&no=%0a특정값 이렇게 주게 되면 #은 한 줄 주석이기 때문에 개행 문자를 이용해서 escape할 수 있다. 그리고 비교 연산자를 이용해서 blind injection을 할 수 있다. 나는 100000000부터 1000000000까지의 범위를 잡고 이진 탐색 비스무리(?)하게 코드를 실행했다...
60번째 글. 1. 코드 분석 single, double quote는 필터링되고 있었다. query에서 쿼리 스트링으로 id와 pw 값을 받고 그 조건에 맞는 id와 pw를 조회하여 그것을 다시 query2의 조건문에 조건으로 입력한다. 결과적으로 query2의 결과의 id가 admin이면 문제는 풀리게 된다. 2. Exploit '\'을 이용해서 single quote를 escape하는 것은 전에 풀던 문제에서도 나왔기 때문에 알았다. 하지만 id=admin을 해봐도 결과가 출력되지 않아서 한 가지 의문이 들었다. 테이블에 값이 없는 것이다. 그렇다면 적절하게 union을 섞어주면 임의의 값을 넣을 수 있지 않을까?라는 생각을 하였다. ?id=\&pw=union select 1,2%23 이렇게 주게되면..
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이 될 수 있도록 만들어 준다.
- Total
- Today
- Yesterday
- dreamhack padding oracle
- 드림핵
- htb Windows Fundametals
- Lord of SQL injection
- hackerfactory
- csp bypass
- SQL Injection
- 해커팩토리
- php LFI
- 웹해킹
- dreamhack DOM XSS
- csp
- Windows Fundamentals
- wargame
- dreamhack web-alasql
- htb
- 드림핵 padding oracle
- alasql
- xxe injection
- LFI vulnerability
- webhacking.kr
- WebHacking
- hack the box
- DreamHack
- 드림핵 Relative Path Overwrite
- dreamhack Relative Path Overwrite
- 드림핵 DOM XSS
- blind injection
- dreamhack CSS Injection
- CSS Injection
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |