Skip to content

Instantly share code, notes, and snippets.

@Lexx918
Created February 14, 2020 17:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Lexx918/db1c0a8f3e0bf70b13dbce58ed276961 to your computer and use it in GitHub Desktop.
Save Lexx918/db1c0a8f3e0bf70b13dbce58ed276961 to your computer and use it in GitHub Desktop.
SO-1081169
Материалы для поднятия макета по вопросу
https://ru.stackoverflow.com/questions/1081169/sql-инъекция-формы-на-сайте/
Создаём папку с проектом, и файлами в ней:
so
-nginx
--default.conf
-php
--Dockerfile
-docker-compose.yml
-index.php
Содержимое файлов:
./so/nginx/default.conf:
client_max_body_size 10m;
server {
listen 80;
server_name so-1081169;
root /app;
location / {
try_files $uri /index.php$is_args$args;
}
location ~ ^/.+\.php(/|$) {
fastcgi_pass fpm:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
./so/php/Dockerfile:
FROM php:7.2.27-fpm
RUN docker-php-ext-install \
mysqli \
pdo \
pdo_mysql
./so/docker-compose.yml:
version: "3.2"
services:
fpm:
build: ./php
volumes:
- ./:/app
links:
- db
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx:/etc/nginx/conf.d/
- .:/app
links:
- fpm
db:
image: percona:5.6
restart: always
environment:
MYSQL_ROOT_PASSWORD: foo
./so/index.php:
<form method="post">
<input type="text" name="login"> (admin)<br>
<input type="text" name="password" value="456"> (123)<br>
<input type="submit" value="send">
</form>
<?php
$login = $_POST['login'] ?? null;
$password = $_POST['password'] ?? null;
if ($login && $password) {
$login = trim(htmlspecialchars(stripslashes($login)));
$password = trim(htmlspecialchars(stripslashes($password)));
$db = mysqli_connect("db", "root", "foo", "test");
$q = "SELECT * FROM users WHERE login='$login'";
echo "<pre>{$q}</pre>";
$result = mysqli_query($db, $q);
$myrow = mysqli_fetch_array($result);
$password = md5($password . "sdf");
echo $myrow['password'] == $password ? "correct!" : "wrong!";
}
Теперь устанавливаем Docker, идём в консоли в папку проекта и выполняем команду:
docker-compose up --build
Когда она закончит работать, выкачает пхп, веб-сервис, мускуль, и запустит всё -
можно открыть http://localhost/ и увидеть макет для отладки.
Но ещё надо создать базу:
выполяем:
docker container list
ищем контейнер с базой, выполняем (подставляя идешку контейнера)
docker exec -it <container-id> bash
оказываемся внутри контейнера, подключаемся к мускулю
mysql -uroot -pfoo
создаём базу и таблицу в ней
create database test;
use test;
create table users(id int, password char(32), login char(10));
insert into users(1, "ae4b57dd10695a75861221d2204dd032", "admin");
выходим
quit
exit
готово! можно отлаживать всё на прототипе на локалхосте.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment