error based sql injection 참과 거짓을 error로 구분하는 것인데 보통 if문으로 공격하는 기법.


일단 mysql에서의 if문을 보면

if(조건 , 참 , 거짓) 으로 나타냅니다.

이것으로 참일때 또는 거짓일 때 에러를 출력하게 하면 됩니다.

에러는 서브쿼리를 이용하면 됩니다


예시:

<?php
  
include "./config.php"
  
login_chk(); 
  
dbconnect(); 
  if(
preg_match('/prob|_|\.|\(\)/i'$_GET[pw])) exit("No Hack ~_~");
  if(
preg_match('/sleep|benchmark/i'$_GET[pw])) exit("HeHe");
  
$query "select id from prob_iron_golem where id='admin' and pw='{$_GET[pw]}'";
  
$result = @mysql_fetch_array(mysql_query($query));
  if(
mysql_error()) exit(mysql_error());
  echo 
"<hr>query : <strong>{$query}</strong><hr><br>";
  
  
$_GET[pw] = addslashes($_GET[pw]);
  
$query "select pw from prob_iron_golem where id='admin' and pw='{$_GET[pw]}'";
  
$result = @mysql_fetch_array(mysql_query($query));
  if((
$result['pw']) && ($result['pw'] == $_GET['pw'])) solve("iron_golem");
  
highlight_file(__FILE__);

?>

출처 : lord of sqlinjection


위의 예시를 보면 if문에

mysql에서 (select 1 union select 2)를 넣게 되면 Subquery returns more than 1 row 라는 에러가 뜨게 됩니다.

따라서 url에 " ' or id = 'admin' and (if(length(pw)>숫자,(select 1 union select 2),1)#"를 넣으면

숫자에 해당되는 수에서만 error를 띄우지 않습니다.

물론 select 1 union select 2 와 1 의 자리를 바꾸어 준다면 error가 참일때만 발생할 것입니다.

이렇게 알게된 길이를 범위로 잡고

비밀번호를 계속해서 대입시켜준 다음 화면을 txt로 받아 Subquery가 있을 때의 값으로 비밀번호를 찾을수 있습니다. 




'Hacking' 카테고리의 다른 글

File Inclusion Attacks  (0) 2018.02.01
Oracle Padding Attack[실전편]  (0) 2018.01.31
XSS(Cross Site Scripting)  (0) 2018.01.15
Oracle Padding Attack[이론편]  (2) 2018.01.09


17번을 켜면 이런 화면이 나온다.

너무 비어있어서 긁어보아도 아무것도 없다.

그래서 소스를 열어보았다.


그러니 unlock이라 되어있고 비밀번호가 나와있다.

하지만 굉장히 긴 식이어서 계산기에 복사해 계산해 보았다.



그랬더니 이런 숫자가 나왔다.

이 숫자를 넣으니 패스워드 99780930.7이라고 나온다.

이것을 auth에 flag로 넣어주니 해결되었다.

답을 줘서 쉽게 클리어!


'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 16번  (0) 2017.09.23
Webhacking.kr 14번  (0) 2017.09.23
Webhacking.kr 15번  (0) 2017.09.14
Webhacking.kr 2번  (0) 2017.09.10
Webhacking.kr 1번  (0) 2017.09.10



15번은 문제를 누르기만 하면 Access_Denied라는 창만 뜬다

그리고




잠깐 이 페이지가 켜졌다가 꺼진다.

그렇다 

password = off_script이다.

너무 어처구니가 없는 문제라 의외로 시간을 썼다.

15번 어처구니 없이 클리어!


'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 14번  (0) 2017.09.23
Webhacking.kr 17번  (0) 2017.09.14
Webhacking.kr 2번  (0) 2017.09.10
Webhacking.kr 1번  (0) 2017.09.10
webhacking 가입  (0) 2017.09.10

보통 c언어나 python이나 다른 언어 모두 가장 중요한 역할을 하는 if문!

그렇다면 mysql에 넣을 때 if문은 어떻게 사용할까!


FORM: if(조건, 참일때 , 거짓일때)


ex) mysql> SELECT if(5>1, 'true', 'false')

이때는 참이기 때문에 true가 출력됩니다.


이상!


'함수들' 카테고리의 다른 글

@file함수  (0) 2018.01.04
fwrite함수  (0) 2018.01.04
fopen함수  (0) 2018.01.04
ereg, eregi함수  (0) 2018.01.02
MySQL limit함수  (0) 2017.09.24


이제 웹해킹 2번 문제이다.

우선 문제가 참 다양한 것 같다.


우선 소스를 좀 보기로 한다.

소스를 보니 주석 처리되어진 부분이 눈에 보인다.

아마 저 값이 해법을 쥐고 있을 것 같다.

그리고 쿠키값을 보니 time 에 값이 있다.

하지만 접근 방법을 모르겠어서 힌트를 보았다.

