[원데이 취약점 분석] wordpress 플러그인 - HTML_Forms

1mn·2022년 11월 15일
0

워드프레스 플러그인 취약점을 또 털어보자

1. 취약점 선정 & 분석

https://patchstack.com/database/vulnerability/html-forms/wordpress-html-forms-plugin-1-3-24-auth-sql-injection-sqli-vulnerability
이번엔 SQL Injection 관련 취약점이다. 먼저 패치된 코드를 살펴보자.

src/admin/class-admin.php(362-374)
수정 전

	public function process_bulk_delete_submissions() {
		global $wpdb;

		if ( empty( $_POST['id'] ) ) {
			return;
		}

		$ids   = $_POST['id'];
		$table = $wpdb->prefix . 'hf_submissions';
		$ids   = join( ',', array_map( 'esc_sql', $ids ) );
		$wpdb->query( sprintf( "DELETE FROM {$table} WHERE id IN( %s );", $ids ) );
		$wpdb->query( sprintf( "DELETE FROM {$wpdb->postmeta} WHERE post_id IN ( %s ) AND meta_key LIKE '_hf_%%';", $ids ) );
	}

수정 후

public function process_bulk_delete_submissions() {
		global $wpdb;

		if ( empty( $_POST['id'] ) ) {
			return;
		}

		$ids   = array_map( 'intval', $_POST['id'] );
		$table = $wpdb->prefix . 'hf_submissions';
		$placeholders = rtrim( str_repeat( '%d,', count( $ids ) ), ',' );
		$wpdb->query( $wpdb->prepare( "DELETE FROM {$table} WHERE id IN( {$placeholders} );", $ids ) );
		$wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->postmeta} WHERE post_id IN ( {$placeholders}  ) AND meta_key LIKE '_hf_%%';", $ids ) );
	}

코드를 살펴보면, POST로 받는 id값에 대한 검증이 없어, 수정 후에는 이것을 패치한 것으로 보여진다.

근데 이 함수는 어디 쓰이는 걸까???
한번 플러그인의 기능을 살펴보자.


이 플러그인은 HTML 형식의 form을 만드는 것으로 보여진다. 함수의 이름인 process_bulk_delete_submissions 으로 유추해보면, form 으로 받은 입력값을 저장해놓은 것을 삭제하는 함수로 추측이 된다.

2.POC

SQL Injection 공격을 진행해보자. sleep 문을 주입해 실제로 구문이 작동하는지 살펴보는 것으로 취약한지 확인해볼것이다.

burp suite 를 활용해 패킷을 조작해보자.

패킷을 살펴보니 역시 body에 id 파라미터를 확인할 수 있었다. Repeater로 보내 조금씩 바꿔가면서 보내보자.

다음과 같이 파리미터를 조작해 패킷을 보내보면,

1~5초 정도 응답이 늦게 오는 걸 알 수 있었다.

profile
정보보안 응애대학생

0개의 댓글