目前,我正在一个网络应用程序上做一个黑盒测试,以供培训之用。这是个私人项目。
除了手动测试过程之外,我还使用了一个自动扫描器来检测明显的漏洞。虽然这个工具只发现了一些基本的问题,但它也检测到了一个我以前没有注意到的潜在的SQLi漏洞。我可以使用Burp再现错误,但仍然不能手动提取数据库数据。因为这个,我给了sqlmap一次机会。
在我提出我的实际问题之前,让我给你一些细节:
该漏洞似乎存在于登录表单中。当以下序列为窗体的POSTed时
password=letmein&username=1%c0%00xa7%c0%a2返回mysql错误:
警告: mysql_fetch_array()期望参数1是资源,布尔给定
我将序列缩小到字节%c0。此urlencoded值将导致警告。到目前为止,我还不清楚为什么这个值会导致警告。
sqlmap设置如下所示:
sqlmap -u http://thehost/include/login.php --method POST --data "password=letmein&username=1%c0%00xa7%c0%a2" -p "username" --dbms=mysql它以下列形式生成请求/有效载荷:
[PAYLOAD] 1%c0%00xa7%c0%a2)).("(,)'(
[TRAFFIC OUT] HTTP request [#3]:
POST /include/login.php HTTP/1.1
Host: thehost
Content-type: application/x-www-form-urlencoded; charset=utf-8
Accept: */*
Content-length: 70
Connection: close我想做的是更改POST数据中的注入点。这个是可能的吗?我知道在GET请求中指定注入点是可能的。另外,有人知道为什么注入的%c0字节会扰乱查询吗?
谢谢
发布于 2017-02-02 03:47:32
我不知道注入点,但是0xc0a2是另一种方式来编码“使用UTF-8字符编码的字符”。这里发生的情况是,页面脚本在转换编码之前不正确地剥离“危险”字符。您实际上可以这样插入所有受限字符。只需将ascii代码的7位二进制值分割成两部分,并按如下方式对其进行编码:1100000x 10xxxxxx:
发布于 2017-01-02 15:25:51
SQLmap以一种启发式的方式工作,它首先从应用程序中了解关于好的和坏的响应的区别,然后为username参数引入一个真实的值来获得一个好的响应,然后SQLmap将分析响应,然后注入sql命令来检测可能的SQL注入。您的SQLmap命令必须如下所示:
sqlmap -u http://thehost/include/login.php --data "password=letmein&username=this_is_a_real_username" -p "username" --dbms=mysql选项--method POST不是专用的,当您使用选项--data时,SQLmap知道它是一个请求帖子。
我希望这些信息对你有帮助。
祝好运。
发布于 2017-01-02 18:13:55
我相信这不是注入的问题,而是传递的参数可能不会给出任何结果,并且应用程序正在试图读取由于空结果返回的假值。
希望这能有所帮助!
https://security.stackexchange.com/questions/146996
复制相似问题