创建 WordPress SQL 注入漏洞

问题描述 投票:0回答:0

我在学校做CTF游戏。

我发明了一个场景,其中第一步是对我创建的 WordPress 小部件进行基本 SQL 注入。当它启动时,它会在数据库中创建一个“菜单”表,其中包含用于输入日期的行“id”、“date”和用于输入字符串的“food”。然后,该小部件将显示一个用于在页面上输入搜索的字段,并且它将根据所选日期或餐点从数据库中返回一条记录。为了使用 SQL 注入,不应保护此搜索。

我试了很多办法,越弄越烂,还是不会用一个简单的sql注入查询:

chicken' OR 1=1--;
.

这是我的小部件的主要部分:

if ( isset($_POST['submit']) ) {
  $date = $_POST['date'];
  $food = $_POST['food'];
} else {
  $date = $default_date;
  $food = '';
}
?>
<?php echo $args['before_widget']; ?>
<?php if ( ! empty( $title ) ) {
  echo $args['before_title'] . $title . $args['after_title'];
} ?>

<form method="post">
  <label for="date">Datum:</label>
  <input type="date" name="date" value="<?php echo $date; ?>">
  <label for="food">Jídlo:</label>
  <input type="text" name="food" value="<?php echo $food; ?>">
  <input type="submit" name="submit" value="Vyhledat">
</form>

<?php

if ( isset($_POST['submit']) ) {
  if($date !="" && $food !=""){
    $query = "SELECT * FROM wp_menu WHERE date='" . stripslashes($_POST['date']) . "' AND food LIKE '" . stripslashes($_POST['food']) . "';";
    $data = $wpdb->get_results($query);
  }elseif($date ==""){
    $query ="SELECT * FROM wp_menu WHERE food='" . stripslashes($_POST['food']) . "';";
    $data = $wpdb->get_results($query);
  }else{
    $query = "SELECT * FROM wp_menu WHERE date='" . stripslashes($_POST['date']) . "';";
    $data = $wpdb->get_results($query);
  }
} else {
  $data = $wpdb->get_results( "SELECT * FROM " . $wpdb->prefix . "menu" );
}
if ( ! empty( $data ) ) {
    echo "<table class='wp-list-table widefat fixed striped'>";
    echo "<thead><tr><th>Jídlo</th><th>Datum</th></tr></thead>";
    echo "<tbody>";
    foreach ( $data as $row ) {
      echo "<tr><td>" . $row->food . "</td><td>" . $row->date . "</td></tr>";
    }

你知道问题出在哪里吗?

sql-injection wordpress
© www.soinside.com 2019 - 2024. All rights reserved.