ctfshow-web9
web 9
首先把环境下载下来,然后,界面是这样子
给了你用户名了,没有密码,惯性思维使我认为是sql注入,那我就试着做了一下,可是都没有回显,不知道是啥问题。或许是过滤了?还是怎么样。反正就是回显不了。
那我就扫描一下目录吧,拿出我们的dirsearch扫它一手: python dirsearch.py -u 网址 -e php ,利用这个命令就可以扫描了。
发现了,一个robots.txt文件,访问一手。
发现index.phps,确定源码泄露。访问index.phps下载源码
1 <?php 2 $flag=""; 3 $password=$_POST['password']; 4 if(strlen($password)>10){ 5 die("password error"); 6 } 7 $sql="select * from user where username ='admin' and password ='".md5($password,true)."'"; 8 $result=mysqli_query($con,$sql); 9 if(mysqli_num_rows($result)>0){ 10 while($row=mysqli_fetch_assoc($result)){ 11 echo "登陆成功<br>"; 12 echo $flag; 13 } 14 } 15 ?>
这便是源码。大家可以发现,第七行的这段代码: $sql="select * from user where username ='admin' and password ='".md5($password,true)."'"; sql查询,我们看查询条件,用户名是admin,密码是利用md5加密后的结果,
语法:md5(string,raw)
参数 | 描述 |
string | 必需。规定要计算的字符串。 |
raw |
可选。规定: TRUE - 原始 16 字符二进制格式 FALSE - 默认。32 字符十六进制数 |
将密码转换成16进制的hex值以后,再将其转换成字符串后包含'or’xxxx
这样,条件就成了username ='admin' and password =‘ ’or 'xxxxx'
。对语句进行了闭合,其实就是拼接成了万能密码。
看了大佬的博客,得来了字符:ffifdyop
输入此字符串即可获得flag