본문 바로가기
개인 공부/WEB

[웹해킹] LOS 28 - (Frankenstein)

by 아메리카노와떡볶이 2021. 7. 3.
728x90
Lord of sql injection - frankenstein 풀이

los 28번 프랑켄슈타인 풀이입니다.

 

문제 접근

if(preg_match('/prob|_|\.|\(|\)|union/i'$_GET[pw])) exit("No Hack ~_~");
$query "select id,pw from prob_frankenstein where id='frankenstein' and pw='{$_GET[pw]}'";
echo
"<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if(
mysqli_error($db)) exit("error");

여기까지 살펴보면, error based sql injection에 union과 괄호가 금지된 문제처럼 보인다.

$_GET[pw] = addslashes($_GET[pw]);
$query "select pw from prob_frankenstein where id='admin' and pw='{$_GET[pw]}'";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if((
$result['pw']) && ($result['pw'] == $_GET['pw'])) solve("frankenstein");
highlight_file(__FILE__);

문제의 목적은 admin의 pw를 구하는 것이다.

union, ( ) 이 필터링 되지않았다면, 쿼리를

pw=' or id='admin' and if(length(pw)=N,(union select 1,2),1)%23 과 같이 union select를 이용해서 에러를 발생시켜

문제를 해결할 수 있었을 것이다. 이 문제는 union과 ( ) 이 금지되어있다 이럴때는 어떻게 하면 좋을까

잘 생각해봐도 떠오르질 않아서 검색해보았더니, 큰 수를 곱해서 에러를 발생시키는 방법이 있다고한다. 또한 if 문 대신 

case when then end 와 like를 사용해서 대체할 수 있다.

case when then end의 사용은 이미 sfw2 를 풀때에 충분히 학습했기때문에 문법적인 것에 대한 내용은 이 글을 참고하면 된다.

https://man-25-1.tistory.com/100

 

[웹해킹] sfw 2 - (time based sql injection)

sfw2 write up 문제를 푸는 과정에서 엄청난 삽질을 했다. los 문제풀이에서 참인 case를 만들면 출력문구가 나오는 것에 너무 익숙해져서 그 편견을 못벗어난게 문제인거같다. 그래도 그 과정에서 필

man-25-1.tistory.com

문제 풀이

 

먼저 에러가 어떻게 발생하는지 한번 테스트 해보자

https://wooeong.tistory.com/entry/SQL-injection-exp-%EC%97%B0%EC%82%B0%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-error-based

 

[SQL injection] 지수 연산을 이용한 error based

mysql에서 9e2의 연산은 지수 연산으로써 9*(10*10)의 결과로 900을 나타낸다. select 9e0; ==> 9 select 9e1; ==> 90 select 9e2; ==> 900 select 9e999 ==> Error Code: 1367. Illegal double '9e999' value f..

wooeong.tistory.com

my sql에서 9e307까지 표현이 가능하다고 한다. 그래서 에러를 발생시키기 위해 9e307*3의 수를 가지고 에러를 발생시켜보자.

한글자씩 찾을때마다 pw에 더해주면서 비밀번호를 유추하면 된다.

 

 

728x90

'개인 공부 > WEB' 카테고리의 다른 글

[웹해킹] LOS 30 - (Ouroboros)  (0) 2021.07.03
[웹해킹] LOS 29 - (Phantom)  (0) 2021.07.03
[웹해킹] LOS 27 - (Blue Dragon)  (0) 2021.07.03
[웹해킹] LOS 26 - (Red Dragon)  (0) 2021.07.03
[웹해킹] LOS 25 - (Green Dragon)  (0) 2021.07.03

댓글