티스토리 뷰
is_numeric
형변환 취약점
chall6
# ; - 와 같은 주석 처리를 위하여 주로 사용되는 문자가 필터링된 것을 볼 수 있음
-> 주석 처리를 통한 방법이 아닌 다른 방법을 생각해 보아야 함.
쿼리의 결과(result)가 존재하면 통과이므로 다음과 같은 방식을 생각함.
1)
select id from play_sql06 where id='1\' and pw=sha1(' or '1'=('1')
\ 문자를 이용하여 ' 문자를 특수 문자가 아닌 문자로 취급하게 함
2)
쿼리에서 select id 이므로,
쿼리를 통하여 출력되는 값은 id와 같은 문자열 값이어야 함.
select id from play_sql06 where id='aa' and pw=sha1('aa') union select "admin"
union select 이용(자료형 고려 필요)
chall7
"crackus" 문자열을 md5 해시 적용한 값을 입력하면 된다. 하지만
is_numeric 함수에 의하여 입력 값을 숫자 값이어야 한다는 것을 알 수 있음.
is_numeric
변수가 수, 또는 수 문자열인지를 확인해 줌
"42"
42
3.14
"0e55"
모두 true 반환
먼저 crackus를 해시 적용한 값을 생각하면
위와 같다.
이 때
mysql 에서도 php에서처럼, 비교문을 수행할 때 형변환을 자동으로 실행시킨다.
만약 md5("crackus")의 결과값과, 숫자 1000 을 비교 연산자를 통하여 비교한다면
숫자와 문자열 타입 간의 비교 시 숫자 타입을 우선시하는 mysql의 특징 때문에 해시 결과값이 숫자 값으로 변환되어 비교가 수행된다.
(이러한 특징이 취약점이 될 수 있어 입력값의 자료형을 체크하거나, 강한 비교와 같은 연산을 통하여 비교하는 취약점 대응 방법이 필요하다.)
(php에도 이런 비슷한 취약점이 존재함... )
따라서 mysql에서 문자 -> 숫자 변환시키는 cast 함수를 이용하면
위와 같으므로 get hash 변수로 5045 값을 넘겨줄 수 있다.
chall8
걍 공백문자 우회 ㄱ
chall9
그냥 비밀번호 길이 브루스포스로 찾으면 됨..
> 연산자가 사용되었다는 것만 생각하고 풀면 ok
chall10
substr함수 이용
python requests 패키지를 이용하여.. 다음과 같은 코드를 작성함
requests.get을 이용하여 parameter, cookie 값을 전달함.
(이중 반복문을 이용하면 한 번에 결과 출력이 가능)
'hacking > WEB hacking' 카테고리의 다른 글
chall11-chall20 (0) | 2021.08.06 |
---|---|
OTP(One Time Password) (0) | 2021.08.04 |
SuperSecure OTP (0) | 2021.07.27 |
chall05 (0) | 2021.07.23 |
sql injection 우회 (0) | 2021.07.23 |
- Total
- Today
- Yesterday
- 희소 배열
- dfs
- dp
- 완전 탐색
- 참조 지역성
- 누적 합
- Greedy
- 완전탐색
- 구간 합
- 동적계획법
- 위상 정렬
- prirotyqueue
- Knapsack
- 백트래킹
- 분할정복
- Priority Queue
- MinHeap
- 최단 거리
- 비트마스킹
- Sort
- Segment Tree
- 이분탐색
- 배낭 문제
- 분할 정복
- HashSet
- LowerBound
- 부분 합
- RequiredArgsConstructor
- MaxHeap
- 페르마의 정리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |