我在学校做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>";
}
你知道问题出在哪里吗?