반응형

<?php
$agent
=trim(getenv("HTTP_USER_AGENT"));
$ip=$_SERVER['REMOTE_ADDR'];
if(
preg_match("/from/i",$agent)){
  echo(
"<br>Access Denied!<br><br>");
  echo(
htmlspecialchars($agent));
  exit();
}
$db dbconnect();
$count_ck mysqli_fetch_array(mysqli_query($db,"select count(id) from chall8"));
if(
$count_ck[0] >= 70){ mysqli_query($db,"delete from chall8"); }

$result mysqli_query($db,"select id from chall8 where agent='".addslashes($_SERVER['HTTP_USER_AGENT'])."'");--
$ck mysqli_fetch_array($result);

if(
$ck){
  echo 
"hi <b>".htmlentities($ck[0])."</b><p>";
  if(
$ck[0]=="admin"){
    
mysqli_query($db,"delete from chall8");
    
solve(8);
  }
}

if(!
$ck){
  
$q=mysqli_query($db,"insert into chall8(agent,ip,id) values('{$agent}','{$ip}','guest')") or die("query error");
  echo(
"<br><br>done!  ({$count_ck[0]}/70)");
}
?>





getenv 함수 

환경변수의 값을 가져오는 함수이다 

아래참조

http://blog.naver.com/PostView.nhn?blogId=ehdghehd10xh&logNo=80196485046&parentCategoryNo=&categoryNo=17&viewDate=&isShowPopularPosts=true&from=search


클라이언트 브라우저 환경을 받아 공백을 제거(trim) 후 저장하고

_server['remote_addr']은 사용자 ip를 받아서 쿼리를 보내 동작하는방식이다.


db에서 id의 개수를 구한뒤 70개가 넘으면 모든내용삭제 쌓이는걸 방지하는 코드인거같다.


밑에 db에서 받아오는 부분에서 addslashes()함수를 이용해 슬레쉬를 추가후 클라이언트 정보를 넣어 확인하여 ck 에 저장하는데 없으면 클라이언트 정보와 ip정보를 넣고 guest를 추가한다.(이부분에 admin으로 추가하면 될것으로 예상된다.)


burpsuit를 사용해서 user agent 정보에 sql injection을 시도해보자


ck가 없으면 생성한다.

ck[0]가 admin이어야 한다.

위 생성쿼리를 참조하여 

insert into chall8(agent,ip,id) values('{$agent}','{$ip}','guest')") or die("query error")

User-Agent:admin','1','admin')# 로 바꾸어서 request 를 날려본다.

생성되는것이 확인된다

이제 다시 User-Agent:admin으로 바꾸어 접속하면 될걸로 예상된다.

클리어!







반응형

'보안 > webhacking' 카테고리의 다른 글

webhacking.kr old-10  (0) 2019.11.23
webhacking.kr old-09  (0) 2019.11.23
webhacking.kr old-07  (0) 2019.11.23
webhacking.kr old-06  (0) 2019.11.23
webhacking.kr old-05  (0) 2019.11.22
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기