반응형
ref
- https://www.sourcecodester.com/php/15904/online-graduate-tracer-system-college-ict-alumni.html
- https://vuldb.com/?id.222696
배경
- Graduate Tracer System 은 학적을 관리하는 시스템이다.
- Graduate Tracer System 1.0에서 sqli 취약성이 발견되었습니다. 영향을 받는 것은 admin/adminlog.php 파일의 함수이다다. 사용자가 파라미터를 조작하면 SQL 주입이 발생한다. 원격으로 공격이 가능하며, 관리자권한으로 접근 및 명령어 실행이 가능한 취약점이다. 취약성에 대한 공격 방안은 공개가 되어 있습니다.
분석
- 이 프로그램은 phpstudy 8.1.1.3 을 기반으로 하고 있다.
- Vulnerability File: tracking/admin/adminlog.php
- Vulnerability location: tracking/admin/adminlog.php user
- 로그인시 사용하는 user=* [+] Payload: 파라미터에 페이로드로 공격이 가능하다.
테스트
- 관리자 로그인 페이지로 접근
- 아이디 부분에 payload를 입력 admin%27 ‘1’=’1 입력
- prepared statement 사용하지 않고, 파라미터를 그대로 쿼리스트링의 변수로 받기 때문에 취약성이 발생 slq = select * from xxx where user = ‘admin’ or ‘1’=’1’ and xxx
<?php include('dbcon.php');
session_start();
if (isset($_POST['submit'])){
$user = $_POST['user'];
$password = sha1($_POST['password']);
**$sql = "select * from adminuser where user = '$user' and password = '$password'";**
$result = mysqli_query($conn,$sql);
if ($result->num_rows> 0){
$row = mysqli_fetch_assoc($result);
$_SESSION['id'] = $row['id'];
header("Location:homead.php");
}else{
echo "<script>alert('Mali!! ang iyong user o password na nalagay paki-ulit muli.')</script>";
}
}?>
패치 방법
- 패치 제공하지 않음
- prepared statement로 변경 후 가동
$stmt = $conn->prepare("**select * from adminuser where user = ? and password = ?**");
$stmt->bind_param("ss", $user, $password);
반응형