sweetchip's blog


안녕하세요


요즘 sql injection을 주로 공부중인데 이거 참 정말 어렵네요 ㅋㅋ


뭐 이리 쿼리들이 어려운지 참.. ㅠ-ㅠ


한문제 푸는데 삽질과 삽질을 하면서 몇시간씩 지나갑니다.


46번 힌트를 얻으러 오신분께는 아래 힌트를 눌러주세요


힌트














Write up

// 12.11.04

// webhacking.kr problem. 46







전형적인 sql injection 입니다.


제출을 눌러보면 레벨이 1인 koang님의 정보가 나오고 머니는 137989이 나옵니다.


2를 눌러보면 zzibong 님의 결과가 나오고 무려 10,000,000 천만 이라는 엄청난 숫자가 눈에 띕니다.




그러나 3을 눌러보면 아무것도 없습니다.


자 이제 index.phps 를 분석해봅시다.



<?

if(time()<1256900400) exit();

?>
<!-- index.phps -->
<?

$_GET
[lv]=str_replace(" ","",$_GET[lv]);
$_GET[lv]=str_replace("/","",$_GET[lv]);
$_GET[lv]=str_replace("*","",$_GET[lv]);
$_GET[lv]=str_replace("%","",$_GET[lv]); // 문자열 제거 루틴

if(
eregi("union",$_GET[lv])) exit();
if(
eregi("select",$_GET[lv])) exit();
if(
eregi("from",$_GET[lv])) exit();
if(
eregi("challenge",$_GET[lv])) exit();
if(
eregi("0x",$_GET[lv])) exit();
if(
eregi("limit",$_GET[lv])) exit();
if(
eregi("cash",$_GET[lv])) exit(); // 문자열 확인시 실행중지

$q=@mysql_fetch_array(mysql_query("select id,cash from zmail_member where lv=$_GET[lv]"));

if(
$q && $_GET[lv]) // 쿼리가 성립시
{
echo(
"$q[0] information<br><br>money : $q[1]");

if(
$q[0]=="admin") @solve(); // 아이디가 admin이라면 solve

}
?>


간단한 소스입니다.


마지막에서 4번째줄을 보면 최종 목표는 아이디를 admin으로 만들어야 합니다.


제가 며칠전에 쓴 [번호는 기억이..] write up과 매우 유사한 문제입니다.


이제 공격 구문을 생각을 해보면


공백은 무효처리가 되므로 %20은 코드에 넣을수 없습니다.


하지만 공백 우회로 %0a가 가능합니다 [%가 필터링 되지만 주소창에 직접 넣으면 넘어갈때 줄바꿈으로 넘어가서 관계업습니다.]


그리고 = 은 따로 필터링 하지 않으니 그냥 사용할것이고 지난번 write up에 사용되었던 concat() 과 char() 을 사용하겠습니다.


Quary


3 or id=concat(char(a),char(d),char(m),char(i),char(n)) [char() 안의 알파벳은 아스키코드로 변환되어야 합니다.]


결과.



이번 편에서는 지난번에 풀었던 문제와 비슷해서 간략하게 진행되었습니다.

저작자 표시 비영리 변경 금지
신고

'0x10 정보보안 > 0x16 Web' 카테고리의 다른 글

Webhacking.kr 55번 중간 풀이.  (10) 2012.11.05
webhacking.kr 49번 write up  (5) 2012.11.05
Webhacking.kr 46번 write up  (2) 2012.11.04
Webhacking.kr 37번 Write up  (2) 2012.11.04
webhacking.kr 45번 write up  (2) 2012.11.02
webhacking.kr Challenge 22 Write up.  (2) 2012.11.01

Comment 2

  • 2013.05.08 23:02 수정 답글

    비밀댓글입니다

    • 2013.05.10 20:37 신고 수정

      1. admin으로 직접 되지 않아 따로 concat을 사용했습니다.
      만약 admin이 먹힌다면 그대로 사용해도 됩니다.

      2. %0a 같은 경우 hex로 0a 값은 줄바꿈이라는 것인데, 공격을할때 %0a를 넣으면 실제론 DB서버에선 줄바꿈으로 인식한다는 뜻입니다.