풀이 사전 지식
+ SQL Injection
Double prepare
# Problem
# Main Page
# Source Code
# bot.py
#!/usr/bin/python3
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
import time
import sys
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--disable-logging')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--no-sandbox')
#options.add_argument("user-agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36")
driver = webdriver.Chrome(ChromeDriverManager().install(),options=options)
driver.implicitly_wait(3)
driver.get('http://3.39.55.38:1929/login')
driver.find_element_by_id('id').send_keys('admin')
driver.find_element_by_id('pw').send_keys('$MiLEYEN4')
driver.find_element_by_id('submit').click()
time.sleep(2)
driver.get('http://3.39.55.38:1929/read?no=' + str(sys.argv[1]))
time.sleep(2)
driver.quit()
Python
복사
# db.sql
CREATE DATABASE IF NOT EXISTS `app` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
use `app`;
CREATE TABLE IF NOT EXISTS `users`(
`id` VARCHAR(32) NOT NULL PRIMARY KEY,
`pw` VARCHAR(64) NOT NULL,
`created` DATETIME
);
CREATE TABLE IF NOT EXISTS `posts`(
`no` INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`title` TEXT NOT NULL,
`content` TEXT NOT NULL,
`writer` VARCHAR(32),
`views` INT
);
INSERT INTO `users` VALUES ('admin', '[FILTER]', now());
INSERT INTO `posts` VALUES (0, 'flag', 'codegate2022{EXAMPLE_FLAG}', 'admin', 0);
SQL
복사
소스코드를 확인해보면 admin을 아이디로 $MiLEYEN4를 비밀번호로 사용하는 것을 확인할 수 있습니다.
또한 admin이란 아이디로 Flag를 저장하는 것을 확인할 수 있으며, 이를 종합해보면 admin으로 로그인을 성공하면 flag를 획득할 수 있다는 것을 확인할 수 있습니다.
# Exploit
# Payload
id : admin
password : $MiLEYEN4
Plain Text
복사
# Flag
codegate2022{4074a143396395e7196bbfd60da0d3a7739139b66543871611c4d5eb397884a9}
Plain Text
복사