写在最后
在结束之际,我想重申的是,学习并非如攀登险峻高峰,而是如滴水穿石般的持久累积。尤其当我们步入工作岗位之后,持之以恒的学习变得愈发不易,如同在茫茫大海中独自划舟,稍有松懈便可能被巨浪吞噬。然而,对于我们程序员而言,学习是生存之本,是我们在激烈市场竞争中立于不败之地的关键。一旦停止学习,我们便如同逆水行舟,不进则退,终将被时代的洪流所淘汰。因此,不断汲取新知识,不仅是对自己的提升,更是对自己的一份珍贵投资。让我们不断磨砺自己,与时代共同进步,书写属于我们的辉煌篇章。
需要完整版PDF学习资源私我
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
$file\_con=fread($fp,$buffer);
$file\_count+=$buffer;
echo $file\_con;
}
fclose($fp);
可以看到没有对传入的参数做任何限制,所以产生了文件下载漏洞。
###### 1、漏洞利用条件
1. 存在读文件的函数:
fopen() 函数:
$file = $_GET[‘file’]; // 用户提供的文件路径
f
p
=
f
o
p
e
n
(
fp = fopen(
fp=fopen(file, ‘r’); // 打开文件
d
a
t
a
=
f
r
e
a
d
(
data = fread(
data=fread(fp, filesize(
f
i
l
e
)
)
;
/
/
读取文件内容
f
c
l
o
s
e
(
file)); // 读取文件内容 fclose(
file));//读取文件内容fclose(fp); // 关闭文件
echo $data; // 输出文件内容
fread() 函数:
$file = $_GET[‘file’]; // 用户提供的文件路径
f
p
=
f
o
p
e
n
(
fp = fopen(
fp=fopen(file, ‘r’); // 打开文件
d
a
t
a
=
f
r
e
a
d
(
data = fread(
data=fread(fp, 1024); // 读取文件前 1024 字节的内容
fclose($fp); // 关闭文件
echo $data; // 输出文件内容
include() 函数:
$file = _ G E T [ ′ f i l e ′ ] ; / / 用户提供的文件路径 i n c l u d e ( \_GET['file']; // 用户提供的文件路径 include( _GET[′file′];//用户提供的文件路径include(file); // 包含文件并输出内容
readfile() 函数:
$file = _ G E T [ ′ f i l e ′ ] ; / / 用户提供的文件路径 r e a d f i l e ( \_GET['file']; // 用户提供的文件路径 readfile( _GET[′file′];//用户提供的文件路径readfile(file); // 读取并输出文件内容
file\_get\_contents() 函数:
$file = $_GET[‘file’]; // 用户提供的文件路径
d
a
t
a
=
f
i
l
e
_
g
e
t
_
c
o
n
t
e
n
t
s
(
data = file\_get\_contents(
data=file_get_contents(file); // 读取文件内容
echo $data; // 输出文件内容
file() 函数:
$file = $_GET[‘file’]; // 用户提供的文件路径
d
a
t
a
=
f
i
l
e
(
data = file(
data=file(file); // 将文件读入数组中
echo implode(‘’, $data); // 输出文件内容
2. 读取文件的路径用户可控且未校验或校验不严
3. 输出了文件内容
###### 3、漏洞类型:
index.php?f=…/…/…/…/…/…/etc/passwd
index.php?f=…/index.php
index.php?f=file:///etc/passwd
当参数 f 的参数值为php文件时,
若是文件被解析则是文件包含漏洞,若显示源码或提示下载则是文件查看与下载漏洞。
###### 4、文件下载漏洞利用思路:
当遇到一个任意文件下载时,我们的一般利用思路:
* 下载常规的配置文件,例如: ssh,weblogic,ftp,mysql等相关配置
* 下载各种.log文件,从中寻找一些后台地址,文件上传点之类的地方,如果运气好的话会获得一些前辈们的后门。
* 下载web业务文件进行白盒审计,利用漏洞进一步攻入服务器。
当遇到一个任意文件下载漏洞时首先要注意权限问题。因为权限决定我们能下载的文件范围。
尝试读取 `/root/.bash_history` 看自己是否具有root权限。如果没有的话。我们只能按部就班的利用`../`来回跳转读取一些`.ssh`下的配置信息文件。
读取mysql下的`.bash_history`文件。来查看是否记录了一些可以利用的相关信息。然后逐个下载我们需要审计的代码文件,但是下载的时候变得很繁琐,我们只能尝试去猜解目录,然后下载一些中间件的记录日志进行分析。
**如果遇到 java+oracle 环境**
可以先下载 `/WEB-INF/classes/applicationContext.xml` 文件,这里面记载的是web服务器的相应配置,然后下载
`/WEB-INF/classes/xxx/xxx/ccc.class` 对文件进行反编译,然后搜索文件中的upload关键字看是否存在一些api接口,如果存在的话可以本地构造上传页面用api接口将我们的文件传输进服务器。
**如果具有root权限**
这时候很多人肯定会说:有root权限直接去读shadow文件了,但是很多时候我们遇到的服务器可能只对外开放了80,443两个端口,这时候我们即使获得了账号密码作用也不大,但是具备root权限对任意文件下载利用是绝对的。
在linux中有这样一个命令 `locate` 是用来查找文件或目录的,它不搜索具体目录,而是搜索一个数据库 `/var/lib/mlocate/mlocate.db`。这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次。
当我们不知道路径是什么的情况下,这个可以说是一个核武器了,我们利用任意文件下载漏洞将mlocate.db文件下载下来,利用locate命令将数据输出成文件,这里面包含了全部的文件路径信息。
locate 读取方法
locate mlocate.db admin
可以将 mlocate.db 中包含admin内容全部输出来
![在这里插入图片描述](https://img-blog.csdnimg.cn/98985989e0f54a2f9e108467df12cbfa.png)
利用这个文件可以获取到该服务器任何我们想要的内容并下载出来而不用一个一个去猜解目录,但是这个文件只有root用户才能读取。
另一方面我们也可以利用linux内核的一个文件`/proc/self/cmdline`当前进程的cmdline参数,可以获取到路径信息。
总体来说,任意文件下载漏洞的利用主要是为了信息收集,我们通过对服务器配置文件的下载,获取到大量的配置信息、源码,从而根据获取的信息来进一步挖掘服务器漏洞从而入侵。
###### 5、漏洞挖掘:
可以用Google hacking或Web漏洞扫描器
Google search利用:
inurl:“readfile.php?file=”
inurl:“read.php?filename=”
inurl:“download.php?file=”
inurl:“down.php?file=”
##### 二、常见的敏感信息路径:
Windows系统:
C:\boot.ini //查看系统版本
C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件
C:\Windows\repair\sam //存储系统初次安装的密码
C:\Program Files\mysql\my.ini //Mysql配置
C:\Program Files\mysql\data\mysql\user.MYD //Mysql root
C:\Windows\php.ini //php配置信息
C:\Windows\my.ini //Mysql配置信息
Linux/Unix系统:
/root/.ssh/authorized_keys //如需登录到远程主机,需要到.ssh目录下,新建authorized_keys文件,并将id_rsa.pub内容复制进去
/root/.ssh/id_rsa //ssh私钥,ssh公钥是id_rsa.pub
/root/.ssh/id_ras.keystore //记录每个访问计算机用户的公钥
/root/.ssh/known_hosts
//ssh会把每个访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。
/etc/passwd // 账户信息
/etc/shadow // 账户密码文件
/etc/my.cnf //mysql 配置文件
/etc/httpd/conf/httpd.conf // Apache配置文件
/root/.bash_history //用户历史命令记录文件
/root/.mysql_history //mysql历史命令记录文件
/proc/self/fd/fd[0-9]*(文件标识符)
/proc/mounts //记录系统挂载设备
/porc/config.gz //内核配置文件
/var/lib/mlocate/mlocate.db //全文件路径
/porc/self/cmdline //当前进程的cmdline参数
##### 三、靶场复现
使用 web for pentester 进行测试。[镜像下载]( ) VMware安装镜像文件启动即可使用。
查看ip地址:
![在这里插入图片描述](https://img-blog.csdnimg.cn/a2ffc780bdc44d279b1916f231bdaf0f.png)
访问IP 进入环境
![在这里插入图片描述](https://img-blog.csdnimg.cn/00ce1ffe69ca472dad1971bcf28e45d7.png)
用 Directory traversal 模块复现(是的就是目录遍历,一般的文件下载或读取都会用到 `../`)。
###### Example 1
源码:
$UploadDir = ‘/var/www/files/’;
if (!(isset($_GET[‘file’])))
die();
$file = $_GET[‘file’];
$path = $UploadDir . $file;
if (!is_file($path))
die();
header(‘Cache-Control: must-revalidate, post-check=0, pre-check=0’);
header(‘Cache-Control: public’);
header(‘Content-Disposition: inline; filename="’ . basename(
p
a
t
h
)
.
′
"
;
′
)
;
h
e
a
d
e
r
(
′
C
o
n
t
e
n
t
−
T
r
a
n
s
f
e
r
−
E
n
c
o
d
i
n
g
:
b
i
n
a
r
y
′
)
;
h
e
a
d
e
r
(
′
C
o
n
t
e
n
t
−
L
e
n
g
t
h
:
′
.
f
i
l
e
s
i
z
e
(
path) . '";'); header('Content-Transfer-Encoding: binary'); header('Content-Length: ' . filesize(
path).′";′);header(′Content−Transfer−Encoding:binary′);header(′Content−Length:′.filesize(path));
h a n d l e = f o p e n ( handle = fopen( handle=fopen(path, ‘rb’);
do {
d
a
t
a
=
f
r
e
a
d
(
data = fread(
data=fread(handle, 8192);
if (strlen(
d
a
t
a
)
=
=
0
)
b
r
e
a
k
;
e
c
h
o
(
data) == 0) { break; } echo(
data)==0)break;echo(data);
} while (true);
fclose($handle);
exit();
有 fread 函数,可以看出未作限制,直接使用`../`跳跃目录来读取 passwd 文件:
http://192.168.50.132/dirtrav/example1.php?file=…/…/…/etc/passwd
![在这里插入图片描述](https://img-blog.csdnimg.cn/d13cd4340f2c4a91a15ccbea192e5205.png)
###### Example 2
源码:
if (!(isset($_GET[‘file’])))
还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!
王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。
对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!
【完整版领取方式在文末!!】
93道网络安全面试题
内容实在太多,不一一截图了
黑客学习资源推荐
最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
1️⃣零基础入门
① 学习路线
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
② 路线对应学习视频
同时每个成长路线对应的板块都有配套的视频提供:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!