티스토리 뷰

hacking/WEB hacking

chall06-10

kiwiiiv 2021. 8. 1. 21:32

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 패키지를 이용하여.. 다음과 같은 코드를 작성함

 

chall10.py

 

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
링크
«   2025/05   »
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
글 보관함