time 값 과 소스에서의 주석값이 힌트라고 하여

값에다 blind sql injection을 해 보았다.




그랬더니 주석값은

<! 2070-01-01 09:00:01 -->라고 나왔다.


또 거짓값을 넣어보았더니




주석값이

<! 2070-01-01 09:00:00 -->으로 나왔다.

참인지 거짓인지로 주석값이 바뀌는 것을 알 수 있었다!


그 다음 소스값에서 우리는 admin페이지가 있을 것을 알 수 있었고 


admin페이지에서 암호를 풀어야 한다


또 board에서 게시글에 들어가 보니 패스워드를 입력해야 하는 창이 있었다.

이것들로 보았을 때 암호문 2개를 풀어야하고 아마 blind sql injection 이 될 듯 하다.

우선 admin의 password의 길이값을 알기위해 넣어 보았더니 8은 아니었다.


그런식으로 넣다보니 10을 넣었을 때 

길이 값이 10이라는 신호를 주석이 알려주었다.

 

하지만 admin이라는 테이블 이름은 나와있었지만 board게시글의 테이블 이름을 알수없어서 검색을 해 보았더니

예전에는 FreeB0aRd 라고 힌트가 있었다고 한다.


같은 방식으로 FreeB0aRd의 길이는  9라는 것을 알 수 있었다.


하지만 이것은 너무 오랜 작업이 될 것 이므로 

파이썬코딩으로 FreeB0aRd의 비밀번호를 알아보자!





http://lureout.tistory.com/486 를 참조해서 코드를 짰다.


그렇게 하면 보드의 비밀번호가 나온다



이렇게 하면 admin manual이라는 참조 파일을 다운받을 수 있다.



또 admin 페이지에서 위의 파이썬 코드를 주소만 바꾸어 넣어 보면 admin페이지의 비밀번호를 얻을 수 있다

이렇게 하면 첨부파일에 걸린 비밀번호를 풀수있는 비밀번호를 얻을 수 있다!

압축을 풀면 flag 획득!

클리어!!





'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 14번  (0) 2017.09.23
Webhacking.kr 17번  (0) 2017.09.14
Webhacking.kr 15번  (0) 2017.09.14
Webhacking.kr 1번  (0) 2017.09.10
webhacking 가입  (0) 2017.09.10




웹해킹.kr 1번문제이다.

일단 los때랑은 유형이 다르다.

내용을 읽어보니 user_lv의 값이 0~9인 숫자여야하고

6과 같거나 크면 1로 세팅되고

5보다 크면 문제가 풀린다

이때 eregi함수에서 . 도 사용하게 해 놓았으므로

5보다 크고 6보다 작은 소수가 답이 될 것 같다.

따라서 edit this cookie에서 user_lv 값을 5.5로 해주면





풀렸다.

웹해킹 1번 클리어!


'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 14번  (0) 2017.09.23
Webhacking.kr 17번  (0) 2017.09.14
Webhacking.kr 15번  (0) 2017.09.14
Webhacking.kr 2번  (0) 2017.09.10
webhacking 가입  (0) 2017.09.10


또 다른 워게임 사이트 webhacking.kr 이다.

우선 가입부터 문제가 시작되었네


일단 처음에는 id슬롯에 이것저것 넣어 보았지만 반응이 없었다. 

몇몇개는 막아 놓은것도 있었다.

그래서 소스를 좀 보았다.


그랬더니 tbody에 가입 창을 주석으로 지워놓았네

그래서 주석을 지우고 가입슬롯을 다시 살렸다.




그런데 아주 가입을 하려해도 문제다....

그래서 이 암호를 풀기위해

http://www.convertstring.com/ko/EncodeDecode/Base64Decode

에 접속해서 복호화를 해보았다.

약 3번 정도를 하니 자신의 ip가 나왔다.


결국 가입성공!




'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 14번  (0) 2017.09.23
Webhacking.kr 17번  (0) 2017.09.14
Webhacking.kr 15번  (0) 2017.09.14
Webhacking.kr 2번  (0) 2017.09.10
Webhacking.kr 1번  (0) 2017.09.10

이제는 드래곤이다.

먼저 들어가자마자 나를 게스트라고 안내하는 데 id = 'guest'를 지정해놓고 주석을 걸어버렸다!

하지만 #은 한줄 주석인 것을 알고있기때문에 

%0a로 개행을 해주고 앞의 값들을 false 로 만들어주고 id = 'admin'을 만들어주면 


드래곤도 클리어~!!!


'WebHacking > Lord Of Sqlinjection' 카테고리의 다른 글

LOS 23번  (0) 2018.01.23
LOS 22번  (0) 2018.01.22
LOS 18번  (0) 2017.08.27
LOS 17번  (0) 2017.08.27
LOS 16번  (0) 2017.08.27

+ Recent posts