web狗本狗在此~
0x01 view_source
f12或在网址前加上view-source:
0x02 get_post
hackbar旧版本或是破解版的安装要取消自动更新
0x03 robots
0x04 backup
访问./index.php.bak
0x05 cookie
0x06 disabled_button
删掉disabled
0x07 simple_js
s = r'\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'
ss = s.split(r'\x')[1:]
sss = ''
for i in ss:
sss += chr(int(i, 16))
print(sss)
ssss = sss.split(',')
for i in ssss:
print(chr(int(i)),end='')
#输出:
#55,56,54,79,115,69,114,116,107,49,50
#786OsErtk12
Cyberpeace{786OsErtk12}
0x08 xff_referer
postman整就完了。
CTF中伪造IP的几种方法
Client-Ip: 127.0.0.1
X-Forwarded-For: 127.0.0.1
Host: 127.0.0.1
Referer: www.google.com
0x09 weak_auth
抓包之后发送到Intruder:
将password设置为爆破项(被§包裹):
加载字典:
开始爆破:
寻找响应长度与众不同的包:
(点击Length可以按长度排序)
0x10 webshell
一句话,密码为shell,可用蚁剑或菜刀
蚁剑下载:https://github.com/AntSwordProject
需下载源代码和加载器。
运行加载器,选择源代码目录,即可加载。
主页面内右键选择添加数据,填写url和密码,点击添加
0x11 command_execution
小宁写了个ping功能,但没有写waf
题目样式
对于看到ping或者ping命令却没有弄waf时就要想到命令注入。
具体注入方法
看到ping命令就可以利用截断来执行新的命令。
首先测试所有的截断符号:
‘$’ ‘;’ ‘|’ ‘-’ ‘(’ ‘)’ ‘反引号’ ‘||’ ‘&&’ ‘&’ ‘}’ ‘{’ '%0a’可以当作空格来用;
利用截断符号配合普通命令简单问题基本就出来;
例如:ip=127.0.0.1;cat /home/flag.txt
简单的flag就出来了,也可以配合其他的进行;命令注入原因
系统提供命令执行类函数主要方便处理相关应用场景的功能.而当不合理的使用这类函数,同时调用的变量未考虑安全因素,就会执行恶意的命令调用,被攻击利用。
方法
此类命令执行函数依赖PHP配置文件的设置,如果配置选项 safe_mode 设置为 off,此类命令不可执行,必须设置为 On
的情况下,才可执行。PHP 默认是关闭的。在安全模式下,只有在特定目录中的外部程序才可以被执行,对其它程序的调用将被拒绝。这个目录可以在php.ini文件中用 safe_mode_exec_dir指令,或在编译PHP是加上 –with-exec-dir选项来指定,默认是/usr/local/php /bin。
1:检测一阶命令注入的最佳方式是尝试执行一个sleep命令
2:在外部可以访问的端口上生成一个shell(仅适用于自定义netcat构建):nc -l -n -vv -p 80 -e /bin/bash (unix) 或 nc -l -n -vv -p 80 -e cmd.exe (windows)。
3:如果想要知道目标主机名的长度,我们可以将主机名的输出通过管道符传递给wc -c命令。
另外还有很多方法来进行命令注入。等我详细阅读之后继续整理
0x12 simple_php
php弱类型
以下摘自:php 弱类型总结
=== 在进行比较的时候,会先判断两种字符串的类型是否相等,再比较
== 在进行比较的时候,会先将字符串类型转化成相同,再比较
如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换成数值并且比较按照数值来进行
<?php
var_dump("admin"==0); //true
var_dump("1admin"==1); //true
var_dump("admin1"==1) //false
var_dump("admin1"==0) //true
var_dump("0e123456"=="0e4456789"); //true
?> //上述代码可自行测试
- 观察上述代码,"admin"==0 比较的时候,会将admin转化成数值,强制转化,由于admin是字符串,转化的结果是0自然和0相等
- "1admin"==1 比较的时候会将1admin转化成数值,结果为1,而“admin1“==1 却等于错误,也就是"admin1"被转化成了0,为什么呢??
- "0e123456"=="0e456789"相互比较的时候,会将0e这类字符串识别为科学技术法的数字,0的无论多少次方都是零,所以相等
当一个字符串欸当作一个数值来取值,其结果和类型如下:如果该字符串没有包含'.','e','E'并且其数值值在整形的范围之内
该字符串被当作int来取值,其他所有情况下都被作为float来取值,该字符串的开始部分决定了它的值,如果该字符串以合法的数值开始,则使用该数值,否则其值为0。
<?php
$test=1 + "10.5"; // $test=11.5(float)
$test=1+"-1.3e3"; //$test=-1299(float)
$test=1+"bob-1.3e3";//$test=1(int)
$test=1+"2admin";//$test=3(int)
$test=1+"admin2";//$test=1(int)
?>
所以就解释了"admin1"==1 =>False 的原因
谢谢,见识了