本教程操作环境:windows7系统、html5版、dell g3电脑。
什么是html注入?html注入(hypertext markup language injection)中文意思是“超文本标记性语言注入”,众所周知html含有各种标签,如果web应用程序对用户输入的数据没进行彻底的处理的话,那么一些非法用户提交的数据可能含有html其他标签,而这些数据又恰好被服务器当作正常的html标签显示,那么最终的结果是非法标签被解析(可以应用于钓鱼、社会工程学等),对其他用户造成很大影响。
攻击者可以伪造自己的有效负载,并通过易受攻击的字段将恶意html代码注入应用程序,从而修改网页内容,甚至获取一些敏感数据。
html注入与xss的区别xss(cross-site scripting)中文翻译是“跨站脚本攻击”,xss本质上是html注入攻击,但又不同于html注入,xss利用脚本标记运行javascript等脚本程序,可以通过javascript获取机密数据和一些列危险操作,而html注入只是使用html标签修改页面内容。
html injection - reflected (get)反射型html注入(get方式)
first name填入cac998d76776376dcf78f9e2e8497c51html6fb279ad3fd4344cbdd93aac6ad173ac,last name填入test,发现html字母变成红色,说明我们写入的html代码成功执行了,此网站存在html注入。
html injection - reflected (post)反射型html注入(post方式)
注:get方式提交数据后浏览器地址栏会把提交的数据显示出来,post则不会显示。
与上面get方式一样
firstname填入
html2
,last name填入test,发现html2字母变成绿色,说明我们写入的html代码成功执行了,此网站存在html注入。
html injection - reflected (current url)反射型html注入(current url)
首先,我们分析下源码
核心代码
ec9e539b02335acbbfd5a90c9acede68 4a249f0d628e2318394fd9b75b4636b1html injection - reflected (url)473f0a7621bec819994bb5020d29372a 1c9ea2c5eeb1c8e387673d22eed2e6b9your current url: 5a8028ccc7a7e27417bff9f05adf5932 . $url . 72ac96585ae54b6ae11f849d2649d9e694b3e26ee717c64999d7867364b1b4a3;?>16b28748ea4df4d9c2150843fecfba68
这段代码中有一段php代码,执行html语句,输出一段“your current url:”字符,并调用$url变量,将输出的内容跟在后面。
防护代码
$url= ""; switch($_cookie["security_level"]){ case "0" : // $url = "http://" . $_server["http_host"] . urldecode($_server["request_uri"]); $url = "http://" . $_server["http_host"] . $_server["request_uri"]; //$url= ''接受的参数来自请求头host和urlbreak; case "1" : $url = "<script>document.write(document.url)</script>"; break; case "2" : $url = "http://" . $_server["http_host"] . xss_check_3($_server["request_uri"]); break; default : // $url = "http://" . $_server["http_host"] . urldecode($_server["request_uri"]); $url = "http://" . $_server["http_host"] . $_server["request_uri"]; break;}<select name="security_level"> <option value="0">low</option> <option value="1">medium</option> <option value="2">high</option> </select>
阅读防御代码可以了解到根据设置的难度不通,调用的防御代码也不同。
(1)low将等级设置为low时,执行下面的语句
$url = "http://" . $_server["http_host"] . $_server["request_uri"];
这里的 $_server[“http_host”]表示获取当前域名
这里的 $_server[“request_uri”]”是获取域名后面的完整的地址路径
通过burp抓包修改host参数,可以发现页面上发生了变化
(2)medium将等级设置为medium时,执行下面的语句
$url = "<script>document.write(document.url)</script>";
这里的document对象代表整个html文档,可用来访问页面中的所有元素;
document.write()是动态向页面写入内容
document.url是设置url属性从而在同一窗口打开另一页面
(3)high将等级设置为high时,执行下面的语句
$url = "http://" . $_server["http_host"] . xss_check_3($_server["request_uri"]);
这里调用了xss_check_3函数对host后面的部分进行了过滤处理,使得无法进行注入。
html injection - stored (blog)存储型html注入
注:反射型页面刷新后就不存在了,而存储型是写入了服务器数据库,刷新后照样存在。
因此,存储型危害性大大大于反射型。
在文本域输入6aafc41c53dc9890f51440e709ba9ccahtml 94b3e26ee717c64999d7867364b1b4a3即可成功解析p标签,说明存在html注入。
推荐教程:《html视频教程》
以上就是什么是html注入的详细内容。
