보안 공부/webhacking.kr

webhacking.kr 59번 풀이

sh1256 2022. 1. 16. 14:56
728x90

첫화면

view-source 클릭

소스코드

개발자 도구를 이용해서 살펴보니까 login할 때 쓰이는 아이디와 번호다 lid, lphone이네요!

 

소스코드를 정리해 봅시다. 

<login>

1. lid와 lphone에 함수 addslashes를 적용한다. 

2. lid와 lphone에에 해당하는 id와 lv를 선택한다. 

3. id가 존재하면 lv를 출력한다. 

4. 만약 lv==admin이면 문제해결

 

<join>

1. id와 phone에 함수 addslashes를 적용한다. 

2. phone>=20이면 access denied

3. id에 admin(대소문자상관x)이 있으면 access denied

4. phone에 admin|0x|#|hex|char|ascii|ord|select(대소문자상관x)이 있으면 access denied

5. 테이블에 (id, phone(정수만가능), 'guest') 삽입

**가입을 할 땐 무조건 lv=guest

 

++ addslash함수는 아래 4개의 특수문자에 슬래시를 추가한다. 

  • 작은 따옴표 (')
  • 큰 따옴표 (")
  • 백 슬래시 (\)
  • 없는

 

 

id=song, phone=1234 로 join후 login 결과

 

처음에는 addslash함수를 우회할려고 이것저것 찾아봤지만 실패했다. 

 

 

그렇다면 애초에 회원가입을 할 때 lv=admin으로 가입하자는 생각이 들어서

가입을 새로 해 보았다. 

이렇게 가입을 하면, 

insert into chall59 values('test',1234,1)-- ,'guest') 

이런 식으로 lv 값 변경이 가능하다!

pw=1234로 로그인도 정상적

 

 

 

그럼 lv값을 1대신에 admin으로 넣기 위해 sql함수를 하나 사용해 보자. 

내장함수 참고 및 출처 사이트

https://blog.naver.com/foryunha/20139047181

 

[DB]Mysql 내장함수

MySql 내장함수 문자함수 REPLACE REPLACE('string‘,’기존문자열‘,’대체문자열‘) 문...

blog.naver.com

 

SQL에는 

이런 함수가 있다. 

 

이걸 사용하면 admin == reverse('nimda') 가 되는 것이다. 

 

그럼 id=test2, pw=1, reverse('nimda'))-- 

insert into chall59 values('test',1, reverse('nimda'))-- ,'guest') 

을 시도했으나.. 글자수 때문인지 access denied가 떳다.

 

 

 

무슨 방법으로 하지 하다가 다른 블로그를 보고 알게 되었다.

id=nimda 로 설정하고 reverse(id)를 하면 된다는 것..!

 

 

그럼 회원가입을 다시 해보자

id=nimda , pw=1, reverse(id))-- 

insert into chall59 values('nimda',1, reverse(id))-- ,'guest') 

로 시도!!

 

 

 

그리고 id=nimda, pw=1로 로그인 해본다. 

성공!

'보안 공부 > webhacking.kr' 카테고리의 다른 글

webhacking.kr 34번 풀이  (0) 2022.01.19
webhacking.kr 29번 풀이  (0) 2022.01.17
webhacking.kr 56번 풀이  (0) 2022.01.16
webhacking.kr 55번 풀이  (0) 2022.01.15
webhacking.kr 51번 풀이(PHP md5함수 취약점)  (0) 2022.01.05