裝了一個小靶場來進行簡單的代碼審計學習
- 搜索框sql注入
代碼分析
if (!empty($_GET['search'])) {
$query = "SELECT * FROM comment WHERE comment_text LIKE '%{$_GET['search']}%'";
$data = mysqli_query($dbc,$query);
該語句沒有任何防護,典型的搜索框注入
搜索輸入1後監控變量
sql語句 SELECT * FROM comment WHERE comment_text LIKE '%1%'
所以只要構造語句閉合%‘就能執行sql注入
Payload: %’ and 1=2 --+
And 1=1 頁面正常,存在注入,不再深入
- 遠程文件包含漏洞
代碼分析
<?php
$f = $_GET['f'];
include_once('sys/config.php');
include($f);
?>
典型include文件包含函數,且頁面顯示了以下配置,證明存在遠程文件包含漏洞,可直接拿下
• allow_url_include = on
• allow_url_fopen = on
- 反射xss
代碼分析
<?php echo 'The result for'.$_GET['search'].'is:'?>
典型的xss反射語句,傳入的值沒有進行htmlspecial過濾
- 文件上次漏洞
代碼分析
<?php
include_once('../sys/config.php');
$uploaddir = '../images';
if (isset($_POST['submit']) && isset($uploaddir)) {
if (move_uploaded_file($_FILES['upfile']['tmp_name'], $uploaddir . '/' . $_FILES['upfile']['name'])) {
echo '文件上傳成功,保存於:' . $uploaddir . '/' . $_FILES['upfile']['name'] . "\n";
//更新用戶信息
$clean_user_avatar = $uploaddir . '/' . clean_input($_FILES['upfile']['name']);
$query = "UPDATE users SET user_avatar = '$clean_user_avatar' WHERE user_id = '{$_SESSION['user_id']}'";
mysqli_query($dbc,$query) or die('updata error!');
mysqli_close($dbc);
//刷新緩存
$_SESSION['avatar'] = $clean_user_avatar;
header('Location: edit.php');
}
else {
echo '圖片上傳失敗!<br />';
echo '<a href="edit.php">返回</a>';
}
}
這段代碼沒有進行判斷文件上傳的格式,存在任意文件上傳。即可拿shell。
繼續加油吧!