본문 바로가기

wargame/WEBHACKING.kr

[WEBHACKING.kr]8 - fail

8

짜잔



확-인. 별 거 없어서 index.phps를 살펴보았다.


눈이 침침하니 크게 살펴보자. 살펴보는 김에 해석도 했다.

<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"); /*클라이언트 웹브라우저 환경을 획득한다*/
$ip=$_SERVER[REMOTE_ADDR]; /*사용자가 보고 있는 현재 페이지의 ip 주소를 반환한다*/

$agent=trim($agent); /*문자열 양 끝의 공백 제거*/

$agent=str_replace(".","_",$agent); /*.를 _로 대체한다*/
$agent=str_replace("/","_",$agent); /*/를 _로 대체한다*/

$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); /*소문자 변환*/

if(preg_match($pat,$agent)) exit("Access Denied!"); 
/* 정규식 검사를 수행한다, 이 경우에는 $pat 정규표현식을 대상인 $agent에서 찾는다면 "access Denied!"를 출력하고 종료한다*/

$_SERVER[HTTP_USER_AGENT]=str_replace("'","",$_SERVER[HTTP_USER_AGENT]);/*'을 제거한 값을 대입한다*/
$_SERVER[HTTP_USER_AGENT]=str_replace("\"","",$_SERVER[HTTP_USER_AGENT]);/*\을 제거한 값을 대입한다*/

$count_ck=@mysql_fetch_array(mysql_query("select count(id) from lv0"));
/*lv0이란 테이블에서 id의 개수를 반환하여 그 결과를 배열로 변환한다*/
if($count_ck[0]>=70) { @mysql_query("delete from lv0"); } /*$count_ck의 값이 70이상이면 lv0 테이블의 내용 삭제*/


$q=@mysql_query("select id from lv0 where agent='$_SERVER[HTTP_USER_AGENT]'"); /*조건에 맞는 lv0 테이블의 id 열을 조회한다*/

$ck=@mysql_fetch_array($q);/*조회한 열을 배열로 변환한다*/

if($ck)/*$ck가 존재하면*/
{ 
echo("hi <b>$ck[0]</b><p>"); /*hi $ck[0] 출력*/
if($ck[0]=="admin")/*$ck[0]이 admin이면 문제가 풀리고 lv0의 내용을 삭제한다*/

{
@solve();
@mysql_query("delete from lv0");
}


}

if(!$ck)/*lv0 테이블의 agent, ip, id 항목에 $agent, $ip, 'guest' 값을 넣는다, 만약 실행이 되지 않으면 die 명령어를 실행한다*/
{
$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)");
}


?>

<!--

index.phps

-->

</body>
</html>

getenv("HTTP_USER_AGENT") 함수를 공부할 때 출력 값을 확인해봤더니 이전에 자바스크립트로도 배운적이 있어 출력하였다. 개발자도구에서 뭔가 할 수 있을까해서 만져봤는데 실패하였다.





user-agent에 '를 넣었을 때


agent를 넣었을 때. 이쯤되어서 생각해보니 이게 왜 이렇게 쓰이는지도 모르고 8번 문제를 해결할 수는 없다는 것을 깨달았다. sql injection을 공부하고 풀기로 하였다. 다음 주에는 풀겠지




'wargame > WEBHACKING.kr' 카테고리의 다른 글

[WEBHACKING.kr]14  (0) 2019.05.06
[WEBHACKING.kr]12  (0) 2019.05.06
[WEBHACKING.kr]10  (0) 2019.04.29
[WEBHACKING.kr]6  (0) 2019.04.29
[WEBHACKING.kr]7 - fail  (0) 2019.04.